Je suis dans /sbin
et je vois qui shutdown
a des autorisations rwxr-xr-x
. Cela ne signifie-t-il pas que n'importe qui peut l'exécuter?
permissions
security
shutdown
Korgan Rivera
la source
la source
shutdown
commande.shutdown
.Réponses:
Tout le monde peut s'exécuter
shutdown
, mais le déclenchement d'un arrêt du système nécessite des privilèges root. Mais ceshutdown
n'est pas setuid, et donc seul root peut l' exécuter avec succès . Leshutdown
programme est assez gentil pour vérifier vos privilèges et vous faire savoir s’il ya un problème, mais même s’il essayait naïvement d’arrêter le système, rien ne se passerait.shutdown
n'est pas différent de/bin/rm
. Tout le monde peut l'exécuter, mais un utilisateur normal ne peut pas le supprimer/etc
ou le répertoire de base d'un autre utilisateur.Spécifiquement: Seul un processus fonctionnant avec les privilèges root (UID effectif 0) peut ordonner au système init d'arrêter les services système, de mettre fin à tous les processus utilisateur et d'émettre l' appel système qui arrête réellement la machine. (Si
shutdown
était setuid, il fonctionnerait en tant que root, peu importe qui l'invoque; mais ce n'est pas le cas.)Qu'en est-il des appels
shutdown
depuis une interface graphique, par exemple avec control-alt-del? Il est important de réaliser que dans ce cas, ilshutdown
est lancé directement parinit
et il s'exécute avec les privilèges root. Ainsi, toutes les personnes qui se dirigent vers la console peuvent potentiellement la fermer. Si ce n'est pas souhaitable, control-alt-delete sera exécutéshutdown -a
. (Voir la documentation que @ some1 a citée dans sa réponse). Cela indiqueshutdown
de vérifier si l'utilisateur actuellement connecté est autorisé à l'exécuter. Mais ceci n’est pertinent que parce qu’ilshutdown
fonctionne en tant que root dans ce scénario.la source
shutdown
, mais ce programme ne peut en réalité déclencher un arrêt du système que si l'utilisateur actuel dispose des privilèges root. Droite?shutdown
. Un programme setuid est exécuté avec les permissions de l'utilisateur à qui appartient l'exécutable. Par exemple,/etc/passwd
fonctionne avec les autorisations root pour vous permettre de modifier le fichier de mot de passe. Voir la page de manuel pourchmod
./usr/bin/passwd
fonctionne avec les autorisations root"!/etc/passwd
n'est pas exécutable (c'est le "fichier de mot de passe" en cours de modification).Le binaire
shutdown
lui-même vérifie si votre UID est 0.Voir la sortie de strace de:
la source
shutdown
votre UID est bienif(getuid() != 0) printf("Need to be root");
. Ce qui en fait le code source le montre.Oui ! Tout le monde peut exécuter cette commande. Comme vous l'avez dit, vous pouvez l'exécuter, mais vous vous trouvez face à un message "Besoin d'être root", pas un message
permission denied
. Lashutdown
commande vérifieUID
si vous êtes root ou non.la source
Il semble que shutdown vérifiera une liste d'accès si vous la marquez avec -a:
Etant donné que vous l'appelez actuellement sans l'indicateur -a, il ne permet par défaut que les arrêts de la racine.
Si vous souhaitez que des utilisateurs supplémentaires puissent exécuter la commande, configurez ce fichier et utilisez l'indicateur.
Les bits d'autorisation n'excluent pas nécessairement le contrôle d'accès basé sur un utilisateur ou un groupe.
la source
-a
partir de la ligne de commande ne fera aucune différence: ilshutdown -a
doit toujours être exécuté avec les permissions root (init
fournies par control-alt-del).