На одной конкретной машине мне часто нужно время от времени запускать команды sudo
. Я согласен с вводом пароля на sudo
в большинстве случаев.
Однако есть три sudo
команды Я хочу запустить без ввода пароля :
sudo reboot
sudo shutdown -P now
Как можно исключить эти команды из защиты паролем для sudo
?
NOPASSWD
Вы можете использовать директиву NOPASSWD
в своем файле / etc / sudoers
.
Если ваш пользователь называется пользователь
, а ваш хост называется хост
, вы можете добавить эти строки в / etc / sudoers
:
user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot
Это позволит пользователю пользователь
для выполнения желаемых команд на хосте
без ввода пароля. Все остальные команды sudo
ed по-прежнему будут требовать пароль.
Команды, указанные в файле sudoers
, должны быть полностью квалифицированными (т. Е. Использовать абсолютный путь к команда для запуска), как описано на странице руководства sudoers
. Указание относительного пути считается синтаксической ошибкой.
Если команда заканчивается завершающим символом /
и указывает на каталог, пользователь сможет выполнить любую команду в этом каталоге (но не в любые подкаталоги в нем). В следующем примере пользователь пользователь
может выполнять любую команду в каталоге / 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
Извините, но здесь так много путаницы и некоторых действительно сложных ответов, что я чувствую, что должен взвесить все это, прежде чем кто-то поймет неправильно и сделает что-то безумное.
Использование visudo !!
Добавьте в конфигурацию следующие строки:
ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
Это позволяет выполнять команды, перезагрузку и выключение с любыми параметрами от любого пользователя.
Пожалуйста, stackexchange, просто дайте простые краткие ответы.