Saya masuk /sbindan saya melihat bahwa shutdownada izin rwxr-xr-x. Bukankah ini berarti bahwa siapa pun dapat menjalankannya?
shutdownperintah.
shutdown.
Saya masuk /sbindan saya melihat bahwa shutdownada izin rwxr-xr-x. Bukankah ini berarti bahwa siapa pun dapat menjalankannya?
shutdownperintah.
shutdown.
Jawaban:
Siapa pun dapat mengeksekusi shutdown, tetapi memicu shutdown sistem memerlukan hak akses root. Tetapi shutdownbukan setuid, dan hanya root yang bisa menjalankannya dengan sukses . The shutdownProgram ini cukup bagus untuk memeriksa hak Anda dan membiarkan Anda tahu jika ada masalah, tetapi bahkan jika itu naif mencoba sistem shutdown, tidak akan terjadi.
GLENDOWER: Saya bisa memanggil roh dari dalam yang jahat.
HOTSPUR: Kenapa, saya juga bisa, atau bisa juga siapa saja; Tetapi apakah mereka akan datang ketika Anda memanggil mereka?
(dari Henry IV)
shutdowntidak berbeda dari /bin/rm. Semua orang dapat menjalankannya, tetapi pengguna biasa tidak dapat menghapus /etc, atau direktori home pengguna lain.
Khususnya: Hanya proses yang berjalan dengan hak akses root (UID 0 efektif) yang dapat mengarahkan sistem init untuk menghentikan layanan sistem, menghentikan semua proses pengguna, dan mengeluarkan panggilan sistem yang benar-benar menghentikan mesin. (Jika shutdownitu setuid, itu akan berjalan sebagai root tidak peduli siapa yang memanggilnya, tetapi tidak.)
Bagaimana dengan menelepon shutdowndari GUI, mis. Dengan control-alt-del? Sangat penting untuk menyadari bahwa dalam hal ini, shutdowndimulai langsung oleh initdan berjalan dengan hak akses root. Jadi setiap orang yang berjalan ke konsol berpotensi mematikannya. Jika ini tidak diinginkan, control-alt-delete akan benar-benar berjalan shutdown -a. (Lihat dokumentasi yang dikutip @ some1 dalam jawaban mereka). Itu memberi tahu shutdownuntuk memeriksa apakah pengguna yang saat ini login diizinkan untuk menjalankannya. Tetapi ini hanya relevan karena shutdowndijalankan sebagai root dalam skenario ini.
shutdown, tetapi program itu tidak dapat memicu shutdown sistem kecuali jika pengguna saat ini memiliki hak akses root. Kanan?
shutdown. Program setuid dijalankan dengan izin dari pengguna yang memiliki executable. Misalnya, /etc/passwdberjalan dengan izin root untuk memungkinkan Anda memodifikasi file kata sandi. Lihat halaman manual untuk chmod.
/usr/bin/passwdberjalan dengan izin root"! /etc/passwdtidak dapat dieksekusi (ini adalah "file kata sandi" yang sedang dimodifikasi).
Biner shutdownitu sendiri memeriksa apakah UID Anda adalah 0.
Lihat output strace dari:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdownmemeriksa bahwa UID Anda adalah 0.
if(getuid() != 0) printf("Need to be root");. Yang sebenarnya kode sumber menunjukkannya.
Tampaknya shutdown akan memeriksa daftar akses jika Anda menandainya dengan -a:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
Karena Anda saat ini memanggilnya tanpa tanda -a, itu default untuk mengizinkan root shutdown saja.
Jika Anda ingin pengguna tambahan dapat menjalankan perintah, konfigurasikan file itu dan gunakan bendera.
Why can't I execute shutdown when the permission is rwxr-xr-x?
Bit izin tidak harus mengecualikan kontrol akses berdasarkan pada pengguna atau grup.
-adari commandline tidak akan membuat perbedaan: shutdown -amasih harus dieksekusi dengan izin root (yang initmemasok pada control-alt-del).