Je lis le livre Développement du noyau Linux , au chapitre 5 "Implémentation des appels système", page 77 dit
Par exemple, capable (CAP_SYS_NICE) vérifie si l'appelant a la capacité de modifier les bonnes valeurs des autres processus. Par défaut, le superutilisateur possède toutes les capacités et non root n'en possède aucune. Par exemple, voici l'appel système reboot (). Notez comment sa première étape consiste à s'assurer que le processus appelant a le CAP_SYS_REBOOT. Si cette instruction conditionnelle était supprimée, tout processus pourrait redémarrer le système.
Cependant, dans mon Debian Sid, je peux redémarrer ma machine en utilisant gnome ou en exécutant / sbin / reboot sans sudo ou su. Comment est-ce possible?
Peut-être avec systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDIT: Mes groupes d'utilisateurs
[damian@xvz:~]$ groups
damian sudo wireshark bumblebee
EDIT 2: autorisations systemctl
[damian@xvz:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
systemctl
. Qu'est-ce que çals -l /bin/systemctl
vous dit?Réponses:
Cela se fait via un gestionnaire d'autorisation appelé
polkit
:Avec
systemd
et lespolkit
utilisateurs avec une session non distante peuvent émettre des commandes liées à l'alimentation. Vous pouvez répertorier toutespolkit
les actions enregistrées et obtenir des détails sur chacune d'entre ellespkaction
(invoquée sans argument, elle répertoriera tous les ID d'action).Dans ce cas particulier, l'ID d'action est le
org.freedesktop.login1.reboot
cas si vous exécutez:la sortie devrait être quelque chose comme:
Ici,
active: yes
signifie que l'utilisateur de la session active est autorisé à redémarrer le système (détails sur les autorisations implicites à lapolkit
page). Vous pouvez vérifier si votre session est active avec:la source
rm -rf
vos fichiers utilisateur pourraient -ils ...sudo --user=jimmy
où l'utilisateurjimmy
n'a pas le droit d'exécuter cette commande polkit ...