$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
jadi sudo
dapat dijalankan oleh pengguna mana pun, dan setiap pengguna yang menjalankan sudo
akan memiliki root sebagai ID pengguna yang efektif dari proses karena bit set-user-id /usr/bin/sudo
diatur.
Dari https://unix.stackexchange.com/a/11287/674
perbedaan yang paling terlihat antara sudo dan su adalah sudo membutuhkan kata sandi pengguna dan su membutuhkan kata sandi root.
Kata sandi pengguna mana yang
sudo
diminta? Apakah pengguna diwakili oleh ID pengguna sebenarnya dari proses?Jika ya, bukankah ada pengguna yang bisa mendapatkan hak istimewa pengguna super dengan menjalankan
sudo
dan kemudian memberikan kata sandi mereka sendiri? Bisakah Linux membatasi itu pada beberapa pengguna?Apakah benar bahwa
sudo
meminta password setelahexecve()
mulai menjalankanmain()
of/usr/bin/sudo
?Karena cairan proses telah diubah menjadi root (karena bit set-user-id dari / usr / bin / sudo diatur), apa gunanya sudo yang meminta kata sandi nanti?
Terima kasih.
Saya telah membaca https://unix.stackexchange.com/a/80350/674 , tetapi tidak menjawab pertanyaan di atas.
sumber
Jawaban:
Dalam konfigurasi yang paling umum,
sudo
meminta kata sandi pengguna yang berjalansudo
(seperti yang Anda katakan, pengguna yang sesuai dengan id pengguna sebenarnya dari proses). Intinyasudo
adalah untuk memberikan hak istimewa tambahan kepada pengguna tertentu (sebagaimana ditentukan oleh konfigurasi disudoers
), tanpa pengguna tersebut harus memberikan otentikasi lain selain milik mereka. Namun,sudo
apakah memeriksa bahwa pengguna yang menjalankansudo
benar-benar adalah yang mereka klaim, dan melakukan itu dengan meminta kata sandi mereka (atau mekanisme otentikasi apa pun yang diatursudo
, biasanya menggunakan PAM - sehingga ini dapat melibatkan sidik jari, atau dua faktor otentikasi dll.).sudo
tidak serta merta memberikan hak untuk menjadi root, ia dapat memberikan berbagai hak istimewa. Setiap pengguna yang diizinkan menjadi root dengan hanyasudoers
dapat melakukannya menggunakan autentikasi mereka sendiri; tetapi pengguna tidak diizinkan, tidak bisa (setidaknya, tidak dengan menggunakansudo
). Ini tidak diberlakukan oleh Linux itu sendiri, tetapi olehsudo
(dan pengaturan autentikasi).sudo
memang meminta kata sandi setelah mulai berjalan; itu tidak bisa melakukan sebaliknya ( yaitu tidak bisa melakukan apa pun sebelum mulai berjalan). Inti darisudo
meminta kata sandi, meskipun root, adalah untuk memverifikasi identitas pengguna yang sedang berjalan (dalam konfigurasi tipikal).sumber
sudo
biasanya meminta kata sandi dari pengguna yang menjalankannya, meskipun ini dapat dikonfigurasi :Pengaturan
rootpw
telahsudo
selalu meminta password root ini,targetpw
meminta password dari penggunasudo
akhirnya akan menjalankan program sebagai, danrunaspw
meminta password dari pengguna set dirunas_default
.Pengaturan
sudo
biner seperti itu memang bisa dimulai dengan hak akses root oleh pengguna mana pun. Dengan asumsisudo
tidak memiliki bug dengan kode autentikasi, itu sendiri tidak akan terlalu menjadi masalah.Demikian pula, proses apa pun juga dapat mengeksekusi kode dalam mode kernel, dengan memanggil panggilan sistem apa pun, katakanlah
open()
. (itu tidak sama dengan kode userspace sebagai root.) Selama kernel tidak memiliki bug, mereka tidak akan dapat menjalankan kode arbitrer.sumber
Dari baris pertama
man sudo
:Begitu:
Ya, setiap pengguna (yang diizinkan ) dapat memperoleh superuser (atau lainnya) hak istimewa tambahan dengan menjalankan sudo dan kemudian memberikan otentikasi ( dikonfigurasi ) yang diperlukan. Keduanya diizinkan dan dikonfigurasi diatur dalam file sudoers.
Bisakah Linux membatasi itu pada beberapa pengguna?
Ya, itu bisa, tetapi tidak. Linux diatur untuk memungkinkan biner sudo untuk membuat keputusan berdasarkan seperangkat aturan (kebijakan keamanan) di dalam program sudo dan di dalam file
/etc/sudoers
. Biasanya, file lain (juga / sebagai gantinya) dapat digunakan.Dari
man setresuid
:Satu-satunya cara untuk mendapatkan izin pengguna super yang diberikan oleh kernel adalah dengan menjalankan suid program. Tidak bisa sebaliknya. Ini adalah cara Linux telah memilih untuk memberikan izin pengguna super.
Setelah kernel memuat executable yang tidak dapat dimodifikasi oleh pengguna lain (file dan direktori yang dimiliki oleh root dan hanya dapat ditulis oleh root), executable itu sendiri (sudo) mengautentikasi pengguna dengan meminta kata sandinya (atau sesuatu yang dikonfigurasi) dan memutuskan apakah dan izin mana yang akan diberikan.
sumber
Tambahan untuk jawaban baik lainnya tentang
sudo
:su
memungkinkan Anda untuk secara efektif menjadi pengguna yang berbeda. Di komputer saya sendiri, saya tidak menjalankan sebagai administrator untuk penggunaan sehari-hari - yang berarti, antara lain, saya tidak bisa (langsung) menggunakannyasudo
. Jika saya ingin menggunakansudo
, saya dapat menggunakansu
untuk "menjadi" pengguna Administrator, dan kemudian dalam penggunaan peran itusudo
. Dalam situasi itu saya akhirnya memasukkan kata sandi akun Admin dua kali - sekali ketika saya menjalankansu
, dan satu kali ketika saya menjalankansudo
.sumber