Parfois, c'est dans le code. Par exemple, à mi-chemin de hwclock.c
, vous trouverez:
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."));
[...]
ce qui changera le comportement du programme si vous êtes root ou non.
Dans la plupart des autres cas, c'est implicite; déléguée au noyau. Par exemple, si le programme appelle l' appel système qui vous permet de redémarrer le système, il ne fonctionnera que si vous êtes root. Si vous n'êtes pas root, vous aurez une erreur "permission refusée" que l'application (si bien écrite) vous rapporte simplement. Ou vous essayez de supprimer un fichier; si vous avez la bonne autorisation sur le fichier pour le faire, il réussira; sinon, cela dépend si vous êtes root ou non --- quand les rm
appels unlink()
le noyau vérifiera les permissions.
Donc non, en principe, vous ne pouvez pas dire simplement en regardant l'autorisation de l'exécutable si le programme nécessite des privilèges root ou non. Beaucoup de programmes ne les nécessiteront que pour certaines opérations, il sera donc très difficile de faire quelque chose comme ça. Le cas de hwclock
un (tout le monde peut lire l'horloge , mais seul root peut le définir), mais il y a des centaines d'entre eux ( kill
, rm
, cat
...)
Ensuite, il y a le monde connexe et intéressant des programmes setuid ...
/bin
ou/sbin
répertoires. Le problème est que certains de ces programmes fonctionnent différemment selon l'utilisateur qui les exécute.