Người dùng root không phải đặt tên là "root". whoamitrả về tên người dùng đầu tiên với ID người dùng 0. $USERchứa tên của người dùng đã đăng nhập, có thể có ID người dùng 0, nhưng có một tên khác.
Chương trình đáng tin cậy duy nhất để kiểm tra xem tài khoản đã đăng nhập bằng root hay chưa:
id -u
Tôi sử dụng -ucho ID người dùng hiệu quả , không phải -rcho ID người dùng thực . Quyền được xác định bởi ID người dùng hiệu quả , không phải ID thực .
Xét nghiệm
/etc/passwdchứa các tên người dùng sau với ID người dùng 0theo thứ tự đã cho:
rootx
root2
Đăng nhập như là root2, cho kết quả tiếp theo:
whoami: rootx
echo $USER: root2(điều này trả về một chuỗi rỗng nếu chương trình được bắt đầu trong một môi trường trống, vd env -i sh -c 'echo $USER')
id -u: 0
Như bạn có thể thấy, các chương trình khác đã thất bại trong kiểm tra này, chỉ id -uđược thông qua.
Kịch bản cập nhật sẽ trông như thế này:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi