Я использую Ubuntu 11.04. Я хочу запустить скрипт, который проверяет на рабочий процесс и закрывает систему, когда тот процесс заканчивается. Чтобы сделать это, пользователь требует доступа завершения работы так, чтобы сценарий мог быть выполнен, не требуя пароля.
Я упомянул эту страницу и добавил текст в моем sudoers файле. Однако это все еще спрашивает меня пароль каждый раз, когда я выполняюсь sudo shutdown -h now
. Кроме того, я получаю ошибку при высказывании, что полномочия пользователя root требуются, когда я выполняю завершение работы без sudo.
Мой sudoers файл выглядит примерно так.
# Cmnd alias specification
Cmnd_Alias SHUTDOWN = /sbin/shutdown
# User privilege specification
root ALL=(ALL:ALL) ALL
myusername ALL = NOPASSWD: SHUTDOWN
Как я могу дать разрешение пользователю выполнить команду завершения работы, не имея необходимость вручную вводить пароль?
Спасибо.
Можно закрыть или перезапустить использование HAL или ConsoleKit, который не потребует, чтобы Вы ввели имя пользователя:
HAL (более старые версии Ubuntu):
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
ConsoleKit (более новые версии Ubuntu, протестированные на Ubuntu 11.04):
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Я сделал это как в этом ответе, работы безупречно для меня. Возможно, Ваш подход отсутствует visudo
часть?
Откройте командную строку и тип:
sudo visudo
В Файле, который открывается, добавляют следующую строку в конце:
yourusername ALL=NOPASSWD: /sbin/halt
Затем выйдите из редактора и сейфа это (CTRL+x).
Теперь можно закрыть компьютер из командной строки, например, после загрузки чего-то:
wget UrlOfTheFileYouWantToDownload ; sudo halt
Некоторое время назад я сделал это путем установки suid (идентификатор Пользователя аппарата). Это заставляет программу выполниться как владелец файла, не пользователь, выполняющий его. Так как завершение работы принадлежит корню, которого это должно позволить Вам завершить работу без sudo.
chmod u+s /sbin/shutdown
Существуют последствия безопасности хотя, так как любой может затем выполнить завершение работы. http://en.wikipedia.org/wiki/Setuid
Это кажется, что Вы хотели бы запустить сам скрипт как корень. Если Вы хотите запустить скрипт, который ожидает чего-то для окончания и затем выключает компьютер, то Вы только что запустили скрипт с sudo. Это спросит Ваш пароль, когда Вы запустите скрипт, но затем сам сценарий является бесплатным завершить работу системы без дальнейшего вмешательства.