Tips dan Trik Penggunaan Modul PAM di FreeBSD 14
Library Pluggable Authentication Module (PAM) merupakan API umum untuk sistem autentikasi, modul PAM memudahkan administrator sistem untuk menambahkan metode autentikasi baru hanya dengan menginstal modul PAM, selain itu administrator sistem juga dapat mengubah kebijakan autentikasi dengan mengedit file konfigurasi.
PAM didefinisikan dan dikembangkan pada tahun 1995 oleh Vipin Samar dan Charlie Lai dari Sun Microsystems. Pada tahun 1997, Open Group menerbitkan spesifikasi awal X/Open Single Sign-on (XSSO), yang menstandarkan dan memberi hak cipta pada API PAM dengan menambahkan beberapa ekstensi tambahan.
Meskipun Modul Otentikasi Pluggable (PAM) telah lama digunakan, kenyataannya modul PAM adalah bagian dari FreeBSD yang paling sedikit dipahami, namun paling banyak digunakan. Setiap sistem FreeBSD menggunakan PAM, melalui paket OpenPAM.
Kebanyakan sysadmin tidak menyentuhnya, mungkin karena rumitnya konfigurasinya. Sebenarnya modul PAM tidak serumit yang Anda bayangkan. OpenPAM FreeBSD, seperti PAM primordial Solaris, hanya menangani tugas-tugas yang berhubungan dengan otentikasi dan otentikasi.
Artikel ini menguraikan prinsip-prinsip dasar dan mekanisme pustaka Pluggable Authentication Modules (PAM), serta menjelaskan cara mengonfigurasi PAM dan mengintegrasikannya ke dalam aplikasi. Isi artikel ini telah diimplementasikan oleh penulis pada sistem FreeBSD 14.
A. Cara Konfigurasi PAM
Sesuai dengan namanya, keunggulan PAM terletak pada sifatnya yang pluggable (dapat dipasang-lepas) dan modular. Modul-modul PAM baru dapat ditambahkan dengan cukup mudah dan relatif independen terhadap modul-modul lain yang sudah ada. Keunggulan lainnya adalah satu modul dapat digunakan untuk melakukan autentikasi bagi berbagai program yang ada. Dengan demikian, pengembang hanya perlu mengimplementasikan sistem autentikasi yang spesifik untuk program tersebut, sementara sistem autentikasi yang bersifat umum dan telah menjadi standar tidak perlu dibuat berulang kali.
Pada sistem FreeBSD, secara default konfigurasi PAM berada di dalam folder /etc/pam.d, sedangkan paket PAM berada di /usr/local/etc/pam.d. Berikut ini adalah contoh isi dari folder /etc/pam.d. Setiap daemon memiliki file konfigurasinya sendiri yang dinamai sesuai dengan nama program terkait yang menentukan kebijakan PAM. Di bawah ini adalah isi dari folder /etc/pam.d.
root@ns1:~ # ls /etc/pam.d
README cron ftpd login passwd sshd sudo telnetd
atrun ftp imap other pop3 su system xdm
Dari isi folder /etc/pam.d di atas, terlihat bahwa setiap daemon memiliki file konfigurasinya sendiri yang diberi nama sesuai dengan program terkait. Sebagai contoh, aplikasi SSH memiliki konfigurasi sshd di dalam folder /etc/pam.d, aplikasi telnet memiliki konfigurasi telnetd, dan seterusnya. Sekarang, mari kita lihat isi file konfigurasi sshd yang terdapat di dalam folder /etc/pam.d tersebut.
root@ns1:~ # cat /etc/pam.d/sshd
# PAM configuration for the "sshd" service
#
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
#auth required pam_unix.so no_warn try_first_pass
auth required pam_unix.so nodelay
#auth required pam_tally.so deny=3
#pam.d
#auth requisite pam_nologin.so
# account
account required pam_nologin.so
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so
#account required pam_tally.so
#session
#session optional pam_ssh.so want_agent
session required pam_permit.so
#password
#password sufficient pam_krb5.so no_warn try_first_pass
password required pam_unix.so no_warn try_first_pass
Setiap baris merupakan satu aturan PAM. Setiap aturan memiliki empat komponen: tipe, kontrol, modul, dan argumen modul. Pernyataan pertama di sini memiliki tipe otentikasi, kontrol yang memadai, modul pam_opie.so, dan opsi no_warn dan no_fake_prompt.
Dalam contoh konfigurasi sshd di atas pada baris pertama,
auth sufficient pam_opie.so no_warn no_fake_prompts
Aturan di atas merupakan aturan autentikasi untuk SSH, yang menjelaskan ketentuan masuk (login) di mana setiap kali seseorang mencoba masuk menggunakan SSH, mereka akan diberikan izin atau penolakan berdasarkan kredensial login SSH yang digunakan. Aturan ini sudah mencukupi. Jika modul tersebut berhasil, permintaan autentikasi akan disetujui, dan pemrosesan aturan pun langsung dihentikan. Modul yang dimaksud adalah pam_opie.so.
Halaman manual (man page) untuk pam_opie menyatakan bahwa modul ini mendukung OPIE. Jika ditelusuri lebih lanjut, OPIE merupakan singkatan dari *One-Use Password Over Everything* (kata sandi sekali pakai untuk berbagai keperluan). Aturan ini menetapkan bahwa jika seseorang melakukan autentikasi menggunakan OPIE, mereka akan langsung mendapatkan akses. Sekarang, mari kita lihat aturan yang kedua.
auth requisite pam_opieaccess.so no_warn allow_local
Aturan kedua menjelaskan bahwa jika proses masuk (LogIn) gagal, pemrosesan akan langsung dihentikan. Aturan ini ditujukan untuk modul OPIE lainnya, yaitu `pam_opieaccess`. Jika pengguna OPIE sudah diberikan akses secara langsung melalui aturan-aturan sebelumnya, mengapa masih diperlukan aturan OPIE lainnya?.
Pemeriksaan oleh `pam_opieaccess` menunjukkan bahwa modul ini memverifikasi apakah pengguna dikonfigurasi untuk diwajibkan menggunakan OPIE. Pengguna yang diwajibkan menggunakan OPIE dan telah memasukkan informasi OPIE mereka dengan benar tidak akan melanggar aturan ini.
Dalam modul pam_unix, pemeriksaan kata sandi dan pengguna merupakan langkah pertama yang dilakukan, dan ini merupakan autentikasi nama pengguna serta kata sandi standar. Dengan demikian, kebijakan ini dapat diringkas sebagai berikut:
- Jika pengguna berhasil melalui OPIE, segera izinkan mereka untuk masuk. Jika tidak, lanjutkan ke langkah berikutnya.
- Jika pengguna memerlukan OPIE, tolak akses mereka. Pengguna OPIE dengan kata sandi yang tepat pun tidak akan pernah bisa masuk.
- Jika pengguna memasukkan nama pengguna dan kata sandi yang benar, izinkan mereka untuk masuk.
B. Metode Autentikasi Tambahan
Dalam modul PAM, kita dapat menambahkan metode autentikasi baru, seperti Google Authenticator, Yubikey, atau Cisco Duo. Anda bahkan bisa menambahkan metode autentikasi khusus, seperti pemindaian sidik jari. Aturan di bawah ini akan menambahkan modul PAM dengan metode suara, sidik jari, dan aroma.
auth required pam_voice.so
auth required pam_finger.so
auth required pam_aroma.so
Ketiga aturan ini bersifat wajib. Pengguna harus memberikan sidik jari dan sidik jempol yang tepat agar dapat masuk ke dalam sistem FreeBSD. Setelah aturan-aturan ini dibuat, tambahkan aturan untuk penelusuran kesalahan (debug). PAM hanya menyediakan sedikit fitur penelusuran kesalahan secara eksplisit. Terdapat tiga opsi yang dapat diterapkan pada argumen debug, yaitu `pam_echo` dan `pam_exec`.
Menambahkan argumen debug di seluruh kebijakan Anda tidak akan merusak PAM modul tersebut. Berikut ini adalah contoh argumen debug modul PAM dengan autentikasi sidik jari.
auth optional pam_echo.so "auth policy starting, trying voice"
auth sufficient pam_voice.so
auth optional pam_echo.so "voice failed, trying finger"
auth sufficient pam_finger.so
auth optional pam_echo.so "finger failed, taking a whiff"
auth required pam_aroma.so
auth optional pam_echo.so "how did we get here?"
C. Mengamankan Autentikasi Pengguna
Meskipun secara default pada sistem FreeBSD modul konfigurasi PAM terletak di /etc/pam.d, Anda dapat memindahkannya ke file /etc/pam.conf. Jika Anda menggunakan file /etc/pam.conf, aturannya sedikit berbeda dibandingkan dengan /etc/pam.d. Pada /etc/pam.conf, nama layanan menjadi token pertama dalam baris konfigurasi. Sebagai contoh, perhatikan baris berikut di /etc/pam.d/login:
auth required pam_unix.so nulok
Aturan dalam /etc/pam.conf akan diubah menjadi:
login auth required pam_unix.so nulok
Jika kita melihat aturan-aturan di atas, secara umum dapat disimpulkan bahwa terdapat empat jenis layanan pengelolaan PAM:
- Pengelolaan otorisasi (Auth management).
- Pengelolaan akun (Account management).
- Pengelolaan kata sandi (Password management).
- Dan pengelolaan sesi (Session management).
Banyak distribusi Linux hadir dengan autentikasi pengguna yang kurang aman. Bagian ini membahas beberapa cara untuk menciptakan autentikasi pengguna yang aman pada sistem Anda. Meskipun langkah-langkah ini akan membuat sistem Anda lebih aman, jangan berasumsi bahwa sistem Anda tidak mungkin diretas. Tentu saja, setiap sistem aplikasi memiliki kelebihan dan kekurangannya masing-masing.
Semua berkas di dalam /etc/pam.d/ berisi konfigurasi untuk layanan tertentu. Pengecualian penting untuk aturan ini adalah berkas /etc/pam.d/other. Berkas ini memuat konfigurasi untuk layanan apa pun yang tidak memiliki berkas konfigurasinya sendiri. Sebagai contoh, jika layanan xyz (sebagai ilustrasi) mencoba melakukan autentikasi, PAM akan mencari berkas /etc/pam.d/xyz. Jika tidak ditemukan, autentikasi untuk xyz akan ditentukan oleh berkas /etc/pam.d/other.
Karena /etc/pam.d/other merupakan konfigurasi untuk layanan PAM cadangan (fallback), berkas ini dianggap aman. Berikut adalah contoh isi dari berkas konfigurasi /etc/pam.d/other.
auth required pam_deny.so
auth required pam_warn.so
account required pam_deny.so
account required pam_warn.so
password required pam_deny.so
password required pam_warn.so
session required pam_deny.so
session required pam_warn.so
Dengan konfigurasi ini, setiap kali layanan yang tidak dikenal mencoba mengakses salah satu dari empat jenis konfigurasi tersebut, PAM akan menolak autentikasi (melalui modul pam_deny.so) dan kemudian mencatat peringatan ke dalam syslog (melalui modul pam_warn.so).
