Используйте 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