Perbedaan antara pemilik / root dan RUID / EUID

24

Saya relatif baru dengan konsep yang disebutkan dalam pertanyaan dan membaca tentang mereka dari sumber yang berbeda hanya membuat mereka lebih membingungkan. Jadi ini yang saya mengerti sejauh ini:

Ketika kami diberikan izin untuk sebuah file, mereka terlihat seperti ini:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

Kami berasumsi bahwa pengguna user2yang berada di grup usersmencoba mengeksekusi file.bin. Jika bit setuid tidak disetel, ini berarti bahwa RUID dan EUID file.binsama dengan UID user2. Tetapi karena bit setuid diatur, ini berarti bahwa RUID sekarang sama dengan UID dari user2, sedangkan EUID adalah UID dari pemilik file user1,.

Pertanyaan saya adalah:

  1. Apa perbedaan antara pemilik file dan root? Apakah rootmemiliki izin yang sama dengan pemiliknya? Atau akankah kita memerlukan entri terpisah dalam daftar izin root?
  2. Perbedaan antara RUID dan EUID?
    • Seperti yang saya pahami, RUID dan EUID hanya diterapkan pada proses. Jika itu masalahnya, mengapa mereka memiliki nilai id pengguna?
    • Jika RUID adalah pengguna yang menciptakan proses, dan EUID adalah pengguna yang sedang menjalankan proses, maka kalimat pertama dari jawaban pertama dalam pertanyaan ini tidak masuk akal bagi saya.
    • Apakah saya mengerti dengan benar apa yang dilakukan bit setuid?
pengguna1956190
sumber

Jawaban:

35

Inilah jawabannya:

  1. rootselalu memiliki akses penuh ke file dan direktori. Pemilik file biasanya juga memilikinya, tetapi ini tidak selalu benar. Sebagai contoh:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1adalah pemiliknya ; namun mereka hanya bisa membaca dan mengeksekusi , tetapi rootmasih memiliki akses penuh ( rwx ) ke file.

  2. RUID adalah ID Pengguna Nyata dan tidak pernah (hampir) berubah. Jika user2masuk ke sistem, shell kemudian diluncurkan dengan ID aslinya diatur ke user2. Semua proses yang mereka mulai dari shell akan mewarisi ID asli user2sebagai ID asli mereka.

    EUID adalah ID Pengguna Efektif , itu berubah untuk proses (bukan untuk pengguna) yang dijalankan pengguna yang telah mengatur bit setuid .

    Jika user2dijalankan file.bin, RUID akan menjadi user2dan EUID dari proses yang dimulai akan user1.

Mari kita gunakan kasus passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • Ketika user2ingin mengubah kata sandi mereka, mereka mengeksekusi /usr/bin/passwd.

  • RUID akan user2tetapi EUID dari proses itu adalah root.

  • user2dapat digunakan passwduntuk mengubah hanya kata sandi mereka sendiri karena secara internal passwdmemeriksa RUID dan, jika tidak root, tindakannya akan terbatas pada kata sandi pengguna asli.

  • Perlu bahwa EUID menjadi rootdalam kasus passwdkarena proses perlu menulis ke /etc/passwddan / atau /etc/shadow.

jcbermu
sumber
Terima kasih! Sekarang segalanya lebih jelas. Saya punya satu pertanyaan lagi. EUID hanya berubah ketika pengguna mengeksekusi proses yang set bit setuid diatur? Atau bisakah itu berubah juga dalam situasi lain? Dan jika demikian, apa situasinya?
user1956190
1
Saya pikir tidak ada cara lain selain menjalankan proses yang memiliki setuidbit set.
jcbermu
3
Suatu proses yang berjalan dari program "setuid" (yaitu, proses yang memiliki UID Efektif ≠ UID Nyata) dapat mengatur EUID kembali ke RUID. Dalam beberapa kasus, ia dapat mengubah EUID bolak-balik antara nilai awalnya (yaitu, pemilik file program) dan RUID. Juga, ia mungkin dapat mengatur RUID-nya sama dengan EUID-nya. ... (Lanjutan)
Scott
2
(Lanjutan) ... Keistimewaan proses (orang-orang dengan EUID = 0, alias root) dapat mengatur EUID dan RUID dengan nilai-nilai sewenang-wenang (misalnya, login, su, dan sudoprogram melakukannya). Secara umum, sekali proses istimewa mengubah UID-nya menjadi nilai-nilai tidak nol, itu tidak lagi istimewa dan tidak bisa menjadi rootlagi. Lihat halaman manual setuid (2) , seteuid (2) , dan setreuid (2) .
Scott
1
(Lanjutan) ... Ini diperkenalkan sebagai peretasan untuk menyelesaikan satu masalah, yang kemudian dipecahkan dengan cara yang lebih luas. Mungkin telah dihapus dari Linux kecuali fakta bahwa pemangkasan seperti itu akan merusak program yang menggunakannya. Michael Kerrisk, penulis The Linux Programming Interface , mengatakan, dalam versinya tentang halaman setfsuid (2) , “ setfsuid()saat ini tidak dibutuhkan dan harus dihindari dalam aplikasi baru.”
Scott