Пользователь root не должен называться «root». whoami
возвращает первое имя пользователя с идентификатором пользователя 0
. $USER
содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0
, но имеет другое имя.
Единственная надежная программа для проверки, зарегистрирована ли учетная запись как root, или нет:
id -u
Я использую -u
для эффективного идентификатора пользователя, а не -r
для идентификатора пользователя real . Разрешения определены с помощью эффективного идентификатора пользователя, а не real .
Испытания
/etc/passwd
содержит следующие имена пользователей с идентификатором пользователя 0
в указанном порядке:
rootx
root2
Записанный как root2
, дает следующие результаты:
-
whoami
: rootx
-
echo $USER
: root2
(это возвращает пустую строку, если программа была запущена в пустой среде, например, env -i sh -c 'echo $USER'
)
-
id -u
: 0
Как вы можете видеть, другие программы не прошли проверку, только id -u
прошло.
Обновленный скрипт будет выглядеть так:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi