Пользовательский ресурс
Эта страница сгенерирована из исходного кода клиента Chef Infra. Чтобы предложить изменение, отредактируйте файл user.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс user для добавления пользователей, обновления существующих пользователей, удаления пользователей и блокировки/разблокировки паролей пользователей.
Примечание
Системные атрибуты собираются Ohai в начале каждого выполнения Chef Infra Client. По умолчанию, действия, доступные ресурсу user, обрабатываются после начала выполнения Chef Infra Client. Это означает, что системные атрибуты, добавленные или измененные ресурсом user во время выполнения Chef Infra Client, должны быть перезагружены, прежде чем они станут доступны Chef Infra Client. Эти системные атрибуты можно перезагрузить двумя способами: загрузить значения в начале (следующего) выполнения Chef Infra Client или использовать ресурс ohai для перезагрузки системных атрибутов во время текущего выполнения Chef Infra Client.
Синтаксис
Блок ресурса 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 Client выполнит для приведения узла в желаемое состояние -
comment,force,gid,home,iterations,manage_home,non_unique,password,salt,shell,system,uid, иusername— это свойства этого ресурса с указанным типом Ruby. Подробную информацию обо всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства».
Действия
Ресурс user имеет следующие действия:
:create- По умолчанию. Создает пользователя с заданными свойствами. Если пользователь уже существует (но не соответствует), обновит этого пользователя для соответствия.
:lock- Заблокировать пароль пользователя.
:manage- Управляет существующим пользователем. Это действие ничего не делает, если пользователь не существует.
:modify- Изменить существующего пользователя. Это действие вызывает исключение, если пользователь не существует.
:nothing- Этот блок ресурса не выполняет никаких действий, пока не будет уведомлен другим ресурсом о необходимости действий. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:remove- Удалить пользователя.
:unlock- Разблокировать пароль пользователя.
Свойства
Ресурс user имеет следующие свойства:
-
comment - Тип Ruby: Строка
Один или несколько комментариев о пользователе.
-
force - Тип Ruby: true, false
Принудительно удалить пользователя. Может использоваться только с действием
:remove.Предупреждение
Использование этого свойства может привести к несогласованному состоянию системы. Например, учетная запись пользователя будет удалена, даже если пользователь вошел в систему. Домашний каталог пользователя будет удален, даже если этот каталог используется несколькими пользователями.
-
gid - Тип Ruby: Строка, Целое число
Идентификатор группы. Это свойство ранее называлось
groupи продолжает работать.
-
home - Тип Ruby: Строка
Расположение домашнего каталога.
-
iterations - Тип Ruby: Целое число
Только платформа macOS. Количество итераций для пароля с хешем тени 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: Строка
Хеш пароля тени
-
salt - Тип Ruby: Строка
Хеш SALTED-SHA512-PBKDF2.
-
shell - Тип Ruby: Строка
Логин оболочки.
-
system - Тип Ruby: true, false
Создать системного пользователя. Это свойство может быть использовано с
useraddв качестве поставщика для создания системного пользователя, который передает флаг-rвuseradd.
-
uid - Тип Ruby: Строка, Целое число
Числовой идентификатор пользователя.
-
username - Тип Ruby: Строка
Имя пользователя. Значение по умолчанию:
nameблока ресурса. Подробную информацию см. в разделе «Синтаксис» выше.
Общие функциональные возможности ресурсов
Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.
Общие свойства
Следующие свойства общие для каждого ресурса:
compile_time-
Тип Ruby: true, false | Значение по умолчанию:
falseУправляет фазой, в которой ресурс выполняется на узле. Установите в значение true, чтобы запустить ресурс при построении коллекции ресурсов (фаза
compile phase). Установите в значение false, чтобы запустить ресурс при настройке узла Chef Infra Client (фазаconverge phase). ignore_failure-
Тип Ruby: true, false, :quiet | Значение по умолчанию:
falseПродолжить выполнение рецепта, если ресурс завершится неудачно по любой причине. При
:quietне будет отображаться полный стек вызовов, и рецепт будет продолжать выполнение, если ресурс завершится неудачно. retries-
Тип Ruby: Целое число | Значение по умолчанию:
0Количество попыток перехватить исключения и повторить ресурс.
retry_delay-
Тип Ruby: Целое число | Значение по умолчанию:
2Задержка в секундах между попытками повтора.
sensitive-
Тип Ruby: true, false | Значение по умолчанию:
falseОбеспечить, чтобы конфиденциальные данные ресурсов не регистрировались Chef Infra Client.
Уведомления
-
notifies -
Тип Ruby: Символ, 'Chef::Resource[Строка]'
Ресурс может уведомить другой ресурс о действиях при изменении состояния. Укажите
'resource[name]',:actionресурса, который должен выполнить, и:timerдля этого действия. Ресурс может уведомлять более одного ресурса; используйте операторnotifiesдля каждого ресурса, который должен быть уведомлен.Если указанный ресурс не существует, генерируется ошибка. В отличие от
subscribes, этот вариант не будет завершаться неудачей, если исходный ресурс не найден.
Таймер указывает момент во время выполнения Chef Infra Client, когда выполняется уведомление. Доступны следующие таймеры:
:before-
Указывает, что действие по уведомленному ресурсу должно выполняться до обработки блока ресурса, в котором находится уведомление.
:delayed-
По умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце выполнения Chef Infra Client.
-
:immediate,:immediately -
Указывает, что уведомление должно выполняться немедленно, по каждому уведомленному ресурсу.
Синтаксис notifies:
notifies :action, 'resource[name]', :timer
-
subscribes -
Тип Ruby: Символ, 'Chef::Resource[Строка]'
Ресурс может прослушивать другой ресурс и выполнять действия при изменении состояния прослушиваемого ресурса. Укажите '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 Client, когда выполняется уведомление. Доступны следующие таймеры:
: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 (и выше) вычисляет хэш пароля shadow с использованием SALTED-SHA512-PBKDF2. Длина значения хэша shadow составляет 128 байт, значение соли — 32 байта, а целое число определяет количество итераций. Следующий код вычислит хэши пароля shadow для 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
Использование вычисленного хэша пароля shadow с ресурсом 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/