Saya masuk /sbin
dan saya melihat bahwa shutdown
ada izin rwxr-xr-x
. Bukankah ini berarti bahwa siapa pun dapat menjalankannya?
permissions
security
shutdown
Korgan Rivera
sumber
sumber
shutdown
perintah.shutdown
.Jawaban:
Siapa pun dapat mengeksekusi
shutdown
, tetapi memicu shutdown sistem memerlukan hak akses root. Tetapishutdown
bukan setuid, dan hanya root yang bisa menjalankannya dengan sukses . Theshutdown
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.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 olehinit
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 berjalanshutdown -a
. (Lihat dokumentasi yang dikutip @ some1 dalam jawaban mereka). Itu memberi tahushutdown
untuk memeriksa apakah pengguna yang saat ini login diizinkan untuk menjalankannya. Tetapi ini hanya relevan karenashutdown
dijalankan sebagai root dalam skenario ini.sumber
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 untukchmod
./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:
sumber
shutdown
memeriksa bahwa UID Anda adalah 0.if(getuid() != 0) printf("Need to be root");
. Yang sebenarnya kode sumber menunjukkannya.Iya nih ! Semua orang dapat menjalankan perintah itu. Seperti yang Anda katakan, Anda dapat menjalankannya tetapi Anda dihadapkan dengan pesan "Need to be root", bukan a
permission denied
. Theshutdown
perintah cek AndaUID
untuk melihat apakah Anda akar sedang, atau tidak.sumber
Tampaknya shutdown akan memeriksa daftar akses jika Anda menandainya dengan -a:
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.
Bit izin tidak harus mengecualikan kontrol akses berdasarkan pada pengguna atau grup.
sumber
-a
dari commandline tidak akan membuat perbedaan:shutdown -a
masih harus dieksekusi dengan izin root (yanginit
memasok pada control-alt-del).