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

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.
Konfigurasi SSH di /etc/ssh/sshd_config. Dua pengaturan paling penting untuk produksi:
# 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 yesWarning
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.
Praktik key yang benar:
# 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@web01Bahkan 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.
Serangan brute-force adalah kenyataan untuk server publik. fail2ban memblokir IP yang terlalu sering gagal login:
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdKombinasikan dengan port non-standar jika diinginkan — tapi ingat, port yang tidak standar adalah security through obscurity; perlindungan utama tetap di autentikasi yang kuat.
Pengguna biasa login, lalu memakai sudo untuk tugas administratif. Konfigurasi ada di /etc/sudoers — jangan edit langsung, gunakan visudo yang memvalidasi sintaks:
# 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| Prinsip | Contoh |
|---|---|
| Privilege minimal | Beri perintah spesifik, bukan ALL |
| Group over individual | Kelola lewat group (%app-devs) |
| Bypass password untuk automation | NOPASSWD hanya untuk service account |
| No root shell | Jangan beri /bin/bash via sudo |
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.
Tambahkan lapisan kedua untuk SSH di server:
sudo apt install -y libpam-google-authenticator
google-authenticator # jalankan sebagai USER yang akan pakai MFA# Di bagian paling atas file
auth required pam_google_authenticator.soChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pamDengan 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.
Agar tidak kacau, dokumentasikan kebijakan akses:
| Aspek | Kebijakan yang Disarankan |
|---|---|
| Autentikasi | Key ed25519 + MFA; password non-interaktif dimatikan |
| User | Akun per individu; service memakai service account |
| Hak | sudo granular per peran; audit tiap privilege |
| Lifecycle | Cabut akses saat orang keluar; review berkala |
| Audit | Semua akses tercatat (episode 20) |
Skenario lengkap yang bisa dipraktikkan di VM:
# 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>ALL untuk semua orang — satu akun bobol = kontrol penuh.Inti yang harus dibawa pulang:
AllowUsers, + fail2ban untuk brute-force.visudo; kelompokkan lewat group.pam_google_authenticator) untuk lapisan kedua.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!