Spec-Zone.ru › Chef 18

Пользовательский ресурс

Эта страница сгенерирована из исходного кода клиента Chef Infra. Чтобы предложить изменение, отредактируйте файл user.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.

Страница всех ресурсов Infra


Используйте ресурс 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API