GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Internal Sudo Bekerja?

Bagaimana sudo bekerja secara internal? Kok bisa jadi root tanpa password root, beda dengan su ? Apa syscalls, dll yang terlibat dalam proses? Apakah ini bukan lubang keamanan yang menganga di Linux (mis. mengapa saya tidak bisa mengkompilasi sudo yang ditambal berat? yang baru saja melakukan sudo biasa apa pun melakukannya, tetapi tidak meminta kata sandi pengguna yang tidak memiliki hak istimewa)?

Saya telah membaca login dan su internal. Saya juga telah membaca Bagaimana sudo dimaksudkan untuk digunakan? tetapi terlepas dari judulnya, mereka terutama membahas perbedaan antara su dan sudo .

Jawaban yang Diterima:

Jika Anda melihat sudo yang dapat dieksekusi :

$ 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 ia membawa bit izin ---s--x--x . Ini dapat dipecah 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 sebuah program mengaktifkan bit setuidnya (juga disebut sebagai SUID), itu berarti bahwa ketika seseorang menjalankan program ini, program itu akan berjalan dengan kredensial pengguna yang memiliki file, alias. root dalam kasus ini.

Contoh

Jika saya menjalankan perintah berikut sebagai saml pengguna:

$ 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 dengan cara kerja SUID, lihat man setuid . Berikut kutipan dari halaman manual yang menjelaskannya lebih baik daripada yang saya bisa:

setuid() menetapkan ID pengguna yang efektif dari proses panggilan. Jika
UID efektif 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 istimewa
penggunanya, melakukan beberapa pekerjaan yang tidak memiliki hak istimewa, dan kemudian mengaktifkan kembali
ID pengguna efektif asli di dengan cara yang aman.

Jika pengguna adalah root atau program adalah set-user-ID-root, perhatian khusus
harus dilakukan. Fungsi setuid() memeriksa ID pengguna yang efektif dari
pemanggil dan jika itu adalah pengguna super, semua ID pengguna yang terkait dengan proses
disetel ke uid. Setelah ini terjadi, program
tidak mungkin mendapatkan kembali hak akses root.

Konsep kuncinya di sini adalah bahwa program memiliki userid nyata (UID) dan yang efektif (EUID). Setuid sedang menyetel id pengguna yang efektif (EUID) saat bit ini diaktifkan.

Terkait:Ssh – Bagaimana cara kerja tcp-keepalive di ssh?

Jadi dari sudut pandang kernel diketahui bahwa dalam contoh kita, saml masih pemilik asli (UID), tetapi EUID telah ditetapkan dengan siapa pun pemilik executable.

setgid

Saya juga harus menyebutkan bahwa ketika kami memecah izin pada perintah sudo, grup bit kedua adalah untuk izin grup. Bit grup juga memiliki sesuatu yang mirip dengan setuid yang disebut set grup id (alias. setgid, SGID). Ini melakukan hal yang sama seperti SUID kecuali menjalankan proses dengan kredensial grup alih-alih kredensial pemilik.

Referensi

  • mengatur halaman wikipedia
  • halaman manual setuid

Linux
  1. Bagaimana Menjalankan Perintah Sebagai Administrator Sistem (root)?

  2. Bagaimana Cara Kerja Bagian Dalam Cron Daemon?

  3. Bagaimana Menjalankan Terminal Sebagai Root?

  1. Seberapa aman NOPASSWD dalam mode sudo tanpa kata sandi?

  2. Bagaimana cara kerja perintah ps?

  3. Bagaimana cara kerja izin file untuk pengguna root?

  1. Cara Mengatur Ulang Kata Sandi untuk Sudo di Debian

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Bagaimana Cara Membuat Skrip A Sebagai Root Secara Retroaktif?