Terkadang, ada dalam kode. Misalnya, di tengah jalan hwclock.c
, Anda akan menemukan:
if (getuid() == 0)
permitted = TRUE;
else {
/* program is designed to run setuid (in some situations) */
if (set || systohc || adjust) {
warnx(_("Sorry, only the superuser can change "
"the Hardware Clock."));
[...]
yang akan mengubah perilaku program jika Anda root atau tidak.
Dalam kebanyakan kasus lain, ini tersirat; didelegasikan ke kernel. Sebagai contoh, jika program memanggil panggilan sistem yang memungkinkan Anda me-reboot sistem, itu hanya akan berfungsi jika Anda root. Jika Anda tidak root, Anda akan memiliki kesalahan "izin ditolak" bahwa aplikasi (jika ditulis dengan baik) hanya melaporkan kepada Anda. Atau Anda mencoba menghapus file; jika Anda memiliki izin yang tepat pada file untuk melakukannya, itu akan berhasil; jika tidak, itu tergantung apakah Anda root atau tidak --- ketika rm
panggilan unlink()
kernel akan memeriksa izin.
Jadi tidak, pada prinsipnya Anda tidak bisa mengatakan hanya dengan melihat izin dari executable jika program membutuhkan hak akses root atau tidak. Banyak program akan membutuhkannya hanya untuk beberapa operasi, sehingga akan sangat sulit untuk melakukan sesuatu seperti itu. Kasus hwclock
adalah salah satu (orang dapat membaca jam tetapi hanya root dapat mengaturnya), tapi ada ratusan dari mereka ( kill
, rm
, cat
...)
Lalu ada dunia yang terkait dan menarik dari program setuid ...
/bin
atau/sbin
direktori. Masalahnya adalah beberapa program berjalan berbeda tergantung pada pengguna mana yang menjalankannya.