Я в /sbin
и вижу, что shutdown
есть разрешения rwxr-xr-x
. Разве это не значит, что кто-то может выполнить это?
shutdown
команде.
shutdown
.
Я в /sbin
и вижу, что shutdown
есть разрешения rwxr-xr-x
. Разве это не значит, что кто-то может выполнить это?
shutdown
команде.
shutdown
.
Ответы:
Любой может выполнить shutdown
, но для запуска выключения системы требуются права суперпользователя. Но shutdown
это не setuid, и поэтому только root может успешно выполнить его. shutdown
Программа достаточно хорош , чтобы проверить свои привилегии , и пусть вы знаете , если есть проблема, но даже если он наивно попытался завершение работы системы, ничего не произойдет.
GLENDOWER: Я могу вызывать духов из глубокой души.
ХОТСПУР: Почему, я тоже, или любой другой. Но придут ли они, когда ты их позовешь?
(от Генриха IV)
shutdown
ничем не отличается от /bin/rm
. Каждый может выполнить его, но обычный пользователь не может удалить /etc
или домашний каталог другого пользователя.
В частности: только процесс, работающий с привилегиями root (эффективный UID 0), может направить систему init на остановку системных служб, завершение всех пользовательских процессов и выполнить системный вызов, который фактически останавливает машину. (Если бы shutdown
был setuid, он запускался бы как root независимо от того, кто его вызывает; но это не так.)
Как насчет вызова shutdown
из GUI, например, с помощью control-alt-del? Важно понимать, что в этом случае shutdown
он запускается напрямую init
и запускается с привилегиями root. Поэтому каждый, кто подходит к консоли, может ее отключить. Если это нежелательно, control-alt-delete действительно будет работать shutdown -a
. (Смотрите документацию, которую @ some1 цитировал в своем ответе). Это говорит shutdown
о том, чтобы проверить, авторизован ли в данный момент авторизованный пользователь для его запуска. Но это важно только потому, shutdown
что в этом сценарии выполняется с правами root.
shutdown
, но эта программа не может вызвать отключение системы, если текущий пользователь не имеет прав root. Правильно?
shutdown
. Программа setuid запускается с разрешения пользователя, которому принадлежит исполняемый файл. Например, /etc/passwd
запускается с правами root, чтобы позволить вам изменить файл пароля. Смотрите man-страницу для chmod
.
/usr/bin/passwd
работает с правами root"! /etc/passwd
не исполняемый (это изменяемый файл паролей).
Сам бинарный файл shutdown
проверяет, равен ли ваш UID 0.
Смотрите вывод strace:
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");
. Что на самом деле исходный код показывает, что это так.
Похоже, что shutdown проверит список доступа, если вы отметите его с -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, по умолчанию разрешено только отключение root.
Если вы хотите, чтобы дополнительные пользователи могли выполнять команду, настройте этот файл и используйте флаг.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Биты разрешений не обязательно исключают управление доступом на основе пользователя или группы.
-a
из командной строки не будет иметь никакого значения: shutdown -a
все равно должен выполняться с правами root (что init
указывается в control-alt-del).