Cara Cek User Linux di Terminal: Panduan Lengkap

Muhamad Adin ArifinKamis, 25 Juni 2026 | 18:37 WIB
Perintah Cek User Linux Terminal Dari who sampai getent
Terminal Linux menampilkan output perintah who, w, dan cat /etc/passwd untuk mengecek daftar user yang login.

Untuk mengecek daftar user di Linux melalui terminal, gunakan cat /etc/passwd atau getent passwd untuk semua user terdaftar, who dan w untuk user yang sedang login secara real-time, serta last untuk riwayat login. Untuk memfilter user manusia nyata (bukan akun service), jalankan:

awk -F: '$3 >= 1000 && $1 != "nobody" {print $1, $3, $7}' /etc/passwd

Perintah di atas hanya menampilkan user dengan UID ≥ 1000 dan shell valid — cara paling akurat membedakan user manusia dari akun sistem bawaan seperti daemon, www-data, atau systemd-network.

Cara Cek User yang Sedang Login (Real-time)

Jika pertanyaanmu adalah “siapa yang sedang online sekarang?”, tiga perintah ini menjawabnya dengan konteks berbeda:

Perintah Fungsi Spesifik Output Khas
who Daftar user yang sedang login + terminal + waktu login Nama user, tty, waktu
w Sama seperti who + apa yang sedang mereka jalankan Tambah kolom WHAT (proses aktif)
users Hanya daftar nama user (tanpa detail) Satu baris nama user

Contoh output w:

 14:22:01 up 3 days,  2:14,  2 users,  load average: 0.08, 0.03, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
admin    pts/0    192.168.1.45     14:10    0.00s  0.05s  0.00s w
dev      pts/1    10.0.0.22        09:30    2:14m  1.20s  0.02s vim app.py

Expert Delta: w membaca dari /var/run/utmp, bukan /etc/passwd. Artinya, jika file utmp korup atau user login via metode non-standar (misal tmux lama yang tidak memperbarui utmp), hasilnya bisa tidak lengkap. Selalu cross-check dengan who bila mencurigai anomali.

Cara Melihat Daftar Semua User Terdaftar di Sistem

File /etc/passwd adalah sumber kebenaran utama untuk user lokal. Setiap baris berisi 7 field yang dipisahkan tanda ::

username:x:UID:GID:GECOS:home_directory:login_shell

Contoh:

budi:x:1001:1001:Budi Santoso,,,:/home/budi:/bin/bash

Untuk menampilkan seluruhnya:

cat /etc/passwd

Namun, jangan berhenti di sini. Output mentah akan membanjirimu dengan puluhan akun sistem yang tidak relevan. Lihat bagian berikutnya untuk cara memfilternya.

Catatan penting: /etc/passwd hanya menyimpan user lokal. Jika sistem terhubung ke LDAP, Active Directory, atau SSSD, user dari direktori eksternal tidak akan muncul. Gunakan getent passwd untuk query ke semua sumber (lokal + NSS):

getent passwd

Cara Filter User Manusia Nyata (Anti-Noise)

Di server produksi khas, cat /etc/passwd bisa menghasilkan 30–50 baris, mayoritas adalah akun service (daemon, bin, sys, sshd, postgres, www-data, dll). Mencampur mereka dengan user manusia adalah kesalahan fatal saat audit keamanan.

Aturan praktis: User manusia di distro modern (Ubuntu, Debian, RHEL, AlmaLinux) memiliki UID ≥ 1000. Batas ini dikontrol oleh UID_MIN di /etc/login.defs.

Perintah filter terbaik:

awk -F: '$3 >= 1000 && $1 != "nobody" {printf "%-15s UID=%-5s HOME=%-20s SHELL=%s\n", $1, $3, $6, $7}' /etc/passwd

Cara lebih ketat — hanya user dengan shell interaktif:

awk -F: '$3 >= 1000 && $7 !~ /(nologin|false)$/ {print $1}' /etc/passwd

Perintah kedua ini membuang user yang shell-nya /usr/sbin/nologin atau /bin/false — artinya mereka tidak bisa login interaktif meski UID-nya ≥ 1000.

Trade-off: Filter UID ≥ 1000 bisa melewatkan user manusia lama di sistem warisan (legacy) yang dibuat sebelum konvensi ini distandarisasi (~2010-an). Untuk sistem tua, cek manual dengan ls /home/ sebagai verifikasi silang.

Cara Cek Detail Spesifik Satu User

Untuk melihat detail lengkap satu user (UID, GID, grup tambahan, konteks SELinux jika ada):

id budi

Output:

uid=1001(budi) gid=1001(budi) groups=1001(budi),27(sudo),1002(dev)

Untuk melihat field lengkap dari /etc/passwd milik satu user:

getent passwd budi

Miskonsepsi umum: Banyak praktisi memakai grep budi /etc/passwd. Ini berisiko — jika ada user bernama budiawan, ia juga ikut ter-match. Selalu gunakan getent passwd budi atau grep '^budi:' /etc/passwd (dengan anchor ^ dan :).

Cara Cek Riwayat Login (Siapa Pernah Masuk & Kapan)

Untuk audit dan forensik, tiga perintah ini saling melengkapi:

  • last — riwayat login sukses, dibaca dari /var/log/wtmp.
  • lastb — riwayat login gagal (butuh root), dibaca dari /var/log/btmp. Penting untuk deteksi brute-force.
  • lastlog — waktu login terakhir setiap user, dibaca dari /var/log/lastlog.

Contoh praktis:

# 10 login terakhir user budi
last budi | head -10

# 20 login gagal terakhir (indikator brute-force)
sudo lastb | head -20

# Kapan terakhir semua user login
lastlog

Batasan yang jarang disebut: File wtmp dan btmp di-rotate oleh logrotate. Di sistem yang tidak dikonfigurasi dengan benar, riwayat bisa hilang setelah beberapa minggu. Selalu verifikasi dengan ls -lh /var/log/wtmp* sebelum mengandalkan last untuk investigasi jangka panjang.

Perbedaan User Sistem vs User Manusia

Memahami perbedaan ini bukan trivia — ini fondasi hardening server.

Aspek User Sistem User Manusia
UID 1–999 (biasanya < 1000) ≥ 1000
Shell /usr/sbin/nologin atau /bin/false /bin/bash, /bin/zsh, /bin/sh
Home dir Sering tidak ada atau /nonexistent /home/username
Tujuan Menjalankan service (nginx, mysql, sshd) Login interaktif
Password Sering dikunci (! atau * di /etc/shadow) Password aktif atau SSH key

Risiko keamanan: Jika user service tiba-tiba punya shell /bin/bash dan password aktif, itu indikator kompromi. Cek rutin dengan:

awk -F: '$3 < 1000 && $7 !~ /(nologin|false|sync|halt|shutdown)$/ {print $1, $7}' /etc/passwd

Perintah ini memunculkan akun sistem yang mencurigakan karena punya shell interaktif.

Tabel Ringkasan Perintah

Kebutuhan Perintah Butuh Root?
Siapa yang login sekarang who, w, users Tidak
Siapa yang login + proses aktif w Tidak
Daftar semua user lokal cat /etc/passwd Tidak
Daftar semua user (lokal + LDAP/AD) getent passwd Tidak
Filter user manusia (UID ≥ 1000) awk -F: '$3>=1000...' Tidak
User dengan shell interaktif saja awk ... $7 !~ /nologin/ Tidak
Detail user (UID, grup) id username Tidak
Riwayat login sukses last Tidak
Riwayat login gagal lastb Ya
Login terakhir tiap user lastlog Tidak
User yang sedang saya pakai whoami, id Tidak

Edge Cases & Troubleshooting

1. who tidak menampilkan siapa pun padahal saya login.

Penyebab: file /var/run/utmp kosong atau korup. Perbaiki dengan sudo systemctl restart systemd-utmp (systemd) atau cek permission: harus rw-rw-r-- dengan owner root:utmp.

2. User muncul di /etc/passwd tapi id tidak menemukannya.

Kemungkinan: cache NSS (nscd atau systemd-resolved). Bersihkan dengan sudo nscd -i passwd atau restart service terkait.

3. last menampilkan “(crash)” atau waktu tidak masuk akal.

Artinya sistem crash atau reboot tidak bersih sebelumnya, sehingga wtmp tidak ditutup dengan benar. Ini normal setelah power loss, bukan indikasi hack.

4. User ada di /etc/passwd tapi tidak bisa login.

Cek tiga hal berurutan: (a) shell valid di /etc/passwd, (b) password tidak dikunci di /etc/shadow (baris tidak diawali ! atau *), (c) home directory ada dan permission benar.

FAQ

1. Apa perbedaan whoami, logname, dan who am i?

whoami menampilkan UID efektif (bisa berubah setelah su/sudo), logname menampilkan user login asli dari sesi awal, who am i membaca dari utmp dan hanya bekerja jika stdin terhubung ke terminal login.

2. Mengapa cat /etc/passwd menampilkan banyak user aneh seperti systemd-network?

Itu akun sistem bawaan untuk menjalankan service spesifik. Mereka tidak bisa login interaktif karena shell-nya /usr/sbin/nologin. Abaikan mereka saat mencari user manusia — gunakan filter UID ≥ 1000.

3. Bagaimana cara cek user yang terkunci (locked) di Linux?

Gunakan passwd -S username. Status L berarti locked, NP berarti no password, P berarti password aktif. Untuk cek semua user sekaligus: sudo passwd -S -a | grep ' L '.

4. Apakah getent passwd lebih baik dari cat /etc/passwd?

Ya, jika sistem terhubung ke LDAP, AD, atau NIS. getent query ke semua sumber yang dikonfigurasi di /etc/nsswitch.conf, sedangkan cat /etc/passwd hanya membaca file lokal. Untuk sistem standalone, hasilnya identik.

5. Bagaimana cara melihat user yang punya akses sudo?

Cek keanggotaan grup sudo (Debian/Ubuntu) atau wheel (RHEL/Alma): getent group sudo atau getent group wheel. Untuk konfigurasi sudoers kustom, baca /etc/sudoers dan /etc/sudoers.d/ dengan sudo visudo -c -f.

6. Mengapa last tidak menampilkan login user tertentu?

File /var/log/wtmp sudah di-rotate dan log lama terhapus, atau user login via metode yang tidak menulis ke utmp (misal cron job, service, atau SSH key tanpa pty). Cek juga apakah wtmp tidak korup dengan sudo utmpdump /var/log/wtmp.

7. Bagaimana cara cek user dengan home directory yang hilang atau rusak?

Jalankan: awk -F: '$3>=1000 && $7 !~ /nologin/ {print $1, $6}' /etc/passwd | while read u h; do [ ! -d "$h" ] && echo "MISSING: $u -> $h"; done. Perintah ini membandingkan field home di /etc/passwd dengan filesystem nyata.