Ресурс user
Эта страница сгенерирована из исходного кода Chef. Чтобы предложить изменение, отредактируйте файл user.rb и отправьте запрос на включение изменений в репозиторий Chef.
Страница справочника по ресурсам
Используйте ресурс user для добавления пользователей, обновления существующих пользователей, удаления пользователей и блокировки/разблокировки паролей пользователей.
Примечание
Системные атрибуты собираются Ohai в начале каждого запуска клиента Chef Infra. По своей сути, действия, доступные для ресурса user, обрабатываются после начала запуска клиента Chef Infra. Это означает, что системные атрибуты, добавленные или измененные ресурсом user во время запуска клиента Chef Infra, должны быть перезагружены, прежде чем они станут доступны клиенту Chef Infra. Эти системные атрибуты могут быть перезагружены двумя способами: путем получения значений в начале следующего запуска клиента Chef Infra или с помощью ресурса ohai для перезагрузки системных атрибутов во время текущего запуска клиента Chef Infra.
Синтаксис
Блок ресурсов user управляет пользователями на узле:
user 'a user' do
comment 'A random user'
uid 1234
gid 'groupname'
home '/home/random'
shell '/bin/bash'
password '$1$JJsvHslasdfjVEroftprNn4JHtDi'
end
Полный синтаксис для всех свойств, доступных ресурсу user, следующий:
user 'name' do
comment String
force true, false # see description
gid String, Integer
home String
iterations Integer
manage_home true, false
non_unique true, false
password String
salt String
shell String
system true, false
uid String, Integer
username String # defaults to 'name' if not specified
action Symbol # defaults to :create if not specified
endгде:
-
user— это ресурс -
name— это имя блока ресурсов -
actionопределяет действия, которые клиент Chef Infra выполнит для приведения узла в желаемое состояние -
comment,force,gid,home,iterations,manage_home,non_unique,password,salt,shell,system,uid, иusername— это свойства этого ресурса, с указанным типом Ruby. См. раздел «Свойства» ниже для получения дополнительной информации о всех свойствах, которые могут использоваться с этим ресурсом.
Действия
Ресурс user имеет следующие действия:
:create- По умолчанию. Создает пользователя с заданными свойствами. Если пользователь уже существует (но не соответствует), обновляет этого пользователя в соответствии с заданными свойствами.
:lock- Блокирует пароль пользователя.
:manage- Управляет существующим пользователем. Это действие ничего не делает, если пользователь не существует.
:modify- Изменяет существующего пользователя. Это действие вызывает исключение, если пользователь не существует.
:nothing- Этот блок ресурсов не выполняет никаких действий, если не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурсов либо запускается немедленно, либо помещается в очередь для запуска в конце запуска клиента Chef Infra.
:remove- Удаляет пользователя.
:unlock- Разблокирует пароль пользователя.
Свойства
Ресурс user имеет следующие свойства:
comment-
Тип Ruby: String
Один (или несколько) комментариев о пользователе.
force-
Тип Ruby: true, false
Принудительное удаление пользователя. Может использоваться только с действием
:remove.Предупреждение
Использование этого свойства может привести к несогласованному состоянию системы. Например, учетная запись пользователя будет удалена, даже если пользователь вошел в систему. Домашний каталог пользователя будет удален, даже если этот каталог совместно используется несколькими пользователями.
gid-
Тип Ruby: String, Integer
Идентификатор группы. Это свойство ранее называлось
group, и оба варианта продолжают функционировать.
home-
Тип Ruby: String
Расположение домашнего каталога.
iterations-
Тип Ruby: Integer
Только для платформы macOS. Количество итераций для пароля с хешем shadow SALTED-SHA512-PBKDF2.
manage_home-
Тип Ruby: true, false
Управление домашним каталогом пользователя.
При использовании с действием
:create, домашний каталог пользователя создается на основеHOME_DIR. Если домашний каталог отсутствует, он создается, если толькоCREATE_HOMEв/etc/login.defsне установлено вno. При создании в домашний каталог включается базовый набор файлов и подкаталогов.При использовании с действием
:modify, домашний каталог пользователя перемещается вHOME_DIR. Если домашний каталог отсутствует, он создается, если толькоCREATE_HOMEв/etc/login.defsне установлено вno. Содержимое домашнего каталога пользователя перемещается в новое местоположение.
non_unique-
Тип Ruby: true, false
Создать дубликат (неуникальную) учетную запись пользователя.
password-
Тип Ruby: String
Хэш shadow пароля
salt-
Тип Ruby: String
Хэш SALTED-SHA512-PBKDF2.
shell-
Тип Ruby: String
Входная оболочка.
system-
Тип Ruby: true, false
Создать системного пользователя. Это свойство может использоваться с
useraddв качестве провайдера для создания системного пользователя, который передает флаг-rвuseradd.
uid-
Тип Ruby: String, Integer
Числовой идентификатор пользователя.
username-
Тип Ruby: String
Имя пользователя. Значение по умолчанию:
nameблока ресурсов. См. раздел «Синтаксис» выше для получения дополнительной информации.
Общие функции ресурса
Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.
Общие свойства
Следующие свойства являются общими для каждого ресурса:
compile_time-
Тип Ruby: true, false | Значение по умолчанию:
falseУправление фазой, во время которой ресурс выполняется на узле. Установите значение true для запуска во время построения коллекции ресурсов (
compile phase). Установите значение false для запуска во время настройки узла клиентом Chef Infra (converge phase). ignore_failure-
Тип Ruby: true, false, :quiet | Значение по умолчанию:
falseПродолжить выполнение рецепта, если ресурс завершится неудачно по любой причине.
:quietне будет отображать полный трассировку стека, и рецепт будет продолжать выполняться, если ресурс завершится неудачно. retries-
Тип Ruby: Integer | Значение по умолчанию:
0Количество попыток перехватить исключения и повторить попытку выполнения ресурса.
retry_delay-
Тип Ruby: Integer | Значение по умолчанию:
2Задержка повтора (в секундах).
sensitive-
Тип Ruby: true, false | Значение по умолчанию:
falseОбеспечить, чтобы конфиденциальные данные ресурса не регистрировались Chef InfraClient.
Уведомления
notifies-
Тип Ruby: Symbol, 'Chef::Resource[String]'
Ресурс может уведомлять другой ресурс о необходимости выполнить действие, когда его состояние изменяется. Укажите
'resource[name]',:action, которое должен выполнить этот ресурс, а затем:timerдля этого действия. Ресурс может уведомлять более одного ресурса; используйте операторnotifiesдля каждого ресурса, который необходимо уведомить.Если ссылаемый ресурс не существует, возникает ошибка. В отличие от этого,
subscribesне завершится неудачно, если исходный ресурс не найден.
Таймер указывает момент во время запуска клиента Chef Infra, в который выполняется уведомление. Доступны следующие таймеры:
:beforeУказывает, что действие в уведомленном ресурсе должно быть выполнено до обработки блока ресурсов, в котором находится уведомление.
:delayedПо умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце запуска клиента Chef Infra.
-
:immediate,:immediately Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.
Синтаксис для notifies следующий:
notifies :action, 'resource[name]', :timer
subscribesТип Ruby: Symbol, 'Chef::Resource[String]'
Ресурс может прослушивать другой ресурс, а затем выполнять действие, если состояние прослушиваемого ресурса изменяется. Укажите 'resource[name]', :action, который необходимо выполнить, а затем :timer для этого действия.
Обратите внимание, что subscribes не применяет указанное действие к ресурсу, который он прослушивает — например:
file '/etc/nginx/ssl/example.crt' do
mode '0600'
owner 'root'
end
service 'nginx' do
subscribes :reload, 'file[/etc/nginx/ssl/example.crt]', :immediately
end
В этом случае свойство subscribes перезагружает службу nginx, когда обновляется ее файл сертификата, расположенный в /etc/nginx/ssl/example.crt. subscribes не вносит никаких изменений в сам файл сертификата, он просто прослушивает изменения файла и выполняет действие :reload для своего ресурса (в этом примере nginx) при обнаружении изменения.
Если другой ресурс не существует, подписка не вызовет ошибку. Сравните это с более строгими семантическими правилами notifies, которые вызовут ошибку, если другой ресурс не существует.
Таймер указывает момент во время запуска клиента Chef Infra, в который выполняется уведомление. Доступны следующие таймеры:
:beforeУказывает, что действие над уведомлённым ресурсом должно быть выполнено до обработки блока ресурсов, в котором расположено уведомление.
:delayedПо умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения Chef Infra Client.
-
:immediate,:immediately Указывает, что уведомление должно быть выполнено немедленно, для каждого уведомлённого ресурса.
Синтаксис для subscribes:
subscribes :action, 'resource[name]', :timer
Охранники
Свойство охранника может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. На основании результатов этой оценки свойство охранника сообщает Chef Infra Client, следует ли продолжать выполнение ресурса. Свойство охранника принимает либо строковое значение, либо значение блока Ruby:
- Строка выполняется как команда оболочки. Если команда возвращает
0, охранник применяется. Если команда возвращает любое другое значение, свойство охранника не применяется. Строковые охранники в powershell_script выполняют команды Windows PowerShell и могут возвращатьtrueв дополнение к0. - Блок выполняется как код Ruby, который должен вернуть либо
true, либоfalse. Если блок возвращаетtrue, свойство охранника применяется. Если блок возвращаетfalse, свойство охранника не применяется.
Свойство охранника полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, Chef Infra Client ничего не делает.
СвойстваСледующие свойства могут быть использованы для определения охранника, который оценивается во время фазы выполнения Chef Infra Client:
not_ifПредотвратить выполнение ресурса, когда условие возвращает
true.only_ifРазрешить выполнение ресурса только если условие возвращает
true.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса user в рецептах:
Создать системного пользователя
user 'systemguy' do
comment 'system guy'
system true
shell '/bin/false'
end
Создать системного пользователя с переменной
Следующий пример демонстрирует как создать системного пользователя. В этом случае значение home вычисляется и сохраняется в переменной под названием user_home, которая устанавливает атрибут home пользователя.
user_home = "/home/#{node['cookbook_name']['user']}"
user node['cookbook_name']['user'] do
gid node['cookbook_name']['group']
shell '/bin/bash'
home user_home
system true
action :create
end
Использовать пароли SALTED-SHA512-PBKDF2
macOS 10.8 (и выше) рассчитывает хеш пароля тени, используя SALTED-SHA512-PBKDF2. Длина значения хеша тени составляет 128 байт, значение соли — 32 байта, а целое число определяет количество итераций. Следующий код вычислит хеши пароля тени для macOS 10.8 (и выше):
password = 'my_awesome_password'
salt = OpenSSL::Random.random_bytes(32)
iterations = 25000 # Any value above 20k should be fine.
shadow_hash = OpenSSL::PKCS5::pbkdf2_hmac(
password,
salt,
iterations,
128,
OpenSSL::Digest::SHA512.new
).unpack('H*').first
salt_value = salt.unpack('H*').first
Использовать рассчитанный хеш пароля тени с ресурсом user:
user 'my_awesome_user' do
password 'cbd1a....fc843' # Length: 256
salt 'bd1a....fc83' # Length: 64
iterations 25000
end
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/user/