Jika Anda melihat pada executable sudo
:
$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun 3 2011 /usr/bin/sudo
Anda akan melihat bahwa itu membawa bit izin ---s--x--x
. Ini dapat dirinci sebagai berikut:
-|--s|--x|--x
- - first dash denotes if a directory or a file ("d" = dir, "-" = file)
--s - only the setuid bit is enabled for user who owns file
--x - only the group execute bit is enabled
--x - only the other execute bit is enabled
Jadi ketika suatu program mengaktifkan bit setuid-nya (juga disebut SUID) itu berarti bahwa ketika seseorang menjalankan program ini, ia akan berjalan dengan kredensial pengguna yang memiliki file tersebut, alias. root dalam hal ini.
Contoh
Jika saya menjalankan perintah berikut sebagai user saml:
$ whoami
saml
$ sudo su -
[sudo] password for saml:
Anda akan melihat bahwa eksekusi sudo
sebenarnya berjalan sebagai root:
$ ps -eaf|grep sudo
root 20399 2353 0 05:07 pts/13 00:00:00 sudo su -
mekanisme setuid
Jika Anda penasaran bagaimana SUID bekerja lihatlah man setuid
. Berikut adalah kutipan dari halaman manual yang menjelaskan lebih baik daripada yang saya bisa:
setuid () mengatur ID pengguna yang efektif dari proses panggilan. Jika UID efektif dari pemanggil adalah root, UID asli dan set-user-ID yang disimpan juga disetel. Di Linux, setuid () diimplementasikan seperti versi POSIX dengan fitur _POSIX_SAVED_IDS. Hal ini memungkinkan program set-user-ID (selain root) untuk menghapus semua hak pengguna, melakukan pekerjaan yang tidak diistimewakan, dan kemudian menggunakan kembali ID pengguna efektif asli dengan cara yang aman.
Jika pengguna root atau programnya adalah set-user-ID-root, perhatian khusus harus diambil. Fungsi setuid () memeriksa ID pengguna yang efektif dari penelepon dan jika itu adalah pengguna super, semua ID pengguna yang terkait dengan proses diatur ke uid. Setelah ini terjadi, tidak mungkin bagi program untuk mendapatkan kembali hak root.
Konsep kunci di sini adalah bahwa program memiliki userid nyata (UID) dan yang efektif (EUID). Setuid sedang mengatur userid efektif (EUID) ketika bit ini diaktifkan.
Jadi dari perspektif kernel diketahui bahwa dalam contoh kita, saml
masih merupakan pemilik asli (UID), tetapi EUID telah ditetapkan dengan siapa pun adalah pemilik dari executable.
setgid
Saya juga harus menyebutkan bahwa ketika kita merombak izin pada perintah sudo, kelompok bit kedua adalah untuk izin grup. Bit grup juga memiliki sesuatu yang mirip dengan setuid yang disebut set group id (alias. Setgid, SGID). Ini melakukan hal yang sama seperti SUID kecuali menjalankan proses dengan kredensial grup alih-alih kredensial pemilik.
Referensi
sudo -s
bukansudo su
karena itu penggunaan yang tidak bergunasu
. :)sudo
Biner yang sebenarnya adalah root setuid , dan Anda tidak bisa hanya akan file menjadi ada yang ditetapkan dengan cara ini.sumber
Untuk menjawab bagian tentang syscalls yang tampaknya tidak disentuh oleh siapa pun, salah satu syscalls penting adalah setresuid () atau setresgid (). Saya yakin ada yang lain, tetapi 2 ini sepertinya cukup spesifik untuk setuid / sudo.
sumber