Linux : Manajemen User, Group, dan sudo

Revision as of 07:01, 4 November 2026 by Maintenance script (talk | contribs) (Tambah kategori TKJ/Linux/Server/Sudo)

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/group lalu tahu field mana yang penting;
  • membedakan group primer dan group tambahan serta kapan bedanya berakibat nyata;
  • menulis aturan sudoers yang 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 admin untuk 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 sebagai admin. Perbaikan yang diambil bukan ganti password, tapi membuat akun per orang plus group lab-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.defs lewat UID_MIN, UID_MAX, SYS_UID_MIN, dan SYS_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. useradd tanpa 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 docker dengan usermod -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 -a yang 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:

  1. 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".
  2. Urutan file menentukan. @includedir /etc/sudoers.d membaca file dalam urutan abjad, dan nama file yang mengandung titik atau diakhiri ~ dilewati. Jadi admin.web.conf tidak pernah dibaca.
  3. Salah sintaks bisa mengunci semua orang. Karena itu file ini diedit dengan visudo, bukan editor biasa.
  • πŸ“Š Angka penting: Mode bawaan /etc/sudoers adalah 0440 milik root: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 namauser dari 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-tkj untuk 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 -l tanpa -U hanya 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 sudo hanya berguna kalau ada baris %sudo ALL=(ALL:ALL) ALL di 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 -p dan echo sandi | passwd --stdin meninggalkan jejak di riwayat shell dan daftar proses. Pakai passwd interaktif.
  • Periksa izin file rahasia. /etc/shadow harus 640 milik root:shadow. Kalau dunia bisa membaca, hash password bisa diambil dan dipecahkan offline.
  • Hapus dengan benar. userdel -r plus audit find / -uid. User yang dihapus tapi filenya tertinggal akan "diwarisi" user baru yang kebetulan dapat UID sama.
  • Etika di lab bersama. sudo mencatat 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

πŸ“š Referensi

  • sudoers(5), Debian bookworm β€” manpages.debian.org
  • useradd(8), Debian bookworm β€” manpages.debian.org
  • shadow(5), Debian bookworm β€” manpages.debian.org
  • passwd(5), group(5), dan login.defs(5), proyek shadow-utils
  • Debian Administrator's Handbook, bab tentang manajemen user dan hak akses