Користувачу 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