Un utilisateur root ne doit pas nécessairement s'appeler "root". whoami
renvoie le premier nom d'utilisateur avec l'ID utilisateur 0
. $USER
contient le nom de l'utilisateur connecté, qui peut avoir l'ID utilisateur 0
, mais un nom différent.
Le seul programme fiable permettant de vérifier si le compte est connecté en tant que root ou non:
id -u
J'utilise -u
pour l'ID utilisateur effectif , et non pas -r
pour l'ID utilisateur réel . Les autorisations sont déterminées par l'ID utilisateur effectif , et non par le . réel un.
Tests
/etc/passwd
contient les noms d'utilisateur suivants avec l'ID utilisateur 0
dans l'ordre indiqué:
rootx
root2
Connecté en tant que root2
, donne les résultats suivants:
-
whoami
: rootx
-
echo $USER
: root2
(cela renvoie une chaîne vide si le programme a été démarré dans un environnement vide, par exemple env -i sh -c 'echo $USER'
)
-
id -u
: 0
Comme vous pouvez le constater, les autres programmes ont échoué lors de cette vérification; seul id -u
a réussi.
Le script mis à jour ressemblerait à ceci:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi