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."));
[...]
o que mudará o comportamento do programa se você é root ou não.
Na maioria dos outros casos, é implícito; delegado ao kernel. Por exemplo, se o programa chamar a chamada do sistema que permite reiniciar o sistema, ele funcionará apenas se você for root. Se você não for root, terá um erro de "permissão negada" que o aplicativo (se bem escrito) simplesmente relata a você. Ou você está tentando excluir um arquivo; se você tiver a permissão correta no arquivo para fazê-lo, ele será bem-sucedido; caso contrário, depende se você é root ou não --- quando rm
chamadas, unlink()
o kernel verifica as permissões.
Portanto, não, em princípio você não pode dizer apenas olhando para a permissão do executável se o programa exigir privilégios de root ou não. Muitos programas os exigirão apenas para algumas operações, por isso será realmente difícil fazer algo assim. O caso de hwclock
um (qualquer um pode ler o relógio, mas somente o root pode configurá-lo), mas há centenas deles ( kill
, rm
, cat
...)
Depois, há o mundo relacionado e interessante dos programas setuid ...
/bin
ou/sbin
diretórios. O problema é que alguns desses programas estão executando diferentes, dependendo de qual usuário os executa.