Как узнать, требует ли выполнение программы рута?

10

Я понимаю, что это немного фундаментальный и, возможно, глупый вопрос, но я не смог найти ответ.

Я понимаю, что каждый файл имеет свой "Executable"бит.

Я предположил, что программы, которые требуют root, которые принадлежат rootпользователю и rootгруппе, не будут иметь Executableбит для, Otherи это предотвратит выполнение не-root пользователями. Но в /binи /sbinкаталогах я вижу , что все файлы имеют право , как-rwxr-xr-x

Так что же в действительности определяет, нужно ли пользователю иметь права root для выполнения чего-либо?

декан
источник
1
По умолчанию вы или любой пользователь можете выполнить любую программу /binили /sbinкаталоги. Проблема в том, что некоторые из этих программ работают по-разному в зависимости от того, какой пользователь их запускает.
Раду Радеану

Ответы:

13

Иногда это в коде. Например, на полпути 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()ядро проверит разрешения.

Так что нет, в принципе вы не можете сказать, просто глядя на разрешение исполняемого файла, если программе требуются права root или нет. Многие программы потребуют их только для какой-то операции, поэтому будет очень сложно сделать что-то подобное. Случай hwclockодин (любой может прочитать часы , но только корень может установить его), но есть сотни из них ( kill, rm, cat...)

Тогда есть связанный и интересный мир программ setuid ...

Rmano
источник
Так в основном ядро ​​"отвечает за это"? Если программа выполняет системный вызов, ядро ​​определяет, должен ли пользователь, выполняющий программу, быть пользователем root, и применяет его?
Дин
2
В основном да. Программа может выполнять дополнительные тесты, но проверка разрешений находится на уровне ядра. Программы setuid-root являются исключением; они всегда запускаются с правами root, поэтому им нужно самим проверять наличие разрешений (и это хороший шрифт недостатков безопасности ...)
Rmano