Як кнопка живлення вимикає комп'ютер без дозволу root?


36

Коли я намагаюся вимкнути комп'ютер з командного рядка або терміналу, я повинен мати привілеї root:

amy@amy:~$ shutdown now
shutdown: Need to be root

і

amy@amy:~$ halt
halt: Need to be root

але при вимкненні за допомогою графічного інтерфейсу користувача, тобто кнопки вимкнення або кнопки апаратного відключення, мене не запитують пароль для цього. Що означає це вимкнення для графічного інтерфейсу і чому він не потребує привілеїв для пароля чи кореня?

Я використовую Ubuntu 11.04 Natty.



1
тому що якщо зловмисник має фізичний доступ до вашого комп'ютера, ви вже втратили. Спроба завадити тому, хто знаходиться в зоні досяжності зброї, не робить майже нічого, в кращому випадку є тактикою затримки і здебільшого спричиняє більше незбагненності для щоденних користувачів, ніж для зловмисника. Більшість дистрибутивів Linux дасть вам кореневу підказку, якщо говорити суворо під час завантаження саме з цієї причини.
Джозеф Роджерс

Відповіді:


33

Апаратна кнопка живлення запускає подію ACPI, яка acpid(демон ACPI) помічає та реагує на; в цьому випадку, вимкнувши систему, хоча ви можете змусити її робити все, що завгодно. Демон ACPI працює як root, тому він має дозвіл на вимкнення системи. Настільні середовища (наприклад, gdmдля Gnome), як правило, також працюють як root, тому я підозрюю, що вони працюють так само - у вас немає дозволу на вимкнення системи, але ви можете сказати, що gdmви хочете її закрити, і вона може це робити ваше ім’я


це безпечно ?? "ти можеш змусити його робити все, що хочеш".
amyassin

7
Щоб acpidзробити щось інше, ніж це вже робиться, вам доведеться вкоренитися, тож ви вже матимете дозвіл робити незахищені речі. Також можна використовувати системи MAC, такі як SELinux, для захисту acpid, обмежуючи те, що їм дозволено робити, навіть якщо вони виконуються як root.
Воррен Янг

5
@amyassin Ну, щоб змінити те, що потрібно, вам потрібні привілеї root; звичайний користувач не може сказати, що робити. Але acpidце налаштовується, він може запускати різні сценарії в залежності від апаратних подій, які він бачить (наприклад, я acpidзаблокував комп’ютер, коли натискаю кнопку живлення)
Майкл Мрозек

7
@amyassen Якщо хтось має фізичний доступ до вашої машини, тоді вже пізно турбуватися про безпеку - якщо кнопка живлення не викликає витонченого вимикання, вони можуть просто потягнути шнур живлення та спричинити непристойне вимкнення.
Шадур

3
Згадане "шкідливе програмне забезпечення" повинно було отримати права власності на root та SUID для того, щоб сказати init робити з вимкненням - і знову, до того моменту, як потрапить до цього моменту, у вас виникнуть більші проблеми, ніж можливе відключення.
Шадур

11

Відповідь Майкла правильно обговорює функціонування системи при використанні апаратного перемикача живлення, але більшість середовищ настільних комп’ютерів насправді використовують dbusдля цієї мети, а не роблять це самостійно. Наприклад, GNOME використовує dbus«S , org.freedesktop.Hal.Device.SystemPowerManagement.Shutdownколи кнопка виключення натиснута. Коли це надсилається, dbusробить деякі перевірки, щоб визначити, чи користувач, який надсилає повідомлення, уповноважений здійснювати відключення, і якщо вони є, він відключає систему.

Ви можете наслідувати це за допомогою dbus-send. Наприклад, щоб вимкнути вашу систему dbus, використовуйте щось подібне:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.