Я в /sbin
и вижу, что shutdown
есть разрешения rwxr-xr-x
. Разве это не значит, что кто-то может выполнить это?
permissions
security
shutdown
Корган Ривера
источник
источник
shutdown
команде.shutdown
.Ответы:
Любой может выполнить
shutdown
, но для запуска выключения системы требуются права суперпользователя. Ноshutdown
это не setuid, и поэтому только root может успешно выполнить его.shutdown
Программа достаточно хорош , чтобы проверить свои привилегии , и пусть вы знаете , если есть проблема, но даже если он наивно попытался завершение работы системы, ничего не произойдет.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:
источник
shutdown
что ваш UID равен 0.if(getuid() != 0) printf("Need to be root");
. Что на самом деле исходный код показывает, что это так.Да ! Каждый может выполнить эту команду. Как вы сказали, вы можете запустить его, но вы столкнулись с сообщением «Нужен root», а не с
permission denied
. Командаshutdown
проверяет ваш,UID
чтобы узнать, являетесь ли вы пользователем root или нет.источник
Похоже, что shutdown проверит список доступа, если вы отметите его с -a:
Поскольку вы в настоящее время вызываете его без флага -a, по умолчанию разрешено только отключение root.
Если вы хотите, чтобы дополнительные пользователи могли выполнять команду, настройте этот файл и используйте флаг.
Биты разрешений не обязательно исключают управление доступом на основе пользователя или группы.
источник
-a
из командной строки не будет иметь никакого значения:shutdown -a
все равно должен выполняться с правами root (чтоinit
указывается в control-alt-del).