Di server, pertanyaan "siapa kamu" tidak dijawab dengan nama, tapi dengan angka. Dan pertanyaan "boleh apa" tidak dijawab dengan jabatan, tapi dengan baris izin yang ditulis di sebuah file. Artikel ini membongkar dua hal itu: identitas dan kewenangan.
Banyak siswa baru belajar Linux menganggap tiga hal ini sama: membuat user, memasukkan ke group, dan memberi sudo. Padahal ketiganya lapis berbeda, dan hampir semua masalah izin di server nyata lahir dari mencampur ketiganya.
π― Tujuan
Setelah membaca dan mempraktikkan artikel ini, kamu bisa:
- menjelaskan beda user, group, dan sudo tanpa menyamakannya;
- membaca isi
/etc/passwd,/etc/shadow, dan/etc/grouplalu tahu field mana yang penting; - membedakan group primer dan group tambahan serta kapan bedanya berakibat nyata;
- menulis aturan
sudoersyang sempit, bukan "kasih root semua"; - membuktikan izin benar-benar berlaku, bukan cuma terlihat rapi di layar.
π Konteks nyata
Bayangkan sekolah. Setiap siswa punya kartu pelajar berisi nama dan nomor induk. Nama boleh kembar, nomor induk tidak. Guru tidak menghafal nama saat memeriksa izin masuk lab β yang diperiksa nomornya.
Group itu seperti rombel. Daripada memberi kunci lab ke 32 siswa satu per satu, kamu beri kunci ke rombel "XII TKJ 1". Ada siswa baru? Cukup masukkan ke rombel, kunci tidak perlu diubah satu-satu.
sudo itu seperti surat izin kegiatan dari kepala sekolah. Isinya bukan "siswa ini boleh jadi kepala sekolah", tapi "siswa ini boleh meminjam proyektor, hanya di lab, hanya jam 08.00β12.00". Dibaca baris per baris, dan yang dipakai adalah baris terakhir yang cocok.
Tiga benda itu terpisah. Kartu pelajar tidak otomatis jadi surat izin. Masuk rombel tidak otomatis boleh masuk lab. Dan surat izin tidak mengubah kamu jadi kepala sekolah.
- π‘ Tips: Saat menghadapi masalah izin, tanya dulu: ini urusan identitas, keanggotaan, atau kewenangan? Jawabannya langsung menunjukkan file mana yang harus dibuka.
π§ Konsep singkat
πΉ Tiga lapis yang sering tertukar
| Lapis | Pertanyaan | Disimpan di |
|---|---|---|
| Identitas | "Siapa kamu?" | /etc/passwd, /etc/shadow
|
| Keanggotaan | "Kamu satu tim dengan siapa?" | /etc/group, /etc/gshadow
|
| Kewenangan | "Kamu boleh melakukan apa?" | /etc/sudoers, /etc/sudoers.d/
|
Menambah user tidak otomatis memberi sudo. Memasukkan user ke group tidak otomatis membuatnya bisa login. Memberi sudo tidak membuatnya jadi root permanen β hanya untuk perintah yang disebut.
- π₯ Kasus nyata: Sebuah SMK memakai satu akun bernama
adminuntuk semua guru dan teknisi lab. Password-nya ditempel di monitor. Suatu hari folder praktik terhapus dan tidak ada yang bisa ditunjuk, karena di log semua tercatat sebagaiadmin. Perbaikan yang diambil bukan ganti password, tapi membuat akun per orang plus grouplab-tkj.
πΉ Nama itu cuma label, kernel memakai angka
Sistem tidak menyimpan "budi" di dalam izin file. Yang disimpan adalah UID (user ID) dan GID (group ID) berupa angka. Nama hanya diterjemahkan saat ditampilkan.
$ id
uid=1000(budi) gid=1000(budi) groups=1000(budi),27(sudo)
$ ls -n /home
drwxr-x--- 2 1000 1000 4096 Nov 4 08:00 budi
Perintah ls -n menampilkan angka, bukan nama. Ini trik penting saat menemukan file "berpemilik angka" β biasanya sisa user yang sudah dihapus tapi filenya tertinggal.
- π Angka penting: Di Debian, UID 0 adalah root. UID 1β999 dipakai akun sistem (layanan), UID 1000 ke atas untuk manusia. Batas ini diatur di
/etc/login.defslewatUID_MIN,UID_MAX,SYS_UID_MIN, danSYS_UID_MAX.
Cek cepatnya:
grep -E '^(UID|GID|SYS_UID|SYS_GID)_(MIN|MAX)' /etc/login.defs
awk -F: '$3==0 {print "UID 0: " $1}' /etc/passwd
Kalau perintah kedua mengeluarkan lebih dari satu nama, kamu sedang punya pintu belakang setara root. Itu temuan serius, bukan keanehan.
πΉ Isi /etc/passwd dan /etc/shadow
/etc/passwd boleh dibaca semua orang karena isinya bukan rahasia. Ada 7 field dipisah titik dua:
| Field | Isi | Contoh |
|---|---|---|
| 1 | Nama login | budi
|
| 2 | Placeholder password | x
|
| 3 | UID | 1000
|
| 4 | GID primer | 1000
|
Tiga field sisanya: komentar (nama lengkap), home directory, dan shell login. Shell /usr/sbin/nologin berarti akun itu tidak boleh masuk interaktif β pola umum untuk akun layanan.
Password aslinya pindah ke /etc/shadow yang hanya bisa dibaca root. File ini punya 9 field, tapi yang perlu kamu hafal cuma empat:
| Posisi | Arti | Nilai lazim |
|---|---|---|
| 2 | Hash password | $y$... (yescrypt)
|
| 3 | Hari terakhir ganti password | hari sejak 1 Jan 1970 |
| 5 | Maksimum umur password | 99999 = tak pernah
|
| 8 | Akun kedaluwarsa | kosong = tidak pernah |
- β οΈ Hati-hati: Tanda seru (
!) di awal field password berarti akun terkunci.useraddtanpa opsi password menghasilkan akun seperti ini: sudah ada, tapi belum bisa dipakai login. Ini bukan bug, ini pengaman bawaan.
πΉ Group primer vs group tambahan
Satu user punya satu group primer dan boleh punya banyak group tambahan. Bedanya bukan teori:
- Group primer menentukan group pemilik file baru yang kamu buat.
- Group tambahan menentukan file dan layanan mana yang boleh kamu akses.
id -gn budi # group primer
id -Gn budi # semua group, termasuk tambahan
getent group lab-tkj # siapa saja anggota group ini
Saat membuat user, useradd biasanya membuat group dengan nama sama sebagai primer (diatur USERGROUPS_ENAB di /etc/login.defs). Artinya file baru milik budi biasanya bergroup budi, bukan lab-tkj.
- π₯ Kasus nyata: Seorang teknisi menambahkan akun layanan ke group
dockerdenganusermod -G docker svc-app. Tanpa-a, daftar group tambahan diganti, bukan ditambah. Akun itu kehilangan akses ke folder log dan backup. Aplikasi tetap jalan, tapi backup malam gagal diam-diam selama tiga hari. Satu huruf-ayang tertinggal.
Aturan hafalan: kalau menambah group tambahan, selalu usermod -aG namagroup user. Kalau lupa -a, kamu sedang menulis ulang seluruh daftar.
πΉ sudo dibaca sebagai kalimat
Baris sudoers punya pola tetap: siapa di mana = (sebagai siapa) apa.
siswa01 ALL = (root) /usr/bin/systemctl status nginx
%lab-tkj ALL = (root) NOPASSWD: /usr/bin/systemctl restart nginx
Bacanya: "user siswa01 di semua host boleh menjalankan systemctl status nginx sebagai root". Baris kedua memakai awalan % yang berarti group, bukan user.
Tiga hal yang membuat sudoers berbeda dari file konfigurasi biasa:
- Baris terakhir yang menang. Kalau dua baris cocok, yang dipakai bukan yang paling spesifik, tapi yang terakhir dibaca. Ini sumber "kok tiba-tiba boleh semua".
- Urutan file menentukan.
@includedir /etc/sudoers.dmembaca file dalam urutan abjad, dan nama file yang mengandung titik atau diakhiri~dilewati. Jadiadmin.web.conftidak pernah dibaca. - Salah sintaks bisa mengunci semua orang. Karena itu file ini diedit dengan
visudo, bukan editor biasa.
- π Angka penting: Mode bawaan
/etc/sudoersadalah0440milikroot:root. File yang bisa ditulis orang lain ditolak sudo. Setelah login, sudo menyimpan izin selama 15 menit per terminal (timestamp_timeout) β cukup untuk kerja, cukup singkat untuk tidak jadi pintu terbuka.
- π‘ Tips: Selalu pakai nomor di depan nama file sudoers, misalnya
10-lab-tkj,20-piket. Urutan abjad jadi urutan yang kamu niatkan, bukan tebakan.
πΉ sudo dan su bukan hal yang sama
su - meminta password root dan memberi shell root penuh. sudo meminta password kamu sendiri dan hanya memberi perintah yang diizinkan. Artinya: dengan sudo, root tidak perlu membagikan passwordnya, dan setiap tindakan tercatat atas nama pelakunya.
Itu sebabnya di server kerja, su - sering dinonaktifkan untuk staf, sementara sudo dibiarkan terbuka selebar yang perlu saja.
π§© Istilah penting
| Istilah | Arti sederhana |
|---|---|
| UID / GID | Nomor identitas user dan group; inilah yang dipakai kernel |
| Group primer | Group utama user, menentukan group file baru |
| Group tambahan | Group lain yang diikuti, untuk akses sumber daya |
/etc/skel |
Cetakan isi home baru (mis. .bashrc)
|
login.defs |
Aturan bawaan pembuatan akun: rentang UID, umur password |
| sudoers | File kebijakan siapa boleh menjalankan apa |
| visudo | Editor khusus sudoers yang memeriksa sintaks sebelum menyimpan |
| NOPASSWD | Tag agar perintah tertentu tidak minta password |
passwd -S |
Status akun: P password aktif, L terkunci, NP tanpa password
|
chage |
Alat mengatur masa berlaku akun dan password |
π§ Praktik: identitas, group, dan izin sempit
Praktik ini aman dilakukan di VM lab Debian 12. Jangan dijalankan di server produksi, karena kita akan sengaja merusak beberapa hal.
πΉ Langkah 1: catat keadaan awal
id
getent passwd | tail -5
grep -E '^(UID|GID)_(MIN|MAX)' /etc/login.defs
ls -l /etc/shadow /etc/sudoers
Perhatikan dua hal: rentang UID di mesinmu, dan mode file rahasia. Kalau /etc/shadow bisa dibaca user biasa, itu masalah besar sebelum kamu menambah user apa pun.
πΉ Langkah 2: buat group lalu user
sudo groupadd lab-tkj
sudo useradd -m -s /bin/bash -G lab-tkj -c "Siswa Lab TKJ" siswa01
sudo passwd siswa01
sudo passwd -S siswa01
Sebelum passwd dijalankan, status akun adalah L (terkunci). Setelah password diisi, berubah jadi P. Coba juga buat satu akun tanpa passwd dan bandingkan β kamu akan melihat sendiri kenapa "user sudah dibuat" belum berarti "user bisa login".
πΉ Langkah 3: buktikan identitas itu angka
id siswa01
getent passwd siswa01
sudo ls -ln /home
Cocokkan UID di id dengan angka di ls -ln. Kalau nanti kamu menghapus user dan membuat user baru, UID lama bisa dipakai ulang β dan user baru mewarisi file lama. Ini alasan userdel -r lebih aman daripada userdel saja.
πΉ Langkah 4: bedakan group primer dan tambahan
sudo -u siswa01 bash -c 'id -gn; id -Gn'
sudo -u siswa01 touch /home/siswa01/uji.txt
ls -l /home/siswa01/uji.txt
Hasilnya hampir pasti mengejutkan: group file bukan lab-tkj, melainkan siswa01. Karena useradd membuat group senama sebagai group primer, dan group primer itulah yang menempel ke file baru. Inilah bukti bahwa "sudah masuk group" dan "file baru ikut group itu" adalah dua hal terpisah.
πΉ Langkah 5: buat folder bersama
sudo mkdir -p /srv/lab-tkj
sudo chown root:lab-tkj /srv/lab-tkj
sudo chmod 2770 /srv/lab-tkj
sudo -u siswa01 touch /srv/lab-tkj/coba.txt
ls -ld /srv/lab-tkj
Angka 2 di depan 2770 adalah setgid: file baru di dalamnya otomatis ikut group folder, bukan group pribadi pembuatnya. Untuk folder kerja bersama, ini yang membuat izin tidak berantakan.
πΉ Langkah 6: beri sudo sempit, bukan root
sudo visudo -f /etc/sudoers.d/10-lab-tkj
Isi dengan:
Cmnd_Alias LAB_STATUS = /usr/bin/systemctl status nginx, /usr/bin/journalctl -u nginx
%lab-tkj ALL = (root) LAB_STATUS
siswa01 ALL = (root) NOPASSWD: /usr/bin/systemctl restart nginx
Lalu periksa:
sudo visudo -c
ls -l /etc/sudoers.d/10-lab-tkj
visudo -c harus menjawab parsed OK. Mode file harus 0440. Kalau bukan, sudo akan menolak membacanya.
πΉ Langkah 7: uji dari sisi user, bukan dari root
sudo -u siswa01 -i
sudo -l
sudo systemctl status nginx
sudo cat /etc/shadow
exit
Yang diharapkan: sudo -l menampilkan dua baris izin, status jalan, dan cat /etc/shadow ditolak dengan pesan Sorry, user siswa01 is not allowed to execute.... Kalau kamu menguji dari root, semuanya akan terlihat boleh β dan pengujiannya tidak berarti apa-apa.
πΉ Langkah 8: sengaja merusak, lalu pahami pesannya
sudo mv /etc/sudoers.d/10-lab-tkj /etc/sudoers.d/10-lab-tkj.conf
sudo -u siswa01 sudo -l
sudo mv /etc/sudoers.d/10-lab-tkj.conf /etc/sudoers.d/10-lab-tkj
Setelah diganti nama menjadi .conf, isinya masih benar, tapi tidak dibaca. Gejalanya persis seperti "user belum diberi sudo". Ini kejadian nyata, bukan skenario karangan.
- π§ͺ Uji cepat: Setiap kali selesai mengubah izin, jalankan
sudo -l -U namauserdari akun admin. Kalau daftar yang muncul tidak sesuai niatmu, jangan lanjut β perbaiki dulu.
πΉ Langkah 9: bersih-bersih dan audit sisa
sudo userdel -r siswa01
sudo groupdel lab-tkj
awk -F: '$3>=1000 && $3<65534 {print $1, $3}' /etc/passwd
sudo find / -xdev -uid 1001 -ls 2>/dev/null
Kalau perintah terakhir masih menemukan file, berarti ada data yang dulu milik user itu. Inilah yang dimaksud "hapus user bukan hanya hapus baris di passwd".
π Dipakai di dunia kerja
- Sekolah/lab komputer: satu akun per siswa atau per kelas, plus group
lab-tkjuntuk folder bersama. Tanpa ini, nilai praktik bisa hilang dan tidak ada bukti siapa yang menghapus. - Kantor dengan server file: group per divisi (
keuangan,gudang) jauh lebih mudah dirawat daripada memberi izin per orang. Karyawan pindah divisi cukup diganti group-nya. - Penyedia layanan hosting: setiap aplikasi punya user sistem sendiri, tanpa shell login. Kalau satu aplikasi dibobol, penyerang tidak otomatis bisa membaca data aplikasi lain.
- Rumah sakit dan instansi: pemisahan akses bukan soal nyaman, tapi kewajiban audit β siapa membuka data pasien harus bisa ditelusuri namanya.
- Tim DevOps: sudo sempit untuk perintah tertentu (restart layanan, baca log) lebih disukai daripada memberi root penuh ke semua anggota tim.
- Industri dan lab: akun layanan dipakai mesin, akun manusia dipakai orang. Mencampur keduanya membuat rotasi password dan audit jadi mimpi buruk.
β Verifikasi
| Yang diperiksa | Perintah | Hasil sehat |
|---|---|---|
| Identitas user | id siswa01 |
UID/GID dan group sesuai rencana |
| Status akun | sudo passwd -S siswa01 |
P (aktif), bukan L
|
| Keanggotaan | getent group lab-tkj |
nama user muncul di daftar |
| Isi sudoers | sudo visudo -c |
parsed OK
|
| Izin efektif | sudo -l -U siswa01 |
hanya perintah yang diniatkan |
| Jejak pemakaian | sudo journalctl -t sudo -n 20 |
ada catatan perintah dan user |
| Sisa kepemilikan | sudo find / -xdev -uid 1001 |
kosong setelah user dihapus |
- β οΈ Hati-hati:
sudo -ltanpa-Uhanya menampilkan izin akun yang sedang dipakai. Saat memeriksa user lain, wajib pakai-U, dan akunmu harus punya hak untuk itu.
β οΈ Kesalahan umum & troubleshooting
| Gejala | Penyebab | Perbaikan |
|---|---|---|
user is not in the sudoers file |
Belum ada baris izin, atau file di sudoers.d tidak terbaca |
Cek nama file (tanpa titik), lalu sudo -l -U
|
parse error in /etc/sudoers near line N |
Salah sintaks, sering karena koma atau tanda kurung | Perbaiki lewat visudo, cek dengan visudo -c
|
Izin tidak berubah setelah usermod -aG |
Sesi lama masih memakai daftar group lama | Logout lalu login lagi, atau buka sesi baru |
userdel: user is currently used by process |
Masih ada proses milik user itu | pkill -u, lalu ulangi userdel -r
|
| File baru tidak ikut group folder | setgid belum dipasang di folder | chmod 2770 pada folder bersama
|
| Semua perintah tiba-tiba boleh | Ada baris ALL=(ALL) ALL di urutan terakhir |
Hapus baris itu, cek urutan nama file |
passwd: Authentication token manipulation error |
/etc/shadow terkunci atau penuh |
Cek ls -l /etc/shadow dan ruang disk
|
- β οΈ Hati-hati: Pesan "not in the sudoers file" hampir selalu disalahartikan sebagai "user belum masuk group sudo". Padahal group
sudohanya berguna kalau ada baris%sudo ALL=(ALL:ALL) ALLdi sudoers. Dua hal berbeda, gejala sama.
π Catatan keamanan & etika
- sudoers adalah kunci seluruh server. Sebelum menyimpan perubahan, pastikan kamu masih punya sesi root lain yang terbuka. Salah sintaks bisa membuat semua admin terkunci di luar.
- Jangan bagi root lewat pintu belakang. Akun dengan UID 0 selain root, atau baris
NOPASSWD: ALL, membuat seluruh pembatasan tidak ada artinya. - Jangan taruh password di baris perintah.
useradd -pdanecho sandi | passwd --stdinmeninggalkan jejak di riwayat shell dan daftar proses. Pakaipasswdinteraktif. - Periksa izin file rahasia.
/etc/shadowharus640milikroot:shadow. Kalau dunia bisa membaca, hash password bisa diambil dan dipecahkan offline. - Hapus dengan benar.
userdel -rplus auditfind / -uid. User yang dihapus tapi filenya tertinggal akan "diwarisi" user baru yang kebetulan dapat UID sama. - Etika di lab bersama.
sudomencatat perintahmu. Membaca folder teman, mengubah nilai, atau memakai akun guru untuk iseng bukan "sekadar coba-coba" β itu pelanggaran, dan jejaknya ada.
π Kesimpulan
User adalah identitas berupa angka, group adalah cara membagi izin ke banyak orang sekaligus, dan sudo adalah surat izin yang dibaca baris per baris β dengan baris terakhir yang menang.
Kalau kamu hanya mengingat satu hal dari artikel ini, ingat urutannya: buat identitas dulu, atur keanggotaan, baru beri kewenangan sekecil yang cukup. Tiga langkah itu tidak boleh dibalik, dan tidak boleh digabung jadi satu perintah asal jalan.
Langkah berikutnya: buka /etc/sudoers di VM lab-mu dengan visudo, baca dari atas ke bawah, dan coba jelaskan setiap baris dengan kalimat "siapa di mana = sebagai siapa, apa". Kalau ada baris yang tidak bisa kamu jelaskan, itu baris yang harus kamu rapikan lebih dulu.
π Materi terkait
- Linux : Manajemen User Dasar β perintah dasar membuat dan mengubah akun
- Menambahkan User Baru di Debian β langkah praktis
adduserdi Debian - Linux : Permission File dan Folder β lanjutan langsung dari group: izin baca, tulis, eksekusi
- Linux : Mengamankan SSH Server dengan Port Custom β membatasi siapa yang boleh masuk sebelum urusan sudo
- Mengijinkan User Tertentu Remote SSH β mengatur siapa saja yang boleh login jarak jauh
- Linux : Membuat Service Sendiri dengan systemd β akun layanan yang dipakai unit systemd
- Linux : Manajemen Paket dan Repositori Debian β karena memasang paket butuh sudo yang benar
π Referensi
sudoers(5), Debian bookworm β manpages.debian.orguseradd(8), Debian bookworm β manpages.debian.orgshadow(5), Debian bookworm β manpages.debian.orgpasswd(5),group(5), danlogin.defs(5), proyek shadow-utils- Debian Administrator's Handbook, bab tentang manajemen user dan hak akses