Bagaimana Anda bisa tahu jika menjalankan program membutuhkan root?

10

Saya mengerti bahwa ini agak mendasar dan mungkin pertanyaan konyol, tetapi saya belum dapat menemukan jawabannya.

Saya mengerti bahwa setiap file memiliki "Executable"bit.

Saya berasumsi bahwa program yang memerlukan root, yang dimiliki oleh rootpengguna dan rootgrup tidak akan memiliki Executablebit untuk Otherdan itu akan mencegah pengguna non-root mengeksekusi mereka. Tetapi dalam direktori /bindan /sbinsaya melihat bahwa semua file memiliki izin seperti-rwxr-xr-x

Jadi apa yang benar-benar menentukan jika pengguna perlu memiliki izin root untuk menjalankan sesuatu?

Dekan
sumber
1
Secara default, Anda atau pengguna mana pun dapat menjalankan program apa pun dari /binatau /sbindirektori. Masalahnya adalah beberapa program berjalan berbeda tergantung pada pengguna mana yang menjalankannya.
Radu Rădeanu

Jawaban:

13

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 rmpanggilan 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 hwclockadalah 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 ...

Rmano
sumber
Jadi pada dasarnya kernel "bertanggung jawab atas itu"? Jika program membuat panggilan sistem, kernel menentukan apakah pengguna yang menjalankan program harus di-root dan menjalankannya?
Dekan
2
Pada dasarnya ya. Program dapat melakukan tes tambahan, tetapi pemeriksaan izin berada pada level kernel. Program setuid-root adalah pengecualian; mereka berjalan sebagai root selalu sehingga mereka perlu memeriksa izin sendiri (dan merupakan font yang bagus dari kelemahan keamanan ...)
Rmano