Estoy dentro /sbin
y veo que shutdown
tiene permisos rwxr-xr-x
. ¿No significa esto que cualquiera puede ejecutarlo?
shutdown
comando.
shutdown
.
Estoy dentro /sbin
y veo que shutdown
tiene permisos rwxr-xr-x
. ¿No significa esto que cualquiera puede ejecutarlo?
shutdown
comando.
shutdown
.
Respuestas:
Cualquiera puede ejecutar shutdown
, pero activar un apagado del sistema requiere privilegios de root. Pero shutdown
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.
GLENDOWER: Puedo llamar a los espíritus desde las profundidades.
HOTSPUR: Por qué, yo también, o cualquier hombre; ¿Pero vendrán cuando los llames?
(de Henry IV)
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 directamente init
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-delete shutdown -a
. (Consulte la documentación que @ some1 citó en su respuesta). Eso le indica shutdown
que compruebe si el usuario que está conectado actualmente está autorizado para ejecutarlo. Pero esto solo es relevante porque se shutdown
está ejecutando como root en este escenario.
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 de chmod
.
/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:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
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.
Parece que el apagado verificará una lista de acceso si la marca con -a:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
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.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Los bits de permiso no excluyen necesariamente el control de acceso basado en un usuario o grupo.
-a
desde la línea de comandos no hará ninguna diferencia: shutdown -a
aún debe ser ejecutado con permisos de root (que init
los suministros en el control-alt-del).