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

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

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

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

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

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

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

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

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

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

Команды, указанные в 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/shutdownpkexec chmod 0440 /etc/sudoers.d/shutdown

Извините, но в этом так много путаницы и некоторые действительно сложные ответы, что я чувствую, что должен все взвесить, прежде чем кто-то неправильно поймет и сделает что-то сумасшедшее.

Использование visudo!!

Добавьте в конфигурацию следующие строки:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Это позволяет выполнять команды, перезагрузку и завершение работы с любыми параметрами от любого пользователя. Первое "ВСЕ" относится к пользователям, поэтому оно означает ВСЕХ пользователей. Второй ALL относится ко ВСЕМ хостам.

Для более подробного объяснения см. man sudoers поскольку это приводит дополнительные примеры, и эти примеры находятся на нескольких страницах ниже, но они действительно есть, если вы копнете достаточно глубоко.

Пожалуйста, stackexchange, просто дайте простые, краткие ответы.

Аналогично Как разрешить выполнение без использования sudo?