Ресурс sudo
Эта страница сгенерирована из исходного кода клиента Chef Infra. Чтобы предложить изменение, отредактируйте файл sudo.rb и отправьте запрос на добавление в репозиторий Chef Infra Client.
Используйте ресурс sudo для добавления или удаления отдельных записей sudo с помощью файлов sudoers.d. Для использования ресурса sudo требуется версия sudo 1.7.2 или новее, так как он полагается на директиву #includedir, появившуюся в версии 1.7.2. Данный ресурс не навязывает установку необходимой версии sudo. Поддерживаемые Chef релизы Ubuntu, SuSE, Debian и RHEL (6+) поддерживают эту функцию.
Новое в Chef Infra Client 14.0.
Синтаксис
Полный синтаксис всех свойств, доступных для ресурса sudo:
sudo 'name' do
command_aliases Array # default value: []
commands Array # default value: ["ALL"]
config_prefix String # default value: "Prefix values based on the node's platform"
defaults Array # default value: []
env_keep_add Array # default value: []
env_keep_subtract Array # default value: []
filename String # default value: 'name' unless specified
groups String, Array # default value: []
host String # default value: "ALL"
noexec true, false # default value: false
nopasswd true, false # default value: false
runas String # default value: "ALL"
setenv true, false # default value: false
template String
users String, Array # default value: []
variables Hash
visudo_binary String # default value: "/usr/sbin/visudo"
action Symbol # defaults to :create if not specified
endгде:
-
sudo— это ресурс. -
name— имя, присвоенное блоку ресурса. -
actionопределяет действия, которые Chef Infra Client выполнит для приведения узла к желаемому состоянию. -
command_aliases,commands,config_prefix,defaults,env_keep_add,env_keep_subtract,filename,groups,host,noexec,nopasswd,runas,setenv,template,users,variables, иvisudo_binary— доступные для этого ресурса свойства.
Действия
Ресурс sudo имеет следующие действия:
:create- Создаёт файл конфигурации sudoers в каталоге
sudoers.d. (по умолчанию) :delete- Удаляет файл конфигурации sudoers из каталога
sudoers.d. :nothing- Этот блок ресурса не выполняет действий, пока не получит уведомление от другого ресурса. После уведомления, этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
Свойства
Ресурс sudo имеет следующие свойства:
-
command_aliases - Тип в Ruby: Массив | Значение по умолчанию:
[]Псевдонимы команд, которые могут использоваться в качестве разрешенных команд в дальнейшем.
-
commands - Тип в Ruby: Массив | Значение по умолчанию:
["ALL"]Массив полных путей к командам, которые этот пользователь sudo может выполнять.
-
config_prefix - Тип в Ruby: Строка | Значение по умолчанию:
Prefix values based on the node's platformКаталог, содержащий файл конфигурации sudoers.
-
defaults - Тип в Ruby: Массив | Значение по умолчанию:
[]Массив значений по умолчанию для пользователя/группы.
-
env_keep_add - Тип в Ruby: Массив | Значение по умолчанию:
[]Массив строк, которые нужно добавить в
env_keep.
-
env_keep_subtract - Тип в Ruby: Массив | Значение по умолчанию:
[]Массив строк, которые нужно удалить из
env_keep.
-
filename - Тип в Ruby: Строка | Значение по умолчанию:
The resource block's nameИмя файла sudoers.d, если оно отличается от имени блока ресурса.
-
groups - Тип в Ruby: Строка, Массив | Значение по умолчанию:
[]Группа(ы), которым предоставляются привилегии sudo. Это свойство принимает либо массив, либо список, разделённый запятыми. Лидирующая % в именах групп необязательна.
-
host - Тип в Ruby: Строка | Значение по умолчанию:
ALLХост, который нужно установить в конфигурации sudo.
-
noexec - Тип в Ruby: true, false | Значение по умолчанию:
falseЗапретить командам выполнять внешние вызовы.
-
nopasswd - Тип в Ruby: true, false | Значение по умолчанию:
falseРазрешить выполнение sudo без указания пароля.
-
runas - Тип в Ruby: Строка | Значение по умолчанию:
ALLПользователь, от имени которого можно выполнить команду(ы).
-
setenv - Тип в Ruby: true, false | Значение по умолчанию:
falseОпределяет, разрешать ли сохранение среды с помощью
sudo -E.
-
template - Тип в Ruby: Строка
Имя erb-шаблона в вашем кулинарном блоке, если вы хотите предоставить свой шаблон.
-
users - Тип в Ruby: Строка, Массив | Значение по умолчанию:
[]Пользователь(и), которым предоставляются привилегии sudo. Это свойство принимает либо массив, либо список, разделённый запятыми.
-
variables - Тип в Ruby: Словарь
Переменные, которые нужно передать в пользовательский шаблон. Это свойство игнорируется, если не используется пользовательский шаблон.
-
visudo_binary - Тип в Ruby: Строка | Значение по умолчанию:
/usr/sbin/visudoПуть к visudo для проверки конфигурации.
Общие функциональные возможности ресурсов
Ресурсы 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[String]'
Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите
'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[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 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.
Примеры
В следующих примерах демонстрируются различные подходы к использованию ресурса sudo в рецептах:
Предоставление пользователю привилегий sudo для любой команды
sudo 'admin' do
user 'admin'
end
Предоставление пользователю и группам привилегий sudo для любой команды
sudo 'admins' do
users 'bob'
groups 'sysadmins, superusers'
end
Предоставление привилегий sudo без пароля для определенных команд
sudo 'passwordless-access' do
commands ['/bin/systemctl restart httpd', '/bin/systemctl restart mysql']
nopasswd true
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/sudo/