Я входжу /sbin
і бачу, що shutdown
має дозволи rwxr-xr-x
. Чи це не означає, що хтось може його виконати?
shutdown
команду.
shutdown
.
Я входжу /sbin
і бачу, що shutdown
має дозволи rwxr-xr-x
. Чи це не означає, що хтось може його виконати?
shutdown
команду.
shutdown
.
Відповіді:
Кожен може виконати 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
він працює як корінь у цьому сценарії.
shutdown
, але ця програма фактично не може викликати відключення системи, якщо поточний користувач не має root права. Правильно?
shutdown
. Установлена програма запускається з дозволу користувача, якому належить виконуваний файл. Наприклад, /etc/passwd
працює з кореневими дозволами, щоб ви могли змінити файл пароля. Дивіться сторінку сторінки chmod
.
/usr/bin/passwd
запуски з кореневими дозволами"! /etc/passwd
не виконується (це "файл пароля" змінюється).
Сам двійковий файл 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) = ?
shutdown
перевіряє ваш UID 0.
if(getuid() != 0) printf("Need to be root");
. Який насправді вихідний код показує, що він є.
Здається, що при закриванні буде перевіряти список доступу, якщо ви позначите його -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).