Pengguna dan Grup

Model pengguna dan grup Linux serta berkas /etc/passwd dan /etc/group.

Daftar isi

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.

bash
# menampilkan identitas pengguna yang sedang aktif
id
text Keluaran
uid=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.

bash
# UID dan GID secara terpisah
id -u
id -g
# daftar nama grup
groups
text Keluaran
1001
1001
z

Berkas /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.

bash
# entri untuk pengguna z
grep '^z:' /etc/passwd
text Keluaran
z:x:1001:1001::/home/kal:/bin/bash

Baris di atas terbaca sebagai berikut.

KolomNilaiArti
1zNama pengguna (nama login)
2xTanda bahwa kata sandi disimpan di /etc/shadow
31001UID
41001GID utama
5(kosong)Kolom keterangan (GECOS), sering diisi nama lengkap
6/home/kalDirektori rumah (home directory)
7/bin/bashShell login pengguna
bash
# tiga entri pertama, semuanya akun sistem
head -n 3 /etc/passwd
# menghitung jumlah entri di berkas ini
wc -l /etc/passwd
text Keluaran
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
22 /etc/passwd

Entri 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.

bash
# 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/group
text Keluaran
root:x:0:
daemon:x:1:
bin:x:2:
sudo:x:27:
users:x:100:
z:x:1001:
43 /etc/group
KolomContoh (sudo:x:27:)Arti
1sudoNama grup
2xKolom kata sandi grup, praktisnya tidak dipakai lagi
327GID
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.

bash
# percobaan membaca /etc/shadow sebagai pengguna biasa
cat /etc/shadow
text Keluaran
cat: /etc/shadow: Permission denied

Pesan 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.

bash
# 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 budi

Opsi -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/passwd atau /etc/group dengan editor teks. Kesalahan sintaks pada berkas ini dapat membuat proses login gagal, dan perbaikannya sulit karena sistem menolak masuk. Gunakan useradd, usermod, dan groupadd yang memeriksa konsistensi sebelum menulis.
  • Mengira kolom x pada /etc/passwd adalah kata sandi terenkripsi. Kolom itu hanya penanda lokasi hash di /etc/shadow.
  • Memakai grep z /etc/passwd tanpa jangkar (anchor). Pola tanpa jangkar mencocokkan huruf z di mana pun, misalnya pada shell /bin/zsh, sehingga hasilnya bisa memuat entri yang tidak relevan. Gunakan pola berjangkar seperti grep '^z:' /etc/passwd.
  • Menghapus akun tanpa menyadari berkas yatimnya. userdel -r menghapus direktori rumah, tetapi berkas milik pengguna yang tersebar di luar direktori rumah tetap ada. Pada berkas-berkas itu, ls -l menampilkan 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/passwd dan /etc/group.
  • /etc/passwd memuat tujuh kolom per akun, yaitu nama, penanda /etc/shadow, UID, GID utama, keterangan, direktori rumah, dan shell login.
  • /etc/group memuat 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, dan groupadd yang dijalankan dengan hak root.

Referensi#