Como o gnome é reiniciado sem privilégios de root?

8

Estou lendo o livro Linux kernel development , no capítulo 5 "System Call Implementation", página 77, diz

Por exemplo, capaz (CAP_SYS_NICE) verifica se o chamador tem a capacidade de modificar bons valores de outros processos. Por padrão, o superusuário possui todos os recursos e o não raiz não possui. Por exemplo, aqui está a chamada do sistema reboot (). Observe como sua primeira etapa é garantir que o processo de chamada tenha o CAP_SYS_REBOOT. Se essa instrução condicional for removida, qualquer processo poderá reiniciar o sistema.

No entanto, no meu Debian Sid, posso reiniciar minha máquina usando o gnome ou executando / sbin / reboot sem o sudo ou su. Como isso é possível?

Talvez com systemctl?

ls -l /sbin/reboot 
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl

EDIT: Meus grupos de usuários

[damian@xvz:~]$ groups 
damian sudo wireshark bumblebee

EDIT 2: permissões systemctl

[damian@xvz:~]$ ls -l /bin/systemctl 
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
osdamv
fonte
Talvez seja systemctl . O que ls -l /bin/systemctlte diz?
G-Man diz 'Reinstate Monica'

Respostas:

12

Isso é feito por meio de um gerenciador de autorização chamado polkit:

O polkit fornece uma API de autorização destinada a ser usada por programas privilegiados ("MECANISMOS"), oferecendo serviço a programas não privilegiados ("ASSUNTOS") frequentemente através de alguma forma de mecanismo de comunicação entre processos.

Com systemde polkitusuários com sessão não remota podem emitir comandos relacionados à energia. Você pode listar todas polkitas ações registradas e obter detalhes sobre qualquer uma delas pkaction(invocada sem argumentos, listará todos os IDs de ações).
Nesse caso específico, o ID da ação é org.freedesktop.login1.rebootassim, se você executar:

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

a saída deve ser algo como:

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

Aqui, active: yessignifica que o usuário na sessão ativa está autorizado a reiniciar o sistema (detalhes sobre autorizações implícitas na polkitpágina). Você pode verificar se sua sessão está ativa com:

loginctl show-session $ XDG_SESSION_ID --property = Ativo
Active=yes
don_crissti
fonte
1
isso significa que qualquer programa executado pode reiniciar minha máquina sem minha permissão?
Osdamv 17/07/2015
1
@osdamv - assim como qualquer programa que você executar poderia rm -rfseus arquivos de usuário ...
don_crissti
3
@osdamv Note que você pode executar todos os programas que você não confia usando sudo --user=jimmyonde o usuário jimmyse não tem o direito de executar esse comando polkit ...
Bakuriu
Como eu realmente executo esse pacote?
Geremia
@ Geremia - Eu não entendo a pergunta.
51319 don_crissti