Вопрос: Как запустить определенные команды sudo без пароля?


На одной конкретной машине мне часто нужно запускать sudo команды время от времени. Я в порядке с вводом пароля на sudo в большинстве случаев.

Однако есть три sudo команды Я хочу запустить без ввода пароля:

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Как я могу исключить эти команды из защиты паролем sudo?


185
2017-07-03 08:31


Источник


Похожий на Как разрешить выполнение без использования sudo? - fouric


Ответы:


Использовать NOPASSWD директива

Вы можете использовать NOPASSWD директивы в вашем /etc/sudoers файл,

Если ваш пользователь вызван user и ваш хост называется host вы можете добавить эти строки в /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Это позволит пользователю user для запуска желаемых команд host без ввода пароля. Все остальные sudoкоманды ed все равно потребует пароль.

Команды, указанные в sudoers файл должен быть полностью квалифицированным (т. е. использовать абсолютный путь к команде для запуска), как описано в sudoers справочная страница, Предоставление относительного пути считается синтаксической ошибкой.

Если команда заканчивается завершающим / символ и указывает на каталог, пользователь сможет выполнить любую команду в этом каталоге (но не в любых подкаталогах в нем). В следующем примере пользователь user может запускать любую команду в каталоге /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Заметка: Всегда используйте команду visudo для редактирования sudoers чтобы убедиться, что вы не блокируете себя из системы - на случай, если вы случайно напишете что-то неправильное для sudoers файл. visudo сохранит измененный файл во временном месте и будет только перезаписать реальную sudoers файл, если модифицированный файл может быть проанализирован без ошибок.

С помощью /etc/sudoers.d вместо изменения /etc/sudoers

В качестве альтернативы редактированию /etc/sudoers файла, вы можете добавить две строки в новый файл в /etc/sudoers.d например /etc/sudoers.d/shutdown, Это элегантный способ разделения различных изменений на sudo прав, а также оставляет оригинал sudoers файл нетронутый для упрощения обновления.

Заметка: Опять же, вы должны использовать команду visudo для редактирования файла, чтобы убедиться, что вы не заблокируете себя из системы:

sudo visudo -f /etc/sudoers.d/shutdown 

Это также автоматически гарантирует правильность установки владельца и разрешений нового файла.

Если sudoers испорчена

Если вы не использовали visudo редактировать ваши файлы, а затем случайно испортить /etc/sudoers или испортил файл в /etc/sudoers.d то вы будете заблокированы из sudo,

Решение может заключаться в том, чтобы исправить файлы, используя pkexec который является альтернативой sudo,

Исправить /etc/sudoers:

pkexec visudo

Исправить /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Если права собственности и / или разрешения неверны для любого sudoers файла, файл будет проигнорирован sudo так что вы также можете оказаться в этой ситуации. Опять же, вы можете использовать pkexec чтобы исправить это.

Правильные разрешения должны быть такими:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

использование pkexec как это исправить права собственности и разрешения:

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

250
2017-07-03 08:43



Я надеюсь, что это применится только к этим двум командам, и я не буду возиться с остальной частью системы или любой другой командой? - Z9iT
Эти две строки относятся к этим двум командам. Если user не в других отношениях sudo права, никакие другие команды не могут быть использованы этим пользователем. Посмотри на man sudo а также man sudoers, - mgd
Удивительное объяснение - hamstar
@StanKurdziel Я пробовал эту строку в Mac OS X Yosemite, и она отлично работала: mgd ALL=(root) NOPASSWD: /var/root/test, Я пользователь mgd а также ALL означает «от всех хостов», /var/root/test это простой сценарий оболочки Hello World с разрешениями: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test, я сделал нет другие изменения в системе. - mgd
@Michael, пожалуйста, прочитайте страницу руководства. Там все написано. Чтобы процитировать его: Однако вы также можете указать аргументы командной строки (включая подстановочные знаки). В качестве альтернативы вы можете указать «», чтобы указать, что команда может выполняться только без аргументов командной строки. - mgd