Setiap proses di Linux berjalan dengan identitas pengguna tertentu, dan setiap berkas dimiliki oleh satu pengguna serta satu grup. Identitas inilah dasar seluruh sistem keamanan pada jalur ini. Topik ini membahas model pengguna dan grup, dua berkas sistem yang menyimpan datanya, yaitu /etc/passwd dan /etc/group, serta perintah untuk membaca identitas yang sedang aktif. Setelah menyelesaikannya, isi kedua berkas tersebut dapat dibaca dan ditafsirkan, dan alasan pembuatan pengguna baru membutuhkan hak root menjadi jelas.
Identitas pengguna: UID dan GID#
Kernel Linux tidak mengenali pengguna dari namanya. Identitas yang diperiksa pada setiap permintaan akses berkas adalah bilangan UID (user identifier) untuk pengguna dan GID (group identifier) untuk grup. Nama seperti z atau root hanyalah label yang mudah dibaca manusia, sedangkan pemetaan dari nama ke bilangan inilah yang disimpan sistem di /etc/passwd.
Perintah id menampilkan identitas proses yang menjalankannya.
# menampilkan identitas pengguna yang sedang aktif
iduid=1001(z) gid=1001(z) groups=1001(z)Bilangan pertama adalah UID, diikuti GID utama (primary group), lalu daftar grup pelengkap (supplementary group). Pada lingkungan latihan ini, pengguna z hanya tergabung dalam satu grup, yaitu grup z yang dibuat otomatis sebagai grup utamanya. Rincian dapat diambil satu per satu dengan opsi id -u dan id -g, sedangkan groups meringkas keanggotaan grup menjadi daftar nama. Pemetaan nama ke bilangan ini juga menjelaskan perilaku chown pada topik chmod dan chown. Metadata berkas menyimpan UID dan bukan nama, sehingga mengganti nama pengguna tidak mengubah pemilik berkas-berkas lamanya.
# UID dan GID secara terpisah
id -u
id -g
# daftar nama grup
groups1001
1001
zBerkas /etc/passwd#
Berkas /etc/passwd menyimpan satu baris untuk setiap akun yang dikenal sistem, termasuk akun-akun sistem yang tidak dipakai manusia untuk masuk. Setiap baris terdiri atas tujuh kolom yang dipisahkan tanda titik dua, sehingga berkas ini mudah dibaca dengan grep, head, atau cut.
# entri untuk pengguna z
grep '^z:' /etc/passwdz:x:1001:1001::/home/kal:/bin/bashBaris di atas terbaca sebagai berikut.
| Kolom | Nilai | Arti |
|---|---|---|
| 1 | z | Nama pengguna (nama login) |
| 2 | x | Tanda bahwa kata sandi disimpan di /etc/shadow |
| 3 | 1001 | UID |
| 4 | 1001 | GID utama |
| 5 | (kosong) | Kolom keterangan (GECOS), sering diisi nama lengkap |
| 6 | /home/kal | Direktori rumah (home directory) |
| 7 | /bin/bash | Shell login pengguna |
# tiga entri pertama, semuanya akun sistem
head -n 3 /etc/passwd
# menghitung jumlah entri di berkas ini
wc -l /etc/passwdroot: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
22 /etc/passwdEntri root dengan UID 0 adalah superuser yang tidak terikat pemeriksaan izin biasa. Akun seperti daemon dan bin dibuat untuk menjalankan layanan dengan identitas terpisah, sehingga satu layanan yang berhasil disusupi tidak otomatis memperoleh hak root. Nilai /usr/sbin/nologin pada kolom shell menyatakan bahwa akun tersebut tidak dapat dipakai untuk masuk secara interaktif.
Berkas /etc/group#
Berkas /etc/group menyimpan definisi grup dan keanggotaannya dengan format empat kolom yang juga dipisahkan tanda titik dua. Grup adalah mekanisme pemberian izin kolektif, yaitu cara memberi akses yang sama kepada sekumpulan pengguna sekaligus tanpa menyunting izin satu per satu.
# tiga grup sistem pertama
head -n 3 /etc/group
# grup sudo, grup users, dan grup milik pengguna z
grep -E '^(sudo|users|z):' /etc/group
wc -l /etc/grouproot:x:0:
daemon:x:1:
bin:x:2:
sudo:x:27:
users:x:100:
z:x:1001:
43 /etc/group| Kolom | Contoh (sudo:x:27:) | Arti |
|---|---|---|
| 1 | sudo | Nama grup |
| 2 | x | Kolom kata sandi grup, praktisnya tidak dipakai lagi |
| 3 | 27 | GID |
| 4 | (kosong) | Daftar anggota tambahan, dipisahkan koma |
Kolom keempat memuat anggota tambahan, yaitu pengguna yang menjadikan grup tersebut sebagai grup pelengkap. Entri sudo kosong pada sistem latihan ini karena belum ada pengguna yang diberi hak administrasi. Grup z juga kosong karena keanggotaan grup utama tidak dicatat di kolom anggota, melainkan di kolom GID pada /etc/passwd. Dalam praktiknya, grup menjadi cara mendelegasikan akses kolektif, misalnya memberi izin membaca satu folder kerja kepada seluruh anggota grup. Mekanisme pemeriksaan izinnya dibahas pada topik model izin di modul ini.
Perlindungan berkas /etc/shadow#
Kata sandi tidak pernah disimpan di /etc/passwd. Kolom kedua yang berisi x hanyalah penanda bahwa hash kata sandi (password hash) dipindahkan ke /etc/shadow, berkas yang izinnya jauh lebih ketat. Pemisahan ini penting karena /etc/passwd harus bisa dibaca semua pengguna agar perintah seperti ls -l dapat menampilkan nama pemilik berkas, sedangkan hash kata sandi tidak boleh terbuka untuk dicoba dipecahkan.
Entri pada /etc/shadow menyimpan hash beserta penanda algoritmanya, misalnya awalan $y$ untuk yescrypt pada Debian modern. Entri tersebut juga memuat kolom penuaan kata sandi, seperti tanggal terakhir diubah serta masa berlaku minimum dan maksimum. Kolom-kolom itu dikelola perintah passwd dan chage, bukan disunting manual.
# percobaan membaca /etc/shadow sebagai pengguna biasa
cat /etc/shadowcat: /etc/shadow: Permission deniedPesan error di atas adalah perilaku yang benar. Mode /etc/shadow adalah 640 dengan pemilik root dan grup shadow, sehingga hanya root dan anggota grup shadow yang boleh membacanya. Mekanisme pemeriksaan yang menghasilkan penolakan tersebut dibahas pada topik model izin di modul ini.
Membuat pengguna dan grup baru#
Pembuatan akun adalah operasi administratif yang menulis ke /etc/passwd, /etc/shadow, dan /etc/group, serta membuat direktori rumah. Karena berkas-berkas itu dimiliki root, perintahnya wajib dijalankan dengan sudo. Perintah bawaan untuk menambah akun pada Debian dan Ubuntu adalah useradd, sedangkan adduser menyediakan antarmuka interaktif di atasnya.
# tidak-dijalankan
# pembuatan pengguna baru membutuhkan hak root, tidak tersedia di sandbox
sudo useradd -m -s /bin/bash budi
# menetapkan kata sandi untuk budi
sudo passwd budi
# memeriksa hasilnya
id budiOpsi -m memerintahkan pembuatan direktori rumah, dan opsi -s menetapkan shell login. Keduanya lazim dipakai bersama untuk akun manusia. adduser meminta hal yang sama lewat pertanyaan interaktif seperti nama lengkap dan kata sandi, sehingga lebih nyaman dipakai secara manual dan kurang cocok untuk skrip.
Penghapusan akun memakai userdel dengan -r agar direktori rumah ikut dihapus, perubahan atribut akun memakai usermod, dan pembuatan grup murni memakai groupadd. Semua perintah tersebut menjaga konsistensi antarberkas, sehingga pembuatan akun dengan cara menyunting /etc/passwd secara manual tidak pernah disarankan. Satu kesalahan ketik di berkas itu dapat membuat seluruh proses login gagal.
Kesalahan umum#
- Menyunting
/etc/passwdatau/etc/groupdengan editor teks. Kesalahan sintaks pada berkas ini dapat membuat proses login gagal, dan perbaikannya sulit karena sistem menolak masuk. Gunakanuseradd,usermod, dangroupaddyang memeriksa konsistensi sebelum menulis. - Mengira kolom
xpada/etc/passwdadalah kata sandi terenkripsi. Kolom itu hanya penanda lokasi hash di/etc/shadow. - Memakai
grep z /etc/passwdtanpa jangkar (anchor). Pola tanpa jangkar mencocokkan hurufzdi mana pun, misalnya pada shell/bin/zsh, sehingga hasilnya bisa memuat entri yang tidak relevan. Gunakan pola berjangkar sepertigrep '^z:' /etc/passwd. - Menghapus akun tanpa menyadari berkas yatimnya.
userdel -rmenghapus direktori rumah, tetapi berkas milik pengguna yang tersebar di luar direktori rumah tetap ada. Pada berkas-berkas itu,ls -lmenampilkan angka UID sebagai pemilik karena nama penggunanya sudah tidak terdaftar di/etc/passwd.
Ringkasan#
- Linux memeriksa UID dan GID, bukan nama pengguna. Pemetaan nama ke bilangan disimpan di
/etc/passwddan/etc/group. /etc/passwdmemuat tujuh kolom per akun, yaitu nama, penanda/etc/shadow, UID, GID utama, keterangan, direktori rumah, dan shell login./etc/groupmemuat nama grup, GID, dan anggota tambahan. Keanggotaan grup utama tidak tercantum di kolom anggota, melainkan di kolom GID/etc/passwd.- Pembuatan dan pengubahan akun hanya boleh melalui perintah administratif seperti
useradd,usermod, dangroupaddyang dijalankan dengan hak root.
Referensi#
- passwd(5) — Linux man-pages project — Format berkas /etc/passwd beserta arti tiap kolomnya.
- group(5) — Linux man-pages project — Format berkas /etc/group dan penanganan keanggotaan grup.
- useradd(8) — Ubuntu manpages — Opsi -m, -s, dan perilaku pembuatan akun pada sistem Debian/Ubuntu.