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

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

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

  • sudo reboot
  • [ 114]
  • sudo shutdown -P now

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

244
задан 5 September 2015 в 04:35

2 ответа

Используйте директиву 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
317
ответ дан 5 September 2015 в 04:35

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

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

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

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

Это позволяет выполнять команды, перезагрузку и выключение с любыми параметрами от любого пользователя.

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

10
ответ дан 5 September 2015 в 04:35

Другие вопросы по тегам:

Похожие вопросы: