Як запускати конкретні команди sudo без пароля?


211

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

Однак є три sudoкоманди, які я хочу виконати, не вводячи пароль :

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

Як я можу виключити ці команди із захисту паролем до sudo?


Відповіді:


283

Використовуйте 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 . Надання відносного шляху вважається синтаксичною помилкою.

Якщо команда закінчується /символом, що знаходиться в кінці, і вказує на каталог, користувач зможе запустити будь-яку команду в цьому каталозі (але не в жодних підкаталогах, що входять до неї). У наступному прикладі користувач 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

2
Два рядки стосуються саме цих двох команд. Якщо userіншим способом не надано sudoправ, цей користувач не може застосовувати інші команди. Погляньте man sudoі man sudoers.
mgd

4
@StanKurdziel Я спробував з цією лінією на Mac OS X Yosemite , і вона працювала добре: mgd ALL=(root) NOPASSWD: /var/root/test. Я користувач mgdі ALLозначає "від усіх хостів" . /var/root/testце просто «Hello World» сценарій оболонки з правами доступу: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Я не вніс жодних інших змін у систему.
мгд

2
Що є hostу файлі sudoers?
користувач106563

1
Це не відповідь, це майже повний посібник щодо директиви NOPASSWD. Дякую.
Eray

1
@Michael, будь ласка, прочитайте сторінку чоловіка. Там все написано. Для його цитування: Однак ви можете також вказати аргументи командного рядка (включаючи підстановку). Крім того, ви можете вказати "", щоб вказати, що команда може бути запущена лише без аргументів командного рядка.
mgd

3

Вибачте, але є стільки плутанини щодо цього та деяких дійсно складних відповідей, що я відчуваю, що я повинен зважитись тут, перш ніж хтось неправильно зрозуміє і зробить щось божевільне.

Використання візудо !!

Додайте до конфігурації такі рядки:

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

Це дозволяє виконувати команди, перезавантаження та відключення з будь-якими параметрами від будь-якого користувача.

Будь ласка, стаксекс, просто дайте прості стислі відповіді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.