Saya sudah mengetahui id pengguna yang sebenarnya . Ini adalah nomor unik untuk pengguna di sistem.
Dalam sistem saya, Saya uid
adalah
$ echo $UID
1014
$
Apa kepanjangan dari dua ID lainnya?
Dan apa penggunaan id pengguna yang efektif dan id pengguna yang disimpan dan di mana kita menggunakannya dalam sistem?
Jawaban:
Perbedaan antara id pengguna yang nyata dan yang efektif dibuat karena Anda mungkin memiliki kebutuhan untuk sementara waktu mengambil identitas pengguna lain (seringkali, itu akan terjadi
root
, tetapi bisa jadi pengguna mana saja). Jika Anda hanya memiliki satu id pengguna, maka tidak ada cara untuk mengubah kembali ke ID pengguna asli Anda setelahnya (selain menerima kata-kata Anda begitu saja, dan jika memang demikianroot
, menggunakanroot
hak istimewa untuk beralih ke pengguna mana pun).Jadi, id pengguna yang sebenarnya adalah siapa Anda sebenarnya (orang yang memiliki proses), dan ID pengguna yang efektif adalah apa yang dilihat sistem operasi untuk membuat keputusan apakah Anda diizinkan atau tidak untuk melakukan sesuatu (sebagian besar waktu , ada beberapa pengecualian).
Saat Anda masuk, shell login menyetel id pengguna yang sebenarnya dan efektif ke nilai yang sama (id pengguna Anda yang sebenarnya) seperti yang disediakan oleh file kata sandi.
Sekarang, itu juga terjadi bahwa Anda menjalankan program setuid, dan selain berjalan sebagai pengguna lain (misalnya
root
) program setuid juga seharusnya melakukan sesuatu atas nama Anda. Bagaimana cara kerjanya?Setelah menjalankan program setuid, itu akan memiliki id asli Anda (karena Anda adalah pemilik proses) dan id pengguna yang efektif dari pemilik file (misalnya
root
) karena ini adalah setuid.Program ini melakukan keajaiban apa pun yang perlu dilakukan dengan hak istimewa pengguna super dan kemudian ingin melakukan sesuatu atas nama Anda. Artinya, mencoba melakukan sesuatu yang seharusnya tidak bisa Anda lakukan akan gagal . Bagaimana cara melakukannya? Nah, tentunya dengan mengubah user id efektifnya menjadi user id yang sebenarnya!
Sekarang program setuid tidak memiliki cara untuk beralih kembali karena semua kernel tahu adalah id Anda dan ... id Anda . Bang, kamu sudah mati.
Untuk inilah id pengguna set yang disimpan.
sumber
access
. Itu 99,9%. Jugasetfsuid
(tetapi jarang diperlukan), dan beberapa fungsi tingkat sangat rendah, dan Anda memerlukan (tetapi tidak diperiksa) ID pengguna sebenarnya untuk mendapatkan / menetapkan prioritas atau penjadwal, dan ID yang diteruskan ke penangan sinyal atau dikembalikan olehwait
et al. adalah ID asli.execve
tidak memeriksa, tetapi bisa gagal jika Anda telah mengubah id pengguna yang sebenarnya. Jugafork
tidak memeriksa, tetapi bisa gagal jika Anda mencapai kuota proses maksimum pada UID asli. Google dengansite:man7.org
adalah teman Anda di sini.ping
membutuhkan soket mentah . setiap pengguna dapat (biasanya) membuka soket, dan untuk mendengarkan, di atas 1024.Saya akan mencoba menjelaskan langkah demi langkah dengan beberapa contoh.
Latar belakang pendek
Setiap proses memiliki sendiri 'Proses kredensial' nya yang meliputi atribut seperti
PID
, yangPPID
,PGID
,session ID
dan juga pengguna dan kelompok ID nyata dan efektif:RUID
,EUID
,RGID
,EGID
.Kami akan fokus pada itu.
Bagian 1: Pahami UID dan GID
Sekarang saya akan masuk ke shell dengan kredensial saya dan menjalankan:
Anda dapat melihat nama log saya (rotem), UID dan GID yang keduanya 1000, dan detail lainnya seperti shell yang saya masuki.
Bagian 2: Pahami RUID dan RGID
Setiap proses memiliki pemilik dan menjadi bagian dari grup .
Di shell kami, setiap proses yang sekarang akan kami jalankan akan mewarisi hak istimewa akun pengguna saya dan akan berjalan dengan UID dan GID yang sama.
Mari kita jalankan perintah sederhana untuk memeriksanya:
Dan periksa prosesnya UID dan GID:
Itu adalah ID pengguna Nyata ( ) dan ID grup nyata ( ) dari proses tersebut .
RUID
RGID
(*) Periksa opsi lain untuk melihat UID dan GID dan cara untuk mendapatkannya dalam satu baris .
Untuk saat ini, terimalah fakta bahwa atribut
EUID
danEGID
'berlebihan' dan sama denganRUID
dan diRGID
belakang layar.Bagian 3: Pahami EUID dan EGID
Mari kita ambil
ping
perintah sebagai contoh.Cari lokasi biner dengan
which
perintah lalu jalankanls -la
:Anda dapat melihat pemilik dan grup file tersebut
root
. Ini karenaping
perintah perlu membuka soket dan kernel Linux menuntutroot
hak istimewa untuk itu.Tetapi bagaimana saya dapat menggunakan
ping
jika saya tidak memilikiroot
hak istimewa?Perhatikan huruf 's', bukan 'x' di bagian pemilik izin file.
Ini adalah bit izin khusus untuk file eksekusi biner tertentu (seperti
ping
dansudo
) yang dikenal sebagai setuid .Di sinilah
EUID
danEGID
ikut bermain.Apa yang akan terjadi adalah ketika sebuah setuid binary seperti
ping
dieksekusi, proses tersebut mengubah ID Pengguna Efektifnya (EUID
) dari defaultRUID
ke pemilik file eksekusi biner khusus ini yang dalam hal ini adalah -root
.Ini semua dilakukan oleh fakta sederhana bahwa file ini memiliki
setuid
bit.Kernel membuat keputusan apakah proses ini memiliki hak istimewa dengan melihat
EUID
prosesnya. Karena sekarangEUID
poinroot
, operasi tidak akan ditolak oleh kernel.Perhatian : Pada rilis Linux terbaru, keluaran dari
ping
perintah akan terlihat berbeda karena fakta bahwa mereka mengadopsi pendekatan Kapabilitas Linux daripada pendekatan setuid ini - bagi mereka yang tidak terbiasa - baca di sini .Bagian 4: Bagaimana dengan SUID dan SGID?
ID pengguna Tersimpan (
SUID
) digunakan saat proses dengan hak istimewa sedang berjalan (sebagairoot
contoh) dan ia perlu melakukan beberapa tugas yang tidak memiliki hak istimewa .Dalam hal ini, UID (
EUID
) efektif dari sebelumnya akan disimpan di dalamSUID
dan kemudian diubah menjadi tugas yang tidak memiliki hak istimewa. Ketika tugas yang tidak memiliki hak istimewa selesai, nilaiEUID
akan diambil dariSUID
dan beralih kembali ke akun yang memiliki hak istimewa.sumber