Як надати користувачеві пільги відключення?


9

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

Я посилався на цю сторінку і додав текст у свій файл судерів. Однак я все-таки запитую мені пароль кожного разу, коли я його виконую sudo shutdown -h now. Крім того, я отримую помилку про те, що кореневі привілеї потрібні, коли я виконую завершення роботи без судо.

Мій файл судорів виглядає приблизно так.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

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

Дякую.


1
Чи можете ви опублікувати справжній і цілий sudoersфайл, будь ласка?
enzotib

Відповіді:


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

1

Деякий час тому я зробив це, встановивши suid (Встановити ідентифікатор користувача). Це змушує програму виконуватись як власник файлу, а не користувач, який запускає його. Оскільки вимкненням належить root, це повинно дозволяти вам відключитись без sudo.

chmod u+s /sbin/shutdown

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


Взагалі, не бажано змінювати файли або метадані файлів, встановлених з пакетів, крім файлів конфігурації в /etc.
enzotib

Хм ... правда! Але який тоді офіційний шлях? Граючи з полькітом? Не так і приємно ...
turbo

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

Це єдине, що працювало на мене.
Марк Стюарт

0

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

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