Comment gnome redémarre sans privilèges root?

8

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
osdamv
la source
Peut - être systemctl. Qu'est-ce que ça ls -l /bin/systemctlvous dit?
G-Man dit `` Réintègre Monica '' le

Réponses:

12

Cela se fait via un gestionnaire d'autorisation appelé polkit:

polkit fournit une API d'autorisation destinée à être utilisée par des programmes privilégiés («MÉCANISMES») offrant des services à des programmes non privilégiés («SUJETS») souvent à travers une certaine forme de mécanisme de communication interprocessus.

Avec systemdet les polkitutilisateurs avec une session non distante peuvent émettre des commandes liées à l'alimentation. Vous pouvez répertorier toutes polkitles actions enregistrées et obtenir des détails sur chacune d'entre elles pkaction(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.rebootcas si vous exécutez:

pkaction --action-id org.freedesktop.login1.reboot --verbose

la sortie devrait être quelque chose comme:

org.freedesktop.login1.reboot:
  description:       Reboot the system
  message:           Authentication is required for rebooting the system.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   yes

Ici, active: yessignifie que l'utilisateur de la session active est autorisé à redémarrer le système (détails sur les autorisations implicites à la polkitpage). Vous pouvez vérifier si votre session est active avec:

loginctl show-session $ XDG_SESSION_ID --property = Actif
Active=yes
don_crissti
la source
1
cela signifie que tout programme que je lance peut redémarrer ma machine sans ma permission?
osdamv
1
@osdamv - comme n'importe quel programme que vous exécutez, rm -rfvos fichiers utilisateur pourraient -ils ...
don_crissti
3
@osdamv Notez que vous pouvez exécuter tous les programmes auxquels vous ne faites pas confiance en utilisant sudo --user=jimmyoù l'utilisateur jimmyn'a pas le droit d'exécuter cette commande polkit ...
Bakuriu
Comment puis-je réellement exécuter cette pkaction?
Geremia
@Geremia - Je ne comprends pas la question.
don_crissti