Seorang pengguna root tidak harus dinamai "root". whoamimengembalikan nama pengguna pertama dengan ID pengguna 0. $USERberisi 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 -uuntuk ID pengguna yang efektif , bukan -runtuk ID pengguna yang sebenarnya . Izin ditentukan oleh ID pengguna yang efektif , bukan yang asli .
Tes
/etc/passwdberisi nama pengguna berikut dengan ID pengguna 0dalam 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 -uberlalu.
Skrip yang diperbarui akan terlihat seperti ini:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi