Intereting Posts
Отсутствие файлов после сборки RAID-5 Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине Зачем вам PulseAudio? Является ли стандартным поведением для компакт-диска автоматически выбирать, когда задано неполное имя каталога? «Ps -ef» обесцвечен? Подавлять вопросы apt-get ctrl + c, за которым следует стрелка вверх для редактирования предыдущей командной строки, приводит к повреждению текста в gnome-terminal git-upload-pack висит бесконечно Как получить выполненную команду процесса, который успешно завершил работу с PID? Gnome3.6.2 – чаты эмпатии не появляются в панели уведомлений через некоторое время в fedora 18 Текст с круговым отключением через zip, unzip с ошибкой «лишних байтов» в OS X Настройка пользователя для доступа sftp в подкаталог другого домашнего каталога пользователей Что такое «петлевое устройство» при монтаже? Количество секунд с эпохи в солярии 10 переключение с гостевого на хост в virt-manager без мыши

Как отключить requiretty для одной команды в sudoers?

Я хочу отключить 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.d . Это довольно просто проверить.

Во-первых, я создал /etc/sudoers.d/01build с содержимым:

 build ALL=(ALL) NOPASSWD:/bin/date Defaults:build !requiretty 

Затем проверили, что он работает:

 ssh host sudo -n /bin/date Mon Nov 16 16:04:27 CST 2015 

Затем я изменил /etc/sudoers.d/01build и удалил строку Defaults: и после этого я получаю:

 ssh host sudo -n /bin/date sudo: sorry, you must have a tty to run sudo