Un utente root non deve essere chiamato "root". whoami
restituisce il primo nome utente con ID utente 0
. $USER
contiene il nome dell'utente che ha effettuato l'accesso, che può avere l'ID utente 0
, ma ha un nome diverso.
L'unico programma affidabile per verificare se l'account è stato eseguito come root, o meno:
id -u
Uso -u
per l'ID utente effettivo , non -r
per l'ID utente reale . Le autorizzazioni sono determinate dall'ID utente efficace , non da vero uno.
test
/etc/passwd
contiene i seguenti nomi utente con ID utente 0
nell'ordine specificato:
rootx
root2
Collegato come root2
, dà i risultati seguenti:
-
whoami
: rootx
-
echo $USER
: root2
(restituisce una stringa vuota se il programma è stato avviato in un ambiente vuoto, ad esempio env -i sh -c 'echo $USER'
)
-
id -u
: 0
Come puoi vedere, gli altri programmi non hanno superato questo controllo, solo id -u
è stato superato.
Lo script aggiornato sarebbe simile a questo:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi