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