Memahami konsep multi-user dan superuser, mengelola akun pengguna dan grup dengan useradd, usermod, userdel, dan passwd, membaca isi /etc/passwd, /etc/shadow, dan /etc/group, sampai membangun user deploy dengan hak terbatas dan terkunci aman.

Setelah di episode 7 sebelumnya kita membahas symlink, arsip, dan kompresi — bagaimana melindungi data dengan backup — pada episode kali ini kita akan beralih dari melindungi data ke melindungi akses: pengelolaan user & group.
Kenapa topik ini penting? Linux adalah sistem multi-user sejak lahir. Satu server melayani banyak pengguna — manusia, proses, service, bahkan aplikasi — dan setiap entitas ini harus memiliki identitas serta hak akses yang jelas. Bayangkan server produksi tanpa manajemen user: semua orang masuk sebagai root, tidak ada jejak siapa melakukan apa, dan satu kesalahan bisa menghancurkan seluruh sistem. Manajemen user adalah garis pertahanan pertama antara kalian dan bencana.
Di episode ini kita akan membahas: pertama, konsep multi-user dan superuser; kedua, perintah inti manajemen user; ketiga, perintah manajemen grup; keempat, membaca tiga file kunci /etc/passwd, /etc/shadow, dan /etc/group; kelima, studi kasus membangun user deploy yang aman.
Linux dirancang sebagai sistem multi-user: banyak pengguna bisa hidup di satu mesin secara bersamaan, masing-masing dengan identitas (UID), direktori home, dan hak akses sendiri. Ini bukan sekadar fitur — ini model keamanan. Karena setiap proses berjalan atas nama sebuah user, sistem selalu tahu siapa yang melakukan apa.
Di atas semua user berdiri root (UID 0), superuser yang punya hak tanpa batas. Root bisa membaca, menulis, dan menghapus apa pun, di mana pun. Analoginya: di sebuah gedung, setiap karyawan punya kartu akses dengan batas lantai (user biasa), sementara root adalah master key yang membuka semua pintu.
Warning
Bekerja sebagai root untuk hal-hal rutin adalah salah satu kebiasaan terburuk di Linux. Satu perintah salah — misalnya rm -rf /var saat seharusnya rm -rf /var/log — langsung menghancurkan sistem tanpa konfirmasi, karena tidak ada lapisan izin yang menahan. Praktik profesional: login sebagai user biasa, naikkan hak hanya saat dibutuhkan dengan sudo. Ini membatasi radius ledakan (blast radius) dari setiap kesalahan.
useradd vs adduser: Perbedaan DistribusiAda dua cara membuat user, dan perbedaannya bergantung pada keluarga distribusi:
sudo adduser budiadduser adalah skrip ramah yang bertanya interaktif dan sekaligus membuat home serta grup; useradd adalah utilitas level rendah yang bekerja non-interaktif — cocok untuk script. Di Ubuntu, useradd juga ada, tetapi tidak otomatis membuat home tanpa -m.
| Perintah | Fungsi |
|---|---|
useradd | Membuat user (level rendah) |
adduser | Membuat user (skrip interaktif, Debian/Ubuntu) |
usermod | Mengubah atribut user |
userdel | Menghapus user |
passwd | Mengatur/mengubah password |
id | Menampilkan UID/GID dan grup user |
su / sudo | Berpindah user / menaikkan hak |
Contoh membuat user dengan opsi penting:
sudo useradd -m -s /bin/bash -c "Budi Santoso - Developer" budi
sudo passwd budi
sudo id budiOpsi useradd | Fungsi |
|---|---|
-m | Buat direktori home (/home/budi) |
-s | Tentukan shell default (mis. /bin/bash) |
-c | Komentar/deskripsi singkat |
-G | Tambahkan ke grup tambahan |
-e | Tanggal kedaluwarsa akun (YYYY-MM-DD) |
usermodusermod mengubah user yang sudah ada. Opsi yang paling sering dipakai: -aG untuk menambahkan user ke grup tambahan.
sudo usermod -aG sudo budi
sudo usermod -aG docker budi
sudo id budiCaution
Perbedaan -G dan -aG adalah salah satu jebakan paling mahal dalam manajemen user. usermod -G docker budi menimpa seluruh daftar grup tambahan user — jika budi sebelumnya di grup sudo dan devs, keduanya hilang dan diganti hanya docker. usermod -aG (append) menambahkan ke daftar yang ada. Selalu tulis -aG, bukan -G, kecuali kalian benar-benar ingin mengganti total. Aturan emas: -a bersama -G, selalu.
userdelsudo userdel budi
sudo userdel -r budiTanpa -r, direktori home dan mailbox user tetap tertinggal — akun hilang, tapi jejaknya berserakan. Dengan -r, home dan mailbox ikut dihapus. Pikirkan baik-baik sebelum memakai -r: jika itu satu-satunya salinan data user, data akan hilang permanen.
Setiap user punya grup utama (primary group) dan bisa menjadi anggota grup tambahan (supplementary groups). Grup adalah cara paling bersih mengelola izin berbagi — alih-alih mengatur akses per-user ke puluhan file, kalian atur per-grup sekali, lalu masukkan anggota yang relevan.
| Perintah | Fungsi |
|---|---|
groupadd | Membuat grup |
groupdel | Menghapus grup |
groupmod | Mengubah atribut grup |
gpasswd -a user group | Menambahkan user ke grup |
gpasswd -d user group | Mengeluarkan user dari grup |
getent group | Menampilkan isi database grup |
sudo groupadd devs
sudo gpasswd -a budi devs
sudo gpasswd -a siti devs
sudo getent group devsdevs:x:1001:budi,sitiOutput di atas berbunyi: grup devs, password tidak dipakai (x), GID 1001, anggota budi dan siti. Sekarang satu perintah chmod (episode 9) pada direktori grup devs akan langsung mengatur akses keduanya sekaligus.
su vs sudo dan Kebijakan Passwordsu vs sudoDua cara memperoleh hak lebih tinggi — dan pilihan kalian menentukan kebiasaan keamanan sehari-hari:
su - root
sudo -lsu (switch user) berpindah identitas — kalian menjadi user target dan harus tahu passwordnya (biasanya root). sudo (superuser do) menjalankan satu perintah sebagai user lain (default root) tanpa pernah tahu password root — cukup password kalian sendiri, dan izinnya diatur per-user di file sudoers. Inilah mengapa praktik profesional hampir selalu memilih sudo:
| Aspek | su | sudo |
|---|---|---|
| Password yang diminta | Password target (mis. root) | Password user kalian sendiri |
| Izin setelah berhasil | Penuh, tanpa pembatasan | Diatur per-user/per-perintah di sudoers |
| Jejak audit | Tidak tercatat otomatis | Tercatat di log sistem |
| Rekomendasi | Sesekali, admin senior | Standar untuk kerja harian |
su - root juga berguna saat kalian memang ingin sesi penuh sebagai root (misalnya memulihkan sistem) — tetapi untuk satu-dua perintah, sudo jauh lebih aman dan bisa diaudit.
chagePassword yang tidak pernah kedaluwarsa adalah bom waktu. chage (change age) mengatur umur dan masa tenggang password:
sudo chage -M 90 -m 7 -W 14 budi
sudo chage -l budiOpsi chage | Arti |
|---|---|
-M | Maksimum hari sebelum password wajib diganti |
-m | Minimum hari sebelum password boleh diganti |
-W | Hari peringatan sebelum kedaluwarsa |
-I | Hari tenggang setelah kedaluwarsa sebelum akun dikunci |
-l | Menampilkan kebijakan umur saat ini |
Di contoh di atas, -M 90 memaksa pergantian password tiap 90 hari, -m 7 menahan penggantian cepat-cepat, dan -W 14 memperingatkan dua minggu sebelumnya. Kombinasi passwd (membuat password), chage (mengatur umurnya), dan passwd -l/-u (mengunci/membuka akun) memberi kendali penuh atas seluruh siklus hidup akun.
Note
Kebijakan password adalah keseimbangan antara keamanan dan kenyamanan. Untuk sistem yang autentikasinya berbasis SSH key (bukan password), memaksa pergantian password tiap 90 hari sering tidak relevan — kunci yang dikelola baik dan dicabut saat tak terpakai justru lebih aman. Sesuaikan kebijakan chage dengan model autentikasi yang benar-benar kalian gunakan, bukan sekadar menyalin checklist.
Semua informasi user dan grup tersimpan dalam file teks yang bisa kalian baca langsung. Ini bukan database biner yang tersembunyi — inilah filosofi "semuanya file" khas Linux.
/etc/passwd — Daftar Userroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
budi:x:1000:1000:Budi Santoso:/home/budi:/bin/bash| Field | Isi |
|---|---|
| 1 | Nama user |
| 2 | x — password sebenarnya tidak di sini, tapi di /etc/shadow |
| 3 | UID (User ID) — 0 adalah root |
| 4 | GID (Group ID) dari grup utama |
| 5 | Komentar/GECOS (nama lengkap, deskripsi) |
| 6 | Direktori home |
| 7 | Shell default — /usr/sbin/nologin berarti user tidak bisa login |
Perhatikan: password tidak pernah disimpan di sini — kolom kedua hanya x sebagai penanda. Ini jaring pengaman: /etc/passwd harus bisa dibaca semua program, jadi menyimpan hash password di dalamnya berarti membocorkannya ke siapa pun. Hash pindah ke /etc/shadow yang hanya bisa dibaca root.
/etc/shadow — Password dan Kebijakanroot:!$6$abC...hash:19501:0:99999:7:::
budi:$6$xyz...hash:19501:0:99999:7:::
siti:!:19501:0:99999:7:::| Field | Isi |
|---|---|
| 1 | Nama user |
| 2 | Hash password — ! atau * berarti akun terkunci |
| 3 | Hari terakhir password diubah (format epoch days) |
| 4 | Minimum hari sebelum password bisa diganti |
| 5 | Maksimum hari sebelum password wajib diganti |
| 6 | Hari peringatan sebelum kedaluwarsa |
| 7 | Hari tenggang setelah kedaluwarsa |
| 8 | Tanggal kedaluwarsa akun |
Tanda ! di depan hash adalah penanda penting: akun terkunci dan tidak bisa dipakai login.
/etc/group — Daftar Gruproot:x:0:
devs:x:1001:budi,siti
docker:x:999:devnullField 4 berisi anggota tambahan; anggota dengan grup tersebut sebagai grup utamanya tidak perlu dicantumkan di sini.
Tip
Trik membaca cepat: grep (dari episode 6) bekerja sempurna pada file-file ini. grep budi /etc/passwd untuk melihat baris user, cut -d: -f1 /etc/passwd untuk daftar semua username, dan awk -F: '$3 >= 1000 {print $1}' /etc/passwd untuk hanya user manusia (UID ≥ 1000) — bukan user sistem. Selalu ingat: UID < 1000 umumnya adalah akun sistem/service, bukan manusia.
Sekarang mari rangkai semua konsep dalam skenario DevOps nyata: membuat user deploy yang dipakai pipeline CI/CD untuk menyalin aplikasi ke server — dengan hak terbatas, bukan root.
Langkah 1 — buat user dengan home dan shell:
sudo useradd -m -s /bin/bash -c "Akun deploy pipeline" deploy
sudo passwd deployLangkah 2 — buat grup untuk berbagi direktori aplikasi, lalu masukkan deploy:
sudo groupadd webapps
sudo usermod -aG webapps deployLangkah 3 — jika pipeline butuh mengelola service, beri akses sudo terbatas lewat file sudoers, bukan root penuh (detail lebih dalam akan dibahas di episode hardening). Untuk sesi ini, kunci user dengan passwd -l jika pipeline memakai SSH key:
sudo passwd -l deploy
sudo passwd -u deploypasswd -l mengunci akun (menaruh ! di depan hash di /etc/shadow) sehingga login password ditolak; passwd -u membukanya kembali. Teknik ini dipakai untuk "memarkir" akun tanpa menghapusnya.
Important
Mengunci akun dengan passwd -l menolak login berbasis password, tetapi tidak memutuskan akses yang sudah berjalan — sesi SSH yang sudah aktif tetap hidup, dan login berbasis SSH key (tanpa password) biasanya masih bisa jalan tergantung konfigurasi. Untuk mencabut akses sepenuhnya, akhiri sesi yang berjalan dan revoke key-nya. Untuk akun yang tak lagi dipakai sama sekali, pertimbangkan userdel — bukan sekadar mengunci.
| Kesalahan | Gejala | Solusi |
|---|---|---|
usermod -G tanpa -a | Grup tambahan user tiba-tiba hilang | Selalu usermod -aG |
userdel tanpa -r | Home dan mailbox user tertinggal | Gunakan -r jika akun benar-benar dibuang |
| Bekerja sehari-hari sebagai root | Kesalahan kecil berdampak sistemik | Login user biasa + sudo |
Membuat user tanpa -m | Tidak ada direktori home | Tambahkan -m |
passwd -l saat sesi masih aktif | Akses tidak benar-benar terputus | Putuskan sesi + revoke key |
Mengedit /etc/shadow manual | Hash korup, akun tak bisa login | Gunakan passwd, usermod, chage |
Menaruh password di /etc/passwd | Password bocor ke semua pembaca | Selalu via passwd (masuk /etc/shadow) |
Pada episode 8 ini, kita telah membahas konsep multi-user dan bahaya root, perintah inti manajemen user (useradd, adduser, usermod, userdel, passwd), manajemen grup (groupadd, gpasswd, getent), tiga file kunci /etc/passwd, /etc/shadow, dan /etc/group, serta studi kasus membangun user deploy dengan hak terbatas dan akun yang bisa dikunci.
Inti yang harus dibawa pulang:
usermod -aG, bukan -G, untuk menambahkan grup tanpa menimpa.userdel -r untuk membersihkan home; tanpanya, jejak akun tertinggal./etc/passwd untuk identitas, /etc/shadow untuk password, /etc/group untuk keanggotaan — dan semuanya readable dengan grep/cut/awk.passwd -l mengunci akun, userdel membuangnya — pilih sesuai kebutuhan.Identitas user dan grup adalah separuh dari model keamanan; separuh lainnya adalah apa yang boleh mereka lakukan terhadap file. Di episode 9 selanjutnya, kita akan membahas File Permissions & Ownership — memahami bit permission (read, write, execute), chmod octal dan simbolik, chown, umask, hingga special bits SUID, SGID, dan sticky bit, dan praktik mengamankan SSH key serta direktori berbagi. Pastikan tetap semangat, karena ini adalah inti keamanan yang akan mewarnai sisa karier kalian di Linux!