Tips dan Trik Penggunaan Modul PAM di FreeBSD 14

Terbit: Perbarui:
Tags


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:

  1. Jika pengguna berhasil melalui OPIE, segera izinkan mereka untuk masuk. Jika tidak, lanjutkan ke langkah berikutnya.
  2. Jika pengguna memerlukan OPIE, tolak akses mereka. Pengguna OPIE dengan kata sandi yang tepat pun tidak akan pernah bisa masuk.
  3. 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:

  1. Pengelolaan otorisasi (Auth management).
  2. Pengelolaan akun (Account management).
  3. Pengelolaan kata sandi (Password management).
  4. 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).