Em algum momento, está no código. Por exemplo, no meio de hwclock.c
, você encontrará:
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."));
[...]
que mudará o comportamento do programa se você for root ou não.
Na maioria dos outros casos, é implícito; delegada ao kernel. Por exemplo, se o programa chamar a chamada de sistema que permite reinicializar o sistema, ele funcionará somente se você for root. Se você não for root, você terá um erro de "permissão negada" de que o aplicativo (se bem escrito) simplesmente se reporta a você. Ou você está tentando excluir um arquivo; se você tiver a permissão correta no arquivo para fazer isso, ele será bem-sucedido; se não, depende se você é root ou não --- quando rm
chama unlink()
o kernel irá verificar as permissões.
Então, não, em princípio, você não pode dizer apenas olhando para a permissão do executável se o programa requer privilégios de root ou não. Muitos programas exigirão apenas algumas operações, por isso será muito difícil fazer algo assim. O caso de hwclock
é um (qualquer um pode ler o relógio, mas somente o root pode defini-lo), mas existem centenas deles ( kill
, rm
, cat
...)
Depois, há o mundo relacionado e interessante dos programas setuid ...