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?
shutdown
commande.
shutdown
.
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?
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 ce shutdown
n'est pas setuid, et donc seul root peut l' exécuter avec succès . Le shutdown
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.
GLENDOWER: Je peux appeler les esprits de la vaste profondeur.
HOTSPUR: Pourquoi, moi aussi, tout homme peut le faire. Mais viendront-ils quand vous les appellerez?
(de Henri IV)
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, il shutdown
est lancé directement par init
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 indique shutdown
de vérifier si l'utilisateur actuellement connecté est autorisé à l'exécuter. Mais ceci n’est pertinent que parce qu’il shutdown
fonctionne en tant que root dans ce scénario.
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 pour chmod
.
/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:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
votre UID est bien
if(getuid() != 0) printf("Need to be root");
. Ce qui en fait le code source le montre.
Il semble que shutdown vérifiera une liste d'accès si vous la marquez avec -a:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
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.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Les bits d'autorisation n'excluent pas nécessairement le contrôle d'accès basé sur un utilisateur ou un groupe.
-a
partir de la ligne de commande ne fera aucune différence: il shutdown -a
doit toujours être exécuté avec les permissions root ( init
fournies par control-alt-del).