Пользователь 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