Seorang pengguna root tidak harus dinamai "root". whoami
mengembalikan nama pengguna pertama dengan ID pengguna 0
. $USER
berisi nama pengguna yang masuk, yang dapat memiliki ID pengguna 0
, tetapi memiliki nama yang berbeda.
Satu-satunya program yang dapat diandalkan untuk memeriksa apakah akun tersebut login sebagai root, atau tidak:
id -u
Saya menggunakan -u
untuk ID pengguna yang efektif , bukan -r
untuk ID pengguna yang sebenarnya . Izin ditentukan oleh ID pengguna yang efektif , bukan yang asli .
Tes
/etc/passwd
berisi nama pengguna berikut dengan ID pengguna 0
dalam urutan yang diberikan:
rootx
root2
Masuk sebagai root2
, memberikan hasil selanjutnya:
whoami
: rootx
echo $USER
: root2
(ini mengembalikan string kosong jika program dimulai di lingkungan kosong, mis. env -i sh -c 'echo $USER'
)
id -u
: 0
Seperti yang Anda lihat, program lain gagal dalam pemeriksaan ini, hanya id -u
berlalu.
Skrip yang diperbarui akan terlihat seperti ini:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi