Чому я не можу виконати відключення, коли дозвіл rwxr-xr-x?


34

Я входжу /sbinі бачу, що shutdownмає дозволи rwxr-xr-x. Чи це не означає, що хтось може його виконати?


1
яка команда, яку ви виконували, і яка помилка, яку ви отримуєте?
вбивствоблуцифера

Я думаю, що він говорить про shutdownкоманду.
Вінц

Я побіг ./shutdown +30. Я отримую "відключення: потрібно мати root". Однак якщо дозволи говорять про те, що хтось може виконати, чому я повинен бути root?
Korgan Rivera

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

4
@ Kevdog777: На цьому GUI PolicyKit керує цим. Це демон з привілеями root, який перевірить, чи дозволено вам користуватися shutdown.
Вінц

Відповіді:


76

Кожен може виконати shutdown, але для запуску системного відключення потрібні кореневі привілеї. Але shutdownце не налаштовано, і тому лише root може успішно виконати його. shutdownПрограма досить хороший , щоб перевірити свої привілеї , і нехай ви знаєте , якщо є проблема, але навіть якщо він наївно спробував завершення роботи системи, нічого не відбудеться.

ГЛАНДАР: Я можу викликати духи з найглибших глибоких.
ГОТЕРПУР: Чому, так я можу, чи так може зробити будь-яка людина; Але чи прийдуть вони, коли ви зателефонуєте до них?
(від Генріха IV)

shutdownнічим не відрізняється від /bin/rm. Кожен може виконати його, але звичайний користувач не може видалити /etcабо домашній каталог іншого користувача.

Зокрема: Тільки процес, що працює з привілеями root (ефективний UID 0), може спрямовувати систему init на зупинку системних служб, припинення всіх процесів користувача та видачу системного виклику, який фактично зупиняє машину. (Якщо він shutdownбув налаштований, він би запускався як root незалежно від того, хто його викликає; але це не так.)

Що з викликом shutdownз графічного інтерфейсу, наприклад, з control-alt-del? Важливо усвідомити, що в цьому випадку shutdownвін запускається безпосередньо initі працює з кореневими привілеями. Тож кожен, хто підійде до консолі, потенційно міг би її вимкнути. Якщо це не бажано, контроль-alt-delete фактично запуститься shutdown -a. (Дивіться документацію, яку @ деякі1 цитував у своїй відповіді). Це говорить shutdownпро те, щоб перевірити, чи вповноважений користувач має право його запускати. Але це актуально лише тому, що shutdownвін працює як корінь у цьому сценарії.


2
Пояснення: будь-хто може виконати програму shutdown, але ця програма фактично не може викликати відключення системи, якщо поточний користувач не має root права. Правильно?
LarsH

1
Це майже все. Програми запускаються з привілеями користувача, що викликає, якщо вони не встановлені. Для вимкнення системи потрібні привілеї root, тому ви також не можете писати власну програму (за винятком використання отворів у безпеці тощо).
alexis

Що означає "відключення не встановлено"?
Ієн Самуель Маклін Старший

1
@Iain, програми, як правило, запускаються з дозволу користувача, який викликає їх. Так само і у випадку shutdown. Установлена ​​програма запускається з дозволу користувача, якому належить виконуваний файл. Наприклад, /etc/passwdпрацює з кореневими дозволами, щоб ви могли змінити файл пароля. Дивіться сторінку сторінки chmod.
alexis

Це мали бути " /usr/bin/passwdзапуски з кореневими дозволами"! /etc/passwdне виконується (це "файл пароля" змінюється).
alexis

15

Сам двійковий файл shutdownперевіряє, чи ваш UID 0.

Подивіться висновок страйку:

strace /sbin/shutdown -r -h now
...
...
geteuid()                               = 10001
setuid(10001)                           = 0
getuid()                                = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1)                           = ?

4
+1 для показу використання стрази ... це корисно. Однак я не бачу, як цей слід показує, що shutdownперевіряє ваш UID 0.
LarsH

1
Це ви не побачите у виведенні страйку, оскільки він повідомляє лише про системні виклики. Ви можете зробити висновок про те, що за гетуїдом уважно слідує написання повідомлення про помилку, на який був подібний код if(getuid() != 0) printf("Need to be root");. Який насправді вихідний код показує, що він є.
msw

5

Так ! Усі можуть виконувати цю команду. Як ви вже говорили, ви можете запустити його, але ви зіткнулися з повідомленням "Треба бути корінним", а не permission denied. У shutdownкоманді перевіряє ваші , UIDщоб побачити , якщо ви корінь, чи ні.


-1

Здається, що при закриванні буде перевіряти список доступу, якщо ви позначите його -a:

ACCESS CONTROL
       shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
       one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user  is  logged
       in  on  one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
       if the file /etc/shutdown.allow is present.  It then compares the login names in that file with the list of people that are logged in on a virtual console
       (from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message

       shutdown: no authorized users logged in

       to  the  (physical)  system  console.  The  format  of  /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
       allowed. Currently there is a limit of 32 users in this file.

Оскільки в даний час ви називаєте його без прапора -a, він за замовчуванням дозволяє лише вимкнення кореневих файлів.

Якщо ви хочете, щоб додаткові користувачі могли запускати команду, конфігуруйте цей файл і використовуйте прапор.

Why can't I execute shutdown when the permission is rwxr-xr-x?

Біти дозволу не обов'язково виключають контроль доступу на основі користувача чи групи.


Виклик його за -aдопомогою командного рядка не матиме ніякої різниці: він shutdown -aвсе одно повинен бути виконаний з кореневими дозволами (що initпостачає на control-alt-del).
alexis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.