Как мне выполнить определенные команды 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