Cara Mengonfigurasi dan Menggunakan PAM di Linux


Linux-PAM (kependekan dari Pluggable Authentication Modules yang berevolusi dari arsitektur Unix-PAM) adalah rangkaian perpustakaan bersama yang kuat yang digunakan untuk mengautentikasi pengguna secara dinamis ke aplikasi (atau layanan ) dalam sistem Linux.

Ini mengintegrasikan beberapa modul otentikasi tingkat rendah ke dalam API tingkat tinggi yang menyediakan dukungan otentikasi dinamis untuk aplikasi. Hal ini memungkinkan pengembang untuk menulis aplikasi yang memerlukan otentikasi, terlepas dari sistem otentikasi yang mendasarinya.

Banyak distribusi Linux modern yang mendukung Linux-PAM (selanjutnya disebut sebagai “PAM ”) secara default. Dalam artikel ini, kami akan menjelaskan cara mengonfigurasi PAM tingkat lanjut di sistem Ubuntu dan CentOS.

Sebelum kita melangkah lebih jauh, perhatikan bahwa:

  • Sebagai administrator sistem, hal terpenting adalah menguasai cara file konfigurasi PAM menentukan koneksi antara aplikasi (layanan) dan modul otentikasi pluggable (PAM) yang melakukan tugas otentikasi sebenarnya. Anda tidak perlu memahami cara kerja internal PAM.
  • PAM berpotensi mengubah keamanan sistem Linux Anda secara serius. Konfigurasi yang salah dapat menonaktifkan akses ke sistem Anda sebagian atau seluruhnya. Misalnya penghapusan file konfigurasi yang tidak disengaja pada /etc/pam.d/* dan/atau /etc/pam.conf dapat membuat Anda tidak dapat mengaksesnya. sistem sendiri!

Cara Memeriksa Program Sadar PAM

Untuk menggunakan PAM, aplikasi/program harus “sadar PAM“; itu perlu ditulis dan dikompilasi secara khusus untuk menggunakan PAM. Untuk mengetahui apakah suatu program “PAM-aware ” atau tidak, periksa apakah program tersebut telah dikompilasi dengan perpustakaan PAM menggunakan perintah ldd.

Misalnya sshd:

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Cara Konfigurasi PAM di Linux

File konfigurasi utama untuk PAM adalah /etc/pam.conf dan direktori /etc/pam.d/ berisi file konfigurasi PAM untuk setiap aplikasi/layanan yang sadar PAM. PAM akan mengabaikan file jika direktori tersebut ada.

Sintaks untuk file konfigurasi utama adalah sebagai berikut. File ini terdiri dari daftar aturan yang ditulis dalam satu baris (Anda dapat memperluas aturan menggunakan karakter escape “\ ”) dan komentar diawali dengan “# ” menandai dan memperluas ke ujung baris berikutnya.

Format setiap aturan adalah kumpulan token yang dipisahkan spasi (tiga aturan pertama tidak peka huruf besar-kecil). Kami akan menjelaskan token ini di bagian selanjutnya.

service type control-flag module module-arguments 

Di mana :

  • layanan: nama aplikasi sebenarnya.
  • type: jenis modul/konteks/antarmuka.
  • control-flag: menunjukkan perilaku PAM-API jika modul gagal berhasil dalam tugas autentikasinya.
  • modul: nama file absolut atau nama jalur relatif PAM.
  • argumen-modul: daftar token yang dipisahkan spasi untuk mengontrol perilaku modul.

Sintaks setiap file di /etc/pam.d/ mirip dengan file utama dan terdiri dari baris-baris dengan bentuk berikut:

type control-flag module module-arguments

Ini adalah contoh definisi aturan (tanpa argumen modul) yang ditemukan dalam file /etc/pam.d/sshd, yang melarang login non-root ketika /etc/nologin ada:

account required pam_nologin.so

Memahami Grup Manajemen PAM dan Bendera Kontrol

Tugas autentikasi PAM dipisahkan menjadi empat grup manajemen independen. Grup-grup ini mengelola berbagai aspek permintaan pengguna terhadap layanan terbatas.

Modul dikaitkan dengan salah satu jenis grup manajemen berikut:

  • akun: menyediakan layanan untuk verifikasi akun: apakah kata sandi pengguna sudah habis masa berlakunya?; apakah pengguna ini diizinkan mengakses layanan yang diminta?.
  • autentikasi: mengautentikasi pengguna dan menyiapkan kredensial pengguna.
  • kata sandi: bertanggung jawab untuk memperbarui kata sandi pengguna dan bekerja sama dengan modul autentikasi.
  • sesi: mengelola tindakan yang dilakukan pada awal sesi dan akhir sesi.

File objek PAM yang dapat dimuat (modul) harus ditempatkan di direktori berikut: /lib/security/ atau /lib64/security tergantung pada Arsitektur.

bendera kontrol yang didukung adalah:

  • persyaratan: kegagalan secara instan mengembalikan kontrol ke aplikasi yang menunjukkan sifat kegagalan modul pertama.
  • wajib: semua modul ini diperlukan agar berhasil agar libpam dapat mengembalikan keberhasilan pada aplikasi.
  • cukup: mengingat semua modul sebelumnya telah berhasil, keberhasilan modul ini menyebabkan aplikasi kembali dengan cepat dan berhasil (kegagalan modul ini diabaikan).
  • opsional: keberhasilan atau kegagalan modul ini umumnya tidak dicatat.

Selain kata kunci di atas, ada dua tanda kontrol valid lainnya:

  • include dan substack: menyertakan semua baris dengan tipe tertentu dari file konfigurasi yang ditentukan sebagai argumen untuk kontrol ini.

Cara Membatasi Akses Root ke Layanan SSH Melalui PAM

Sebagai contoh, kami akan mengkonfigurasi cara menggunakan PAM untuk menonaktifkan akses pengguna root ke sistem melalui SSH dan program login. Di sini, kami ingin menonaktifkan akses pengguna root ke suatu sistem, dengan membatasi akses ke layanan login dan sshd.

Kita dapat menggunakan modul /lib/security/pam_listfile.so yang menawarkan fleksibilitas tinggi dalam membatasi hak istimewa akun tertentu. Buka dan edit file untuk layanan target di direktori /etc/pam.d/ seperti yang ditunjukkan.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Tambahkan aturan ini di kedua file.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Menjelaskan token pada aturan di atas:

  • auth: adalah tipe modul (atau konteks).
  • wajib: adalah tanda kontrol yang berarti jika modul digunakan, modul tersebut harus lulus atau hasil keseluruhan akan gagal, apa pun status modul lainnya.
  • pam_listfile.so: adalah modul yang menyediakan cara untuk menolak atau mengizinkan layanan berdasarkan file arbitrer.
  • onerr=succeed: argumen modul.
  • item=pengguna: argumen modul yang menentukan apa yang tercantum dalam file dan harus diperiksa.
  • sense=deny: argumen modul yang menentukan tindakan yang harus diambil jika ditemukan dalam file, jika item TIDAK ditemukan dalam file, maka tindakan sebaliknya diminta.
  • file=/etc/ssh/deniedusers: argumen modul yang menentukan file berisi satu item per baris.

Selanjutnya, kita perlu membuat file /etc/ssh/deniedusers dan menambahkan nama root di dalamnya:

sudo vim /etc/ssh/deniedusers

Simpan perubahan dan tutup file, lalu atur izin yang diperlukan:

sudo chmod 600 /etc/ssh/deniedusers

Mulai sekarang, aturan di atas akan meminta PAM untuk memeriksa file /etc/ssh/deniedusers dan menolak akses ke SSH dan layanan login untuk pengguna mana pun yang terdaftar.

Cara Konfigurasi PAM Tingkat Lanjut di Linux

Untuk menulis aturan PAM yang lebih kompleks, Anda dapat menggunakan control-flags yang valid dalam bentuk berikut:

type [value1=action1 value2=action2 …] module module-arguments

Dimana valueN berhubungan dengan kode kembalian dari fungsi yang dipanggil dalam modul yang garisnya ditentukan. Anda dapat menemukan nilai yang didukung dari Panduan Administrator PAM online. Nilai khusus adalah default, yang berarti semua nilaiN tidak disebutkan secara eksplisit.

actionN dapat mengambil salah satu bentuk berikut:

  • abaikan: jika tindakan ini digunakan dengan tumpukan modul, status pengembalian modul tidak akan berkontribusi pada kode pengembalian yang diperoleh aplikasi.
  • buruk: menunjukkan bahwa kode yang dikembalikan harus dianggap sebagai indikasi kegagalan modul. Jika modul ini yang pertama dalam tumpukan gagal, nilai statusnya akan digunakan untuk seluruh tumpukan.
  • mati: setara dengan buruk tetapi dapat menghentikan tumpukan modul dan PAM segera kembali ke aplikasi.
  • ok: ini menginstruksikan PAM bahwa administrator sistem menganggap kode pengembalian ini harus berkontribusi langsung ke kode pengembalian tumpukan modul penuh.
  • selesai: setara dengan ok tetapi dapat menghentikan tumpukan modul dan PAM segera kembali ke aplikasi.
  • N (bilangan bulat tak bertanda tangan): setara dengan ok namun dapat melompati N modul berikutnya dalam tumpukan.
  • Setel Ulang: tindakan ini menghapus semua memori dari status tumpukan modul dan memulai ulang dengan modul bertumpuk berikutnya.

Masing-masing dari empat kata kunci: wajib; syarat; memadai; dan opsional, memiliki ekspresi setara dalam sintaks [...], yang memungkinkan Anda menulis aturan yang lebih rumit, yaitu:

  • diperlukan: [success=ok new_authtok_reqd=ok abaikan=abaikan default=buruk]
  • persyaratan: [success=ok new_authtok_reqd=ok abaikan=abaikan default=mati]
  • cukup: [success=done new_authtok_reqd=done default=ignore]
  • opsional: [success=ok new_authtok_reqd=ok default=ignore]

Berikut ini adalah contoh dari sistem CentOS 7 modern. Mari pertimbangkan aturan berikut dari file PAM /etc/pam.d/postlogin:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

Berikut ini contoh konfigurasi lain dari file PAM /etc/pam.d/smartcard-auth:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Untuk informasi lebih lanjut, lihat halaman manual pam.d:

man pam.d 

Terakhir, penjelasan komprehensif tentang sintaks file Konfigurasi dan semua modul PAM dapat ditemukan di dokumentasi untuk Linux-PAM.

Ringkasan

PAM adalah API tingkat tinggi yang kuat yang memungkinkan program yang mengandalkan autentikasi kepada pengguna autentik untuk aplikasi di sistem Linux. Ini kuat namun sangat menantang untuk dipahami dan digunakan.

Pada artikel ini, kami telah menjelaskan cara mengkonfigurasi fitur lanjutan PAM di Ubuntu dan CentOS. Jika Anda memiliki pertanyaan atau komentar untuk dibagikan, gunakan formulir umpan balik di bawah.