Как узнать, требует ли выполнение программы рута?
Я понимаю, что это немного фундаментальный и, возможно, глупый вопрос, но я не смог найти ответ.
Я понимаю, что каждый файл имеет "Executable"
немного.
Я предполагал, что программы, которые требуют root
, которые принадлежат root
пользователь и root
группа не будет иметь Executable
немного для Other
и это помешало бы пользователям без полномочий root выполнять их. Но в /bin
а также /sbin
каталоги я вижу, что все файлы имеют разрешения, такие как -rwxr-xr-x
Так что же на самом деле определяет, нужно ли пользователю иметь права root для выполнения чего-либо?
1 ответ
Когда-нибудь это в коде. Например, на полпути hwclock.c
, ты найдешь:
if (getuid() == 0)
permitted = TRUE;
else {
/* program is designed to run setuid (in some situations) */
if (set || systohc || adjust) {
warnx(_("Sorry, only the superuser can change "
"the Hardware Clock."));
[...]
который изменит поведение программы, если вы root или нет.
В большинстве других случаев это неявно; делегирован в ядро. Например, если программа вызывает системный вызов, позволяющий перезагрузить систему, она будет работать только в том случае, если вы являетесь пользователем root. Если вы не являетесь пользователем root, у вас будет ошибка "Отказано в доступе", о которой приложение (если оно хорошо написано) просто сообщит вам. Или вы пытаетесь удалить файл; если у вас есть права доступа к файлу, это будет успешно выполнено; если нет, это зависит от того, являетесь ли вы пользователем root или нет --- когда rm
звонки unlink()
ядро проверит разрешения.
Так что нет, в принципе вы не можете сказать, просто глядя на разрешение исполняемого файла, если программе требуются права суперпользователя или нет. Многие программы потребуют их только для какой-то операции, поэтому будет очень сложно сделать что-то подобное. Случай hwclock
один (любой может читать часы, но только root может их установить), но их сотни (kill
, rm
, cat
...)
Тогда есть связанный и интересный мир программ setuid...