[Chef]: Создание пользователей в системе
Потребовалось однажды засетапить сервер и возникла необходимость создания пользователя.
Пусть это будет пользователь poweruser, sudo ему пока не нужно, разве что для runit'а чуть попозже добавим. На выбор встали 3 кукбука:
- https://github.com/kaize/cookbooks/tree/master/users/\r\n* https://github.com/opscode-cookbooks/users
- https://github.com/fnichol/chef-user
Пойдем по порядку, первый из списка это кукбук используемый внутри компании, основные преимущества: пили если надо, что-то добавить, возможность для созданного пользователя указать массив пользователей, чьи ключи будут проброшены на сервер, чтобы иметь возможность заходить под ним.
Поясню: есть пользователь poweruser
, это пользователь системы на прод сервере, и есть некоторая команда разработчиков: Вася(vasya
), Ваня(ivan
), Петя(petya
). Удобно организовать это следующим образом:
app_path/
data_bags/
users/
ivan.json
vasya.json
petya.json
poweruser.json
У разработчиков хэш выглядит примерно так:
{
"id" : "ivan",
"ssh_keys" : "ssh-rsa .... mail@mail.com"
}
У основного нашего пользователя системы:
{
"id" : "poweruser",
"password" : "some_really_secure_password"
}
Теперь когда мы захотим засетапить очередную ноду, то нужно будет переопределить массив users
например в роли:
name "my_super_role"
description "my really super role"
run_list [
...
"recipe[users]"
]
default_attributes(
:users => [
"poweruser" => [
"ivan",
"vasya"
]
]
)
Получается что мы доверяем заходить под пользователем poweruser
нашим 2м разработчиком и что-то творить там, собирать логи, прокручивать руками какие-то таски и т.д., а вот третьему нет никакого доверия, так что его ключи не будем закидывать.
Второй кукбук это официально поддерживаемый community opscode
, которым наверное пользуется большинство, а может нет. Тут все супер классно, за исключением одной небольшой вещи, ни черта непонятно как его использовать. Поэтому после 5 минут изучения кода, я решил, что он мне не нравится и использовать его не буду.
Третий кукбук от небезызвестного товарища fnichol, который написал кучу кукбуков. Именно на нем я и остановил свой выбор. Скорее всего это просто личные предпочтения. Тут все также очень просто, создаем пользователя в папке data_bags
, туда в массив ssh_keys
помещаем нужные нам ключики и "готовим" с помощью knife solo
. В файле с ролью просто определяем массив пользователей, которых мы хотим создать.
default_attributes(
'users' => ['poweruser']
)
knife solo cook root@x.x.x.x nodes/some_project_node.json
Вот и все, теперь на тачке есть пользователь poweruser
.