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

174

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

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

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

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

    
задан Z9iT 03.07.2012 в 10:31
источник

1 ответ

233

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

Вы можете использовать директиву NOPASSWD в % файла co_de% .

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

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

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

Команды, указанные в файле sudo должны быть полностью квалифицированными (т. е. используя абсолютный путь к выполняемой команде), как описано в sudoers man . Предоставление относительного пути считается синтаксической ошибкой.

Если команда заканчивается символом trailing sudoers и указывает на каталог, пользователь сможет запустить любую команду в этом каталоге (но не в любых подкаталогах в ней). В следующем примере пользователь / может выполнять любую команду в каталоге user :

user host = (root) NOPASSWD: /home/someuser/bin/

Примечание. Всегда используйте команду /home/someuser/bin/ отредактировать файл visudo , чтобы убедиться, что вы не блокируете себя из системы - на случай, если вы случайно напишите что-то неправильное в файле sudoers . sudoers сохранит измененный файл во временном местоположении и only перезапишет реальный файл visudo , если модифицированный файл может быть проанализирован без ошибок.

Использование sudoers вместо изменения /etc/sudoers.d

В качестве альтернативы редактированию файла /etc/sudoers вы можете добавить две строки в новый файл в /etc/sudoers , например. %код%. Это элегантный способ разделения различных изменений на права /etc/sudoers.d , а также отсутствие исходного файла /etc/sudoers.d/shutdown для упрощения обновления.

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

sudo visudo -f /etc/sudoers.d/shutdown 

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

Если sudoers испорчено

Если вы не использовали visudo для редактирования своих файлов, а затем случайно испортили sudoers или перепутали файл в visudo , тогда вы будете заблокированы из /etc/sudoers .

Решение может заключаться в исправлении файлов с помощью /etc/sudoers.d , который является альтернативой sudo .

Чтобы исправить pkexec :

pkexec visudo

Чтобы исправить sudo :

pkexec visudo -f /etc/sudoers.d/shutdown

Если права собственности и / или разрешения являются некорректными для любого файла /etc/sudoers , файл будет проигнорирован /etc/sudoers.d/shutdown , поэтому вы также можете оказаться заблокированным в этой ситуации. Опять же, вы можете использовать sudoers , чтобы исправить это.

Правильные разрешения должны быть такими:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Используйте sudo , чтобы исправить права собственности и разрешения :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
    
ответ дан mgd 03.07.2012 в 10:43
источник

Ознакомьтесь с другими вопросами по меткам