Apa itu UID di Linux?
UID adalah singkatan dari pengenal pengguna. UID adalah nomor yang ditetapkan untuk setiap pengguna Linux. Ini adalah representasi pengguna di kernel Linux. UID digunakan untuk mengidentifikasi pengguna di dalam sistem dan untuk menentukan sumber daya sistem mana yang dapat diakses pengguna. Inilah sebabnya mengapa ID pengguna harus unik.
Anda dapat menemukan UID yang tersimpan di file /etc/passwd. Ini adalah file yang sama yang dapat digunakan untuk membuat daftar semua pengguna di sistem Linux.
Gunakan perintah Linux untuk melihat file teks dan Anda akan melihat berbagai informasi tentang pengguna yang ada di sistem Anda.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin
Kolom ketiga di sini mewakili ID pengguna atau UID.
Perhatikan bahwa di sebagian besar distribusi Linux, UID 1-500 biasanya disediakan untuk pengguna sistem. Di Ubuntu dan Fedora, UID untuk pengguna baru mulai dari 1000.
Misalnya, jika Anda menggunakan perintah adduser atau useradd untuk membuat pengguna baru, itu akan mendapatkan nomor yang tersedia berikutnya setelah 1000 sebagai UID-nya.
Di Linux, UID 0 dan GID 0 dicadangkan untuk pengguna root.
Bagaimana cara menemukan UID pengguna di Linux?
Anda selalu dapat mengandalkan file /etc/passwd untuk mendapatkan UID pengguna. Itu bukan satu-satunya cara untuk mendapatkan informasi UID di Linux.
Perintah id di Linux akan menampilkan UID, GID, dan grup milik pengguna Anda saat ini:
id
uid=1000(abhishek) gid=1000(abhishek) groups=1000(abhishek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),127(kvm)
Anda juga dapat menentukan nama pengguna dengan perintah id untuk mendapatkan UID dari setiap pengguna Linux:
id standard
uid=1001(standard) gid=1001(standard) groups=1001(standard)
Bagaimana cara mengubah UID pengguna di Linux?
Misalkan Anda memiliki beberapa pengguna di sistem Linux Anda. Anda harus menghapus pengguna karena dia meninggalkan organisasi. Sekarang Anda ingin UID-nya diambil oleh pengguna lain yang sudah ada di sistem.
Anda dapat mengubah UID dengan memodifikasi pengguna menggunakan perintah usermod seperti ini:
usermod -u 1004 user_2
Anda harus memiliki hak pengguna super untuk menjalankan perintah di atas.
Apakah Anda ingat izin file dan konsep kepemilikan di Linux? Kepemilikan file ditentukan oleh UID pengguna pemilik.
Saat Anda memperbarui UID pengguna, apa yang terjadi pada file yang dimiliki oleh pengguna ini? Sementara semua file di direktori beranda pengguna_2 akan diubah UID terkaitnya, Anda harus memperbarui UID terkait file lain di luar secara manual direktori home.
Yang dapat Anda lakukan adalah memperbarui kepemilikan file yang terkait dengan UID lama pengguna_2 secara manual.
find / -user old_uid_of_user_2 -exec chown -h user_2 {} \;
Bagaimana UID dikaitkan dengan sumber daya sistem yang berbeda? [untuk pengguna tingkat lanjut]
UID unik satu sama lain dan dengan demikian mereka juga dapat digunakan untuk mengidentifikasi kepemilikan sumber daya sistem yang berbeda seperti file dan proses.
UID dan file
Saya harap Anda sudah familiar dengan konsep izin file di Linux. Saat Anda membuat file, Anda adalah pemilik file ini. Sekarang Anda dapat memutuskan siapa yang akan melakukan apa dengan file ini. Ini adalah bagian dari mekanisme DAC Linux di mana setiap file dibiarkan sesuai kebijaksanaan pemiliknya.
Anda dapat membaca kepemilikan file dengan menggunakan perintah ls atau stat. Mari kita lakukan dengan perintah ls yang populer dan periksa kepemilikan dari sleep
biner atau passwd
.
Seperti yang Anda lihat, file /usr/bin/sleep milik root:
ls -l $(which sleep)
-rwxr-xr-x 1 root root 39048 Mar 6 2020 /usr/bin/sleep
Mari kita paksa untuk memetakan kepemilikan dengan UID alih-alih nama pengguna:
ls -lhn $(which sleep)
-rwxr-xr-x 1 0 0 39K Mar 6 2020 /usr/bin/sleep
Berikut informasi menyenangkan. Sistem operasi Anda tidak mengerti "nama pengguna". Kapan pun sebuah program perlu bekerja dengan nama pengguna atau perlu mencetaknya, itu merujuk ke /etc/passwd
file untuk mengekstrak informasi.
Anda tidak perlu mengambil kata-kata saya untuk itu. Lihat sendiri dengan program strace yang mencetak semua panggilan sistem yang dibuat oleh suatu program.
strace ls -lhn $(which sleep) 2>&1 | grep passwd
Apa yang Anda coba lihat adalah apakah ls
perintah mencoba membaca /etc/passwd
file atau tidak.
strace ls -lh $(which sleep) 2>&1 | grep passwd
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6
Sejauh ini, sangat baik.
UID dan proses
Proses juga memiliki pemilik, seperti halnya file. Hanya pemilik (atau pengguna root) dari suatu proses yang dapat mengirim sinyal proses ke sana. Di sinilah UID berperan.
Jika pengguna biasa mencoba mematikan proses yang dimiliki oleh pengguna lain, itu akan menghasilkan kesalahan:
kill 3708
bash: kill: (3708) - Operation not permitted
Hanya pemilik proses atau root yang dapat melakukan ini.
Sebuah proses harus diatur. Diatur seperti pada Anda harus memiliki cara untuk membatasi atau mengetahui seberapa banyak proses yang diizinkan untuk dilakukan. Ini ditentukan oleh UID-nya.
Ada tiga jenis UID yang terkait dengan suatu proses.
- UID Asli :UID nyata adalah UID yang diadopsi oleh suatu proses dari induknya. Dalam istilah yang lebih mudah, siapa pun yang memulai suatu proses, UID pengguna itu adalah UID sebenarnya dari proses tersebut. Ini sangat membantu dalam mengidentifikasi milik siapa proses itu sebenarnya. Ini penting terutama ketika UID yang efektif tidak sama dengan UID yang sebenarnya yang akan saya bicarakan selanjutnya.
- UID yang Efektif :Ini yang kebanyakan menentukan izin apa yang benar-benar dimiliki proses tertentu. Meskipun pengguna dapat memulai prosesnya, proses tersebut dapat berjalan dengan izin yang tersedia dari pengguna lain. Perintah
passwd
adalah salah satu contohnya. Program ini mengedit file/etc/shadow
, yaituroot
dimiliki. Oleh karena itu, pengguna normal seharusnya tidak dapat menjalankan perintah ini atau mengubah kata sandinya. Untungnya, biner berjalan dengan UID efektif 0 (yaitu root), yang memungkinkannya memiliki hak istimewa yang cukup untuk mengedit/etc/shadow
mengajukan. UID yang nyata dan efektif sebagian besar sama kecuali dalam kasus binari yang mendukung bit SUID. - UID Tersimpan :UID yang tersedia di pembuangan proses. Yang ini biasanya tidak digunakan, tetapi masih ada jika prosesnya tahu itu tidak akan melakukan pekerjaan istimewa apa pun, sehingga dapat mengubah UID efektifnya menjadi sesuatu yang tidak memiliki hak istimewa. Hal ini akan mengurangi munculnya perilaku buruk yang tidak disengaja.
Itu dia. Saya harap Anda memiliki ide yang lebih baik tentang UID di Linux sekarang. Jangan ragu untuk mengajukan pertanyaan Anda, jika ada.
Sebagai pengguna pro Linux, jika menurut Anda saya melewatkan beberapa konsep penting tentang UID, beri tahu saya di bagian komentar.