Comment savoir si l'exécution d'un programme nécessite root?

10

Je comprends que c'est un peu fondamental et peut-être une question stupide, mais je n'ai pas pu trouver de réponse.

Je comprends que chaque fichier a le "Executable"bit.

J'ai supposé que les programmes qui nécessitent root, qui appartiennent à l' rootutilisateur et au rootgroupe n'auront pas le Executablebit Otheret cela empêcherait les utilisateurs non root de les exécuter. Mais dans les répertoires /binet /sbinje vois que tous les fichiers ont des autorisations comme-rwxr-xr-x

Alors, qu'est-ce qui détermine vraiment si un utilisateur doit avoir la permission root pour exécuter quelque chose?

doyen
la source
1
Par défaut, vous ou n'importe quel utilisateur pouvez exécuter n'importe quel programme à partir de /binou /sbinrépertoires. Le problème est que certains de ces programmes fonctionnent différemment selon l'utilisateur qui les exécute.
Radu Rădeanu

Réponses:

13

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 rmappels 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 hwclockun (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 ...

Rmano
la source
Donc, fondamentalement, le noyau est "en charge"? Si le programme effectue un appel système, le noyau détermine si l'utilisateur exécutant le programme doit être root et l'applique?
Dean
2
Fondamentalement, oui. Le programme peut effectuer des tests supplémentaires, mais la vérification des autorisations se fait au niveau du noyau. Les programmes setuid-root sont l'exception; ils s'exécutent toujours en tant que root, ils doivent donc vérifier eux-mêmes l'autorisation (et sont une belle police de failles de sécurité ...)
Rmano