Estoy leyendo el libro Desarrollo del kernel de Linux, en el capítulo 5 "Implementación de llamadas al sistema", la página 77 dice
Por ejemplo, capaz(CAP_SYS_NICE) comprueba si la persona que llama tiene la capacidad
de modificar los valores agradables de otros procesos. De forma predeterminada, el superusuario
posee todas las capacidades y el usuario no root no posee ninguna. Por ejemplo, aquí está la llamada al sistema reboot(). Tenga en cuenta que su primer paso es
asegurarse de que el proceso de llamada tenga CAP_SYS_REBOOT . Si esa declaración condicional
fuera eliminada, cualquier proceso podría reiniciar el sistema
.
Sin embargo, en mi Debian Sid puedo reiniciar mi máquina usando gnome o ejecutando /sbin/reboot sin sudo o su.
¿Cómo es esto posible?
¿Quizás con systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDITAR:Mis grupos de usuarios
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
EDIT 2:permisos systemctl
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
Respuesta aceptada:
Esto se hace a través de un administrador de autorizaciones llamado polkit
:
polkit proporciona una API de autorización destinada a ser utilizada por programas
privilegiados ("MECANISMOS") que ofrece servicio a programas no privilegiados
("SUJETOS") a menudo a través de alguna forma de mecanismo de comunicación entre procesos
.
Con systemd
y polkit
los usuarios con sesión no remota pueden emitir comandos relacionados con la energía. Puede enumerar todos los polkit
acciones registradas y obtén detalles sobre cualquiera de ellas con pkaction
(si se invoca sin argumentos, enumerará todos los ID de acción).
En este caso particular, el ID de acción es org.freedesktop.login1.reboot
así que si ejecutas:
pkaction --action-id org.freedesktop.login1.reboot --verbose
la salida debería 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
Aquí, active: yes
significa que el usuario en la sesión activa está autorizado para
reiniciar el sistema (detalles sobre autorizaciones implícitas en polkit
página). Puedes comprobar si tu sesión está activa con:
loginctl show-session $XDG_SESSION_ID --property=Active
Active=yes