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

190

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

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

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

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

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

1 ответ

254

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

Вы можете использовать директиву NOPASSWD в /etc/sudoers .

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

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

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

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

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

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

Примечание. Всегда используйте команду visudo отредактировать файл sudoers , чтобы убедиться, что вы не блокируете себя из системы - на случай, если вы случайно напишите что-то неправильное в файле sudoers . visudo сохранит измененный файл во временном местоположении и only перезапишет реальный файл 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
    
ответ дан mgd 03.07.2012 в 08:43
источник

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