Как дать пользователю право на отключение?

9

Я использую 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

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

Спасибо.

Амей Джа
источник
1
Не могли бы вы опубликовать свой настоящий и целый sudoersфайл, пожалуйста?
энзотиб

Ответы:

6

Вы можете выключить или перезапустить, используя 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
Алин Андрей
источник
7

Я сделал это, как в этом ответе, работает для меня безупречно. Может быть, ваш подход пропускает visudoчасть?

Откройте командную строку и введите:

sudo visudo 

В открывшемся файле добавьте следующую строку в конце:

yourusername ALL=NOPASSWD: /sbin/halt

Затем выйдите из редактора и сохраните его (CTRL + x).

Теперь вы можете выключить компьютер из командной строки, например, после загрузки чего-либо:

wget UrlOfTheFileYouWantToDownload ; sudo halt
Christoph
источник
1

Некоторое время назад я сделал это, установив suid (Set User ID). Это заставляет программу выполняться как владелец файла, а не как пользователь, выполняющий его. Поскольку shutdown принадлежит root, это должно позволить вам завершить работу без sudo.

chmod u+s /sbin/shutdown

Однако это может повлиять на безопасность, поскольку любой может запустить отключение. http://en.wikipedia.org/wiki/Setuid

турбо
источник
Как правило, не рекомендуется изменять файлы или метаданные файлов, установленных из пакетов, кроме файлов конфигурации в /etc.
энзотиб
Хм ... правда! Но каков тогда официальный путь? Играя с polkit? Не так приятно тоже ...
турбо
sudoэто правильный путь, на мой взгляд, но, к сожалению, пользователь не дает возможности увидеть его sudoersфайл, и что с ним не так.
энзотиб
Это единственное, что сработало для меня.
Марк Стюарт
0

Похоже, вы хотите запустить сам скрипт от имени пользователя root. Если вы хотите запустить скрипт, который ждет, пока что-то завершится, а затем выключает компьютер, то вы просто запустите скрипт с помощью sudo. Это спросит ваш пароль, когда вы запустите скрипт, но тогда сам скрипт сможет завершить работу системы без дальнейшего вмешательства.

Джо-Эрленд Шинстад
источник