Bisakah proses superuser mengubah ID pengguna nyata dan ID grup suatu proses, tidak cocok dengan yang ada di file kata sandi?

11

Dari APUE

ID pengguna nyata dan ID grup nyata dari suatu proses mengidentifikasi siapa kita sebenarnya. Kedua bidang ini diambil dari entri kami di fi le kata sandi ketika kami masuk. Biasanya, nilai-nilai ini tidak berubah selama sesi login, meskipun ada cara bagi proses superuser untuk mengubahnya

Bisakah proses superuser mengubah ID pengguna nyata dan ID grup nyata dari suatu proses, sehingga hubungan antara ID pengguna nyata dan ID grup nyata tidak cocok dengan yang ada di file kata sandi? Misalnya, jika pengguna Timbukan anggota grup oceanper file kata sandi, dapatkah proses superuser mengubah ID pengguna sebenarnya dan ID grup sebenarnya dari suatu proses menjadi Timdan oceanmasing - masing?

Tim
sumber
5
Satu klarifikasi penting di sini: proses yang berjalan dengan hak akses superuser memiliki kemampuan mengubah sendiri UID dan GID, bukan kepentingan proses lain.
filbranden
Basis data Info Pengguna adalah murni milik pengguna. Kernel hanya peduli tentang UID dan GID, bukan basis data pengguna atau grup.
炸鱼 薯条 德里克

Jawaban:

15

Ya, proses superuser dapat mengubah ID pengguna sebenarnya dan ID grup nyata ke nilai apa pun yang diinginkannya. Nilai dalam /etc/passwddan /etc/shadowmerupakan konfigurasi untuk nilai apa yang harus ditetapkan, tetapi bukan batasan nilai yang mungkin.

Edit # 1

Ini berarti program seperti loginakan membaca nilai dari file, jadi file tersebut adalah file konfigurasi atau file input. Mereka bukan kendala apa yang bisa dilakukan suatu program. Proses superuser dapat memberikan nilai apa pun ke kernel, dan kernel tidak akan memeriksa file apa pun.

Suatu program bisa menelepon

setgid (54321);
setuid (12345);

dan ini akan berhasil, bahkan jika tidak ada id yang disebutkan dalam file apa pun.

RalfFriedl
sumber
9

File kata sandi dan file grup tidak dibaca, mereka hanya dibaca oleh proses login, untuk mengatur id pengguna nyata, dan id grup nyata.

Tidak ada dalam kernel yang menyebutkan file-file ini. Login harus membuka file, memprosesnya dan mengatur dua ID. Itu bisa ditulis berbeda untuk mendapatkan ID ini dari tempat lain. Misalnya dari basis data jaringan.

Setiap proses dengan kemampuan CAP_SETUID dapat mengatur ID ini, root memiliki kemampuan ini.

Model keamanan di Unix, adalah bagian yang diimplementasikan dalam kernel, dan bagian yang diimplementasikan dalam proses yang berjalan dengan kemampuan yang ditingkatkan (misalnya sebagai root).


Perhatikan bahwa /etc/passwddan /etc/groupjuga dibaca oleh ls, psdan program lain yang perlu menerjemahkan nama pengguna / grup ke / dari ID pengguna / grup. (Mereka dapat melakukan ini melalui perpustakaan, daripada tahu tentang metode alternatif menyimpan detail ini.)

ctrl-alt-delor
sumber
1
Mereka ( /etc/passwd, /etc/groups) juga dibaca oleh proses yang ingin menunjukkan atau memproses nama pengguna alih-alih ID numerik internal, misalnya psdan ls.
Jonas Schäfer
3

Antara lain, tujuannya /etc/passwdadalah untuk menerjemahkan nama pengguna ke UID pengguna . Jika Anda tidak peduli apa itu UID bob, Anda tidak perlu file itu. Jika Anda hanya ingin mengubah ke UID / GID sewenang-wenang, gunakan syscall yang relevan:

int setuid(uid_t uid);
int setgid(gid_t gid);

Perhatikan bahwa proses istimewa dengan CAP_SETUIDdan CAP_SETGID kemampuan (yang umumnya dimiliki oleh proses root) hanya dapat mengubah UID dan GID-nya sendiri, bukan proses yang berjalan lainnya.

hutan
sumber