Estoy dentro /sbiny veo que shutdowntiene permisos rwxr-xr-x. ¿No significa esto que cualquiera puede ejecutarlo?
permissions
security
shutdown
Korgan Rivera
fuente
fuente

shutdowncomando.shutdown.Respuestas:
Cualquiera puede ejecutar
shutdown, pero activar un apagado del sistema requiere privilegios de root. Peroshutdownno es setuid, por lo que solo root puede ejecutarlo con éxito . losshutdownprograma 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.shutdownno 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
shutdownfuera setuid, se ejecutaría como root sin importar quién lo invoque; pero no lo es).¿Qué pasa con las llamadas
shutdowndesde una GUI, por ejemplo, con control-alt-del? Es importante darse cuenta de que en ese caso,shutdownse inicia directamenteinity 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 indicashutdownque compruebe si el usuario que está conectado actualmente está autorizado para ejecutarlo. Pero esto solo es relevante porque seshutdownestá 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/passwdejecuta con permisos de root para permitirle modificar el archivo de contraseña. Vea la página de manual dechmod./usr/bin/passwdejecuta con permisos de root"!/etc/passwdno es ejecutable (es el "archivo de contraseña" que se está modificando).El binario
shutdownmismo verifica si su UID es 0.Vea la salida de strace de:
fuente
shutdowncomprueba 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. Elshutdowncomando comprueba tuUIDpara 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
-adesde la línea de comandos no hará ninguna diferencia:shutdown -aaún debe ser ejecutado con permisos de root (queinitlos suministros en el control-alt-del).