Дозвіл закриття Linux


8

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

Проте в тому ж середовищі робочого столу, якщо я відкриваю термінал (скажімо gnome-terminal) як звичайний користувач, і типу

shutdown -h now

Мені буде запропоновано

shutdown: need to be root

Єдиний спосіб вимкнення - це додати команду sudo.

Хто-небудь може пояснити, чому це так?

Дякую KC


Відповіді:


8

Питання, поставлене К.Ченом, це: чому мені потрібні привілеї sudo, коли я роблю це з CLI, але мені не потрібні такі привілеї, коли я роблю це з GUI.

Перша частина відповіді полягає в тому, що люди, які розробляють робочі середовища, такі як Gnome, KDE, Xfce, Mate, Cinnamon, намагаються спростити роботу своїх користувачів, і вони налаштовують вимикання та перезавантаження, не вимагаючи облікових даних sudo. Це, до речі, означає, що повинна існувати послідовність вимикання ні включають вимикання програми, що вимагає привілеїв sudo (ніяк не можна обійти це).

Я не знаю детально, як кожен DE робить це, але я знаю, що є м'який спосіб збити, або перезапустити / вимкнути / спляти вашу систему, яка не вимагає привілеїв root. Ви можете знайти оригінальну публікацію у посаді форуму Arch Linux . По суті, це означає видачу команд hese:

зупинка

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

перезавантаження

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

сплячий

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Я думаю, що кнопки GUI використовують приблизно ці команди. Щоб бути впевненим, треба дивитися на код, але я вважаю, що це безпечна ставка.


1
Якщо хтось віддалений вхід на машину, яка також має робоче середовище, може він або вона видати ці команди і успішно завершити роботу / перезавантажити / призупинити / перейти в сплячий режим?
gerrit

На це питання стоїть шкідлива сторона, я вважаю, що треба здійснювати певну свободу дій.
MariusMatutiae

1
Чому шкідливо? Якщо його можна зловживати, сисопи повинні знати, а потім знати, як захищати від неї.
gerrit

Я не кажу, що ви зловмисні, але що зловмисне використання може бути зроблено з цієї інформації. Я вже шкодую, що поділився ... Можливо, я повинен був зробити, як @Matteo
MariusMatutiae

5

Причина цього дизайнерського рішення не є технічною (ви можете мати непривілейоване shutdown команді або запиту пароля в GUI).

  • При використанні середовища робочого столу користувач передбачалося мати фізичний доступ до машини. Тоді краще дозволити чисте вимикання, ніж дозволити користувачу натиснути кнопку живлення або відключити шнур живлення.

  • При використанні оболонки користувач може бути віддаленим користувачем і для виключення віддаленого вимкнення запитуються додаткові привілеї.

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


Я бачу вашу точку зору, @Matteo. Але, як сказав MariusMatutiae, під капотом DE повинна бути викликана якась інша програма, крім "shutdown", для завершення роботи без привілеїв суперкористувача. Ви маєте якісь поняття, що це таке?
K.Chen

1

Sudo (superuser do) дозволяє системному адміністратору надавати певним користувачам (або групам користувачів) можливість запускати деякі (або всі) команди як кореневі під час входу всіх команд і аргументів. команду shutdown -h або init 0 можна використовувати для вимкнення машини. Але обидві команди вимагали права root для виконання.

Команда, яка знаходить в / sbin, повинна мати привілейовані права root для її виконання. Щоб знайти місце розташування команди вимкнення,

тип які вимикаються в терміналі.

Сподіваюся, тепер ваші сумніви зрозумілі :)

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