Я хочу отключить requiretty, чтобы я мог использовать sudo в скриптах, но я бы предпочел отключить его только для одной команды, а не для всего. Это возможно в конфиге sudoers?
Вы можете переопределить настройку по умолчанию для таких параметров, как requiretty
для конкретного пользователя или для конкретной команды (или для конкретного пользователя, запускаемого от имени пользователя или хоста), но не для конкретной команды при выполнении от имени определенного пользователя.
Например, предполагая, что requiretty
это задано в параметрах компиляции по умолчанию, следующий sudoers
файл позволяет и то, artbristol
и другое bob
выполнять /path/to/program
из сценария как root. artbristol
не требует пароля, тогда как bob
должен вводить пароль (предположительно tty_tickets
выключен и bob
недавно ввел свой пароль на каком-либо терминале).
artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty
Если вы хотите изменить настройку команды с конкретными аргументами, вам нужно использовать псевдоним команды (это ограничение синтаксиса). Например, следующий фрагмент позволяет artbristol
запустить /path/to/program --option
в скрипте, но не /path/to/program
с другими аргументами.
Cmnd_Alias MYPROGRAM = /path/to/program --option
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
Что-то вроде этого:
myuser ALL=(ALL) NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser !requiretty
/etc/sudoers
но не работает в/etc/sudoers.d/
файле/etc/sudoers.d/
файл. CentOS 7.1/etc/sudoers.d/
. CentOS 7.5 :(Я обнаружил, что он работает нормально для меня, используя файл в
/etc/sudoers.d
. Это довольно просто проверить.Во-первых, я создал
/etc/sudoers.d/01build
с содержанием:Затем проверил, что это работает:
Затем я изменил
/etc/sudoers.d/01build
и удалилDefaults:
строку, и после этого я получил:источник