Saya masuk /sbin
dan saya melihat bahwa shutdown
ada izin rwxr-xr-x
. Bukankah ini berarti bahwa siapa pun dapat menjalankannya?
shutdown
perintah.
shutdown
.
Saya masuk /sbin
dan saya melihat bahwa shutdown
ada izin rwxr-xr-x
. Bukankah ini berarti bahwa siapa pun dapat menjalankannya?
shutdown
perintah.
shutdown
.
Jawaban:
Siapa pun dapat mengeksekusi shutdown
, tetapi memicu shutdown sistem memerlukan hak akses root. Tetapi shutdown
bukan setuid, dan hanya root yang bisa menjalankannya dengan sukses . The shutdown
Program 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)
shutdown
tidak 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 shutdown
itu setuid, itu akan berjalan sebagai root tidak peduli siapa yang memanggilnya, tetapi tidak.)
Bagaimana dengan menelepon shutdown
dari GUI, mis. Dengan control-alt-del? Sangat penting untuk menyadari bahwa dalam hal ini, shutdown
dimulai langsung oleh init
dan 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 shutdown
untuk memeriksa apakah pengguna yang saat ini login diizinkan untuk menjalankannya. Tetapi ini hanya relevan karena shutdown
dijalankan 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/passwd
berjalan dengan izin root untuk memungkinkan Anda memodifikasi file kata sandi. Lihat halaman manual untuk chmod
.
/usr/bin/passwd
berjalan dengan izin root"! /etc/passwd
tidak dapat dieksekusi (ini adalah "file kata sandi" yang sedang dimodifikasi).
Biner shutdown
itu 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) = ?
shutdown
memeriksa 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.
-a
dari commandline tidak akan membuat perbedaan: shutdown -a
masih harus dieksekusi dengan izin root (yang init
memasok pada control-alt-del).