Estoy dentro /sbin
y veo que shutdown
tiene permisos rwxr-xr-x
. ¿No significa esto que cualquiera puede ejecutarlo?
permissions
security
shutdown
Korgan Rivera
fuente
fuente
shutdown
comando.shutdown
.Respuestas:
Cualquiera puede ejecutar
shutdown
, pero activar un apagado del sistema requiere privilegios de root. Peroshutdown
no es setuid, por lo que solo root puede ejecutarlo con éxito . losshutdown
programa es lo suficientemente bueno como para verificar sus privilegios y hacerle saber si hay un problema, pero incluso si intentara ingenuamente apagar el sistema, no pasaría nada.shutdown
no es diferente de/bin/rm
. Todos pueden ejecutarlo, pero un usuario normal no puede eliminarlo/etc
, o el directorio de inicio de otro usuario.Específicamente: solo un proceso que se ejecute con privilegios de root (UID efectivo 0) puede ordenar al sistema init que detenga los servicios del sistema, finalice todos los procesos del usuario y emita la llamada al sistema que realmente detiene la máquina. (Si
shutdown
fuera setuid, se ejecutaría como root sin importar quién lo invoque; pero no lo es).¿Qué pasa con las llamadas
shutdown
desde una GUI, por ejemplo, con control-alt-del? Es importante darse cuenta de que en ese caso,shutdown
se inicia directamenteinit
y se ejecuta con privilegios de root. Por lo tanto, todos los que se acercan a la consola podrían apagarla. Si esto no es deseable, realmente se ejecutará control-alt-deleteshutdown -a
. (Consulte la documentación que @ some1 citó en su respuesta). Eso le indicashutdown
que compruebe si el usuario que está conectado actualmente está autorizado para ejecutarlo. Pero esto solo es relevante porque seshutdown
está ejecutando como root en este escenario.fuente
shutdown
, pero ese programa no puede activar un apagado del sistema a menos que el usuario actual tenga privilegios de root. ¿Correcto?shutdown
. Se ejecuta un programa setuid con los permisos del usuario propietario del ejecutable. Por ejemplo, se/etc/passwd
ejecuta con permisos de root para permitirle modificar el archivo de contraseña. Vea la página de manual dechmod
./usr/bin/passwd
ejecuta con permisos de root"!/etc/passwd
no es ejecutable (es el "archivo de contraseña" que se está modificando).El binario
shutdown
mismo verifica si su UID es 0.Vea la salida de strace de:
fuente
shutdown
comprueba que su UID es 0.if(getuid() != 0) printf("Need to be root");
. Que, de hecho, el código fuente muestra que es.Si! Todos pueden ejecutar ese comando. Como dijiste, puedes ejecutarlo pero te enfrentas a un mensaje de "Necesito ser root", no a
permission denied
. Elshutdown
comando comprueba tuUID
para ver si eres root, o no.fuente
Parece que el apagado verificará una lista de acceso si la marca con -a:
Como actualmente lo está llamando sin el indicador -a, por defecto está permitido solo el apagado de la raíz.
Si desea que usuarios adicionales puedan ejecutar el comando, configure ese archivo y use el indicador.
Los bits de permiso no excluyen necesariamente el control de acceso basado en un usuario o grupo.
fuente
-a
desde la línea de comandos no hará ninguna diferencia:shutdown -a
aún debe ser ejecutado con permisos de root (queinit
los suministros en el control-alt-del).