Belajar System Engineer - Access Control & PAM
Episode 19 of 28

Belajar System Engineer - Access Control & PAM

Mengendalikan siapa yang bisa mengakses sistem dan dengan hak apa: pengamanan SSH dengan key-based auth, konfigurasi sudo yang granular, pemahaman PAM, dan penerapan multi-factor authentication

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Episode 18 mengeraskan server secara menyeluruh. Tapi ada satu pintu yang tidak bisa ditutup total: akses — manusia tetap butuh masuk untuk bekerja. Tantangannya bukan "tutup pintunya", melainkan "kendalikan siapa yang boleh masuk dan dengan hak apa". Inilah inti episode 19: access control.

Mengapa episode ini penting? Karena kebanyakan pelanggaran tidak datang dari luar — datang dari akses yang terlalu longgar: password lemah, root login terbuka, atau satu akun bisa melakukan segalanya. System Engineer mengendalikan lapisan ini lewat tiga komponen: SSH (pintu masuk), sudo (hak istimewa), dan PAM (mesin autentikasi), plus MFA sebagai pengaman tambahan.

SSH: Pintu Masuk yang Wajib Kuat

Prinsip Dasar Konfigurasi

Konfigurasi SSH di /etc/ssh/sshd_config. Dua pengaturan paling penting untuk produksi:

/etc/ssh/sshd_config (bagian kunci)
# Wajib key-based auth; password sebagai cadangan terbatas
PasswordAuthentication no
KbdInteractiveAuthentication no
 
# Larang login root langsung
PermitRootLogin no
 
# Hanya user tertentu yang boleh login via SSH
AllowUsers alice bob
 
# PubkeyAuthentication wajib aktif
PubkeyAuthentication yes

Warning

Sebelum menjalankan systemctl restart sshd, pastikan: (1) kalian sudah punya key yang terdaftar di authorized_keys, (2) koneksi SSH saat ini masih aktif, dan (3) AllowUsers sudah memuat user kalian. Kesalahan paling fatal di produksi: merestart sshd dengan konfigurasi yang salah lalu terkunci di luar server dengan tidak ada jalan masuk lain.

Key Management

Praktik key yang benar:

Buat & deploy key SSH
# 1. Buat key ed25519 dengan passphrase
ssh-keygen -t ed25519 -C "alice@laptop"
 
# 2. Salin ke server (lakukan SAAT server masih bisa password login)
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@web01
 
# 3. Test login dengan key
ssh alice@web01

Bahkan dengan key, tambahkan passphrase (dan/atau agent) — key tanpa passphrase yang bocor = akses penuh untuk penyerang. Untuk skala besar, kelola key terpusat (LDAP/SSO) dan putar key secara berkala.

Rate Limiting dan Fail2ban

Serangan brute-force adalah kenyataan untuk server publik. fail2ban memblokir IP yang terlalu sering gagal login:

Pasang fail2ban
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Kombinasikan dengan port non-standar jika diinginkan — tapi ingat, port yang tidak standar adalah security through obscurity; perlindungan utama tetap di autentikasi yang kuat.

sudo: Hak Istimewa yang Granular

Model Dasar

Pengguna biasa login, lalu memakai sudo untuk tugas administratif. Konfigurasi ada di /etc/sudoersjangan edit langsung, gunakan visudo yang memvalidasi sintaks:

/etc/sudoers (via visudo)
# Pengguna di group sudo bisa menjalankan SEMUA perintah
%sudo   ALL=(ALL:ALL) ALL
 
# Bob hanya boleh restart nginx & melihat journal
bob     ALL=(root) /usr/bin/systemctl restart nginx, \
                    /usr/bin/journalctl

Pola yang Benar

PrinsipContoh
Privilege minimalBeri perintah spesifik, bukan ALL
Group over individualKelola lewat group (%app-devs)
Bypass password untuk automationNOPASSWD hanya untuk service account
No root shellJangan beri /bin/bash via sudo

PAM: Mesin Autentikasi

PAM (Pluggable Authentication Modules) adalah framework autentikasi Linux: login, sudo, SSH, dan su semuanya lewat PAM. Konfigurasinya di /etc/pam.d/. Ini memungkinkan menambahkan aturan autentikasi tambahan secara modular — termasuk MFA.

MFA dengan google-authenticator

Tambahkan lapisan kedua untuk SSH di server:

Aktifkan MFA untuk SSH
sudo apt install -y libpam-google-authenticator
google-authenticator       # jalankan sebagai USER yang akan pakai MFA
/etc/pam.d/sshd (tambahkan)
# Di bagian paling atas file
auth required pam_google_authenticator.so
/etc/ssh/sshd_config (tambahkan)
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam

Dengan AuthenticationMethods publickey,keyboard-interactive:pam, login SSH kini butuh dua faktor: key + TOTP. Ini menggagalkan serangan yang hanya punya key curian atau password saja.

Tip

Prinsip defense-in-depth pada akses: key + MFA (apa yang kalian punya + apa yang kalian tahu/kenali). Jika salah satu lapisan bocor, lapisan lain tetap melindungi. Terapkan minimal untuk semua akses administratif ke server produksi.

Menyusun Kebijakan Akses

Agar tidak kacau, dokumentasikan kebijakan akses:

AspekKebijakan yang Disarankan
AutentikasiKey ed25519 + MFA; password non-interaktif dimatikan
UserAkun per individu; service memakai service account
Haksudo granular per peran; audit tiap privilege
LifecycleCabut akses saat orang keluar; review berkala
AuditSemua akses tercatat (episode 20)

Praktik: Access Control

Skenario lengkap yang bisa dipraktikkan di VM:

Skenario access control
# 1. Buat user admin baru
sudo useradd -m -s /bin/bash alice
sudo usermod -aG sudo alice
 
# 2. Deploy key (saat server masih menerima password)
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@<host>
 
# 3. Amankan sshd: root off, password off, allow alice
sudo nano /etc/ssh/sshd_config
sudo systemctl restart sshd
 
# 4. Verifikasi: login dengan key, cek tanpa password gagal
ssh alice@<host>

Kesalahan Umum

  1. Restart sshd tanpa memastikan bisa login dengan key — terkunci dari server.
  2. PasswordAuthentication tetap aktif — serangan brute-force tidak berhenti.
  3. Satu akun untuk banyak orang — tidak bisa di-audit siapa yang melakukan apa.
  4. sudo ALL untuk semua orang — satu akun bobol = kontrol penuh.
  5. MFA hanya untuk "orang penting" — semua akses administratif harus dilindungi.

Penutup

Inti yang harus dibawa pulang:

  • SSH: key-based auth wajib, root login dimatikan, AllowUsers, + fail2ban untuk brute-force.
  • sudo: privilege minimal dan granular via visudo; kelompokkan lewat group.
  • PAM: mesin autentikasi Linux; tambahkan MFA (pam_google_authenticator) untuk lapisan kedua.
  • Kebijakan akses: per-individu, hak seminimal mungkin, dan diaudit.

Di episode 20 selanjutnya kita menyiapkan sistem untuk ditinjau pihak luar: compliance & audit sistem — audit logs, regulatory frameworks, dan evidence. Sampai jumpa di episode 20!

Belajar System Engineer - Access Control & PAM | Belajar System Engineer