Sono dentro /sbin
e vedo che shutdown
ha i permessi rwxr-xr-x
. Questo non significa che chiunque può eseguirlo?
shutdown
comando.
shutdown
.
Sono dentro /sbin
e vedo che shutdown
ha i permessi rwxr-xr-x
. Questo non significa che chiunque può eseguirlo?
shutdown
comando.
shutdown
.
Risposte:
Chiunque può eseguire shutdown
, ma l'attivazione di un arresto del sistema richiede i privilegi di root. Ma shutdown
non è setuid, quindi solo root può eseguirlo correttamente . Il shutdown
programma è abbastanza carino da controllare i tuoi privilegi e farti sapere se c'è un problema, ma anche se provasse ingenuamente un arresto del sistema, non accadrebbe nulla.
GLENDOWER: Posso chiamare spiriti dal vasto profondo.
HOTSPUR: Perché, anche io, così posso fare qualsiasi uomo; Ma verranno quando li chiamerai?
(da Enrico IV)
shutdown
non è diverso da /bin/rm
. Tutti possono eseguirlo, ma un utente normale non può rimuovere /etc
o la home directory di un altro utente.
In particolare: solo un processo in esecuzione con privilegi di root (UID 0 effettivo) può indirizzare il sistema init per arrestare i servizi di sistema, terminare tutti i processi dell'utente ed emettere la chiamata di sistema che arresta effettivamente la macchina. (Se shutdown
fosse setuid, verrebbe eseguito come root indipendentemente da chi lo invoca; ma non lo è.)
Che ne dici di chiamare shutdown
da una GUI, ad es. Con control-alt-del? È importante rendersi conto che in quel caso, shutdown
è avviato direttamente da init
e funziona con i privilegi di root. Quindi chiunque si avvicini alla console potrebbe potenzialmente spegnerlo. Se ciò non è desiderabile, control-alt-delete verrà effettivamente eseguito shutdown -a
. (Vedi la documentazione citata da @ some1 nella loro risposta). Ciò indica shutdown
di verificare se l'utente attualmente connesso è autorizzato a eseguirlo. Ma questo è rilevante solo perché shutdown
è in esecuzione come root in questo scenario.
shutdown
, ma quel programma non può effettivamente attivare un arresto del sistema a meno che l'utente corrente disponga dei privilegi di root. Destra?
shutdown
. Un programma setuid viene eseguito con le autorizzazioni dell'utente proprietario dell'eseguibile. Ad esempio, /etc/passwd
viene eseguito con i permessi di root per consentire di modificare il file della password. Vedi la manpage per chmod
.
/usr/bin/passwd
eseguito con i permessi di root"! /etc/passwd
non è eseguibile (è il "file password" che viene modificato).
Il binario shutdown
stesso controlla se il tuo UID è 0.
Vedi l'output di strace di:
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
che il tuo UID è 0.
if(getuid() != 0) printf("Need to be root");
. Che in realtà il codice sorgente mostra che è.
Sembra che l'arresto controllerà un elenco di accesso se lo contrassegni 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.
Dato che al momento lo stai chiamando senza il flag -a, per impostazione predefinita consente solo gli arresti di root.
Se vuoi che altri utenti siano in grado di eseguire il comando, configura quel file e usa il flag.
Why can't I execute shutdown when the permission is rwxr-xr-x?
I bit di autorizzazione non escludono necessariamente il controllo dell'accesso basato su un utente o un gruppo.
-a
dalla riga di comando non farà alcuna differenza: shutdown -a
deve comunque essere eseguito con i permessi di root (che init
fornisce su control-alt-del).