Пользователь root не обязательно должен называться «root». whoami
возвращает первое имя пользователя с идентификатором пользователя 0
. $USER
содержит имя вошедшего в систему пользователя, который может иметь идентификатор пользователя 0
, но иметь другое имя.
Единственная надежная программа, которая проверяет, вошел ли аккаунт как root или нет:
id -u
Я использую -u
для эффективного идентификатора пользователя, а не -r
для реального идентификатора пользователя. Права доступа определяются с помощью эффективного идентификатора пользователя, а не реальные один.
тесты
/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