Người dùng root không phải đặt tên là "root". whoami
trả về tên người dùng đầu tiên với ID người dùng 0
. $USER
chứ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 -u
cho ID người dùng hiệu quả , không phải -r
cho 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/passwd
chứa các tên người dùng sau với ID người dùng 0
theo 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