RSS

LINUX dengan PAM (Pluggable Authentication Module)

20 Jun


Keamanan memiliki banyak aspek. Salah satu yang mendasar adalah memverifikasi apakah seseorang boleh login ke sistem atau tidak. PAM diciptakan untuk mengatur masalah ini.

Keamanan sistem bisa dilihat dari berbagai macam segi. Misalnya, pengamanan suatu aplikasi web agar kebal terhadap serangan SQL Injection. Atau kita mengamankan dokumen penting dengan suatu password yang rumit agar tidak mudah dijebol. Hal-hal ini memang tidak bisa diremehkan, karena berbagai serangan ini siap menyusup dan mengambil data-data penting Anda. Tetapi bisakah Anda menebak apa masalah klasik dalam keamanan sistem?
Jawabnya, uji authentication atau uji valid tidaknya user. Seberapa pun kuatnya aplikasi Anda, jika Anda bisa dengan mudahnya login sebagai root atau administrator, maka praktis benteng pertahanan Anda menjadi tidak berarti. Ini tidak hanya berlaku bagi root, tapi juga untuk user biasa. Ibarat rumah, jika pintu atau pagarnya mudah diloncati atau dibuka, tentunya si pemilik akan kesulitan menghindar dari pencurian. Memang bisa saja si “pencuri” dihalangi, tapi tentunya lebih mudah menghalangi pencuri yang berada di luar rumah ketimbang pencuri yang sudah terlanjur masuk ke rumah Anda?

Untunglah Linux memiliki sistem PAM (Pluggable Authentication Module). De­ngan sistem ini, suatu program bisa me­ngecek kevalidan identitas seorang user.

Keuntungannya, dengan PAM, aplikasi cukup memanfaatkan library PAM dan menerima hasil authentication tanpa perlu membuat fungsi uji authentication  sendiri. Di samping itu, jika pengguna ingin mengubah metode authentication, maka hal itu bisa langsung dilakukan tanpa mengubah sedikitpun kode program.

Distribusi Linux yang digunakan sebagai pembahasan disini adalah CentOS 5.3. Alasan memakai distribusi ini sebagai acuan karena merupakan “kembaran” dari sistem operasi enterprise Redhat Enterprise Linux. Namun, CentOS juga memiliki banyak kesamaan dengan Fedora dan sebagian distribusi Linux desktop lainnya. Diharapkan dengan cara ini semua kalang­an pengguna Linux bisa menarik manfaat.
Pembahasan akan difokuskan pada contoh-contoh modifikasi setting PAM.

Seperti biasa, prompt $ berarti perintah diketik sebagai user non root. Sementara prompt # berarti perintah diketik sebagai user root. Sangat disarankan untuk melatih konfigurasi ini terlebih dahulu di virtual machine. Karena bisa saja kesalahan konfigurasi menyebabkan Anda gagal login secara total. Berhati-hatilah!

User terkunci pam tally File /var/log/secure bisa Anda gunakan untuk menunjukkan seorang user "terkunci" modul pam_tally.User terkunci pam tally File /var/log/secure bisa Anda gunakan untuk menunjukkan seorang user “terkunci” modul pam_tally.

Membatasi jumlah kegagalan login

Salah satu teknik umum untuk menyusup ke suatu sistem adalah dengan mencoba masuk sebagai seorang user dan mencoba berbagai kombinasi password. Misalnya “aaa” lalu “bbb” atau “ccc”. Atau bisa juga mencoba kombinasi kata umum misalnya “room”, “birthday” dan seterusnya. Karena sifatnya yang coba-coba, maka kemungkinan gagal login relatif besar. Di sisi lain, pengguna yang sah bisa saja gagal login karena salah ketik satu atau dua huruf.

Jadi disini kita berusaha mencari jalan tengah: bagaimana mencegah percobaan menebak password namun tetap mengijinkan user yang sah mengulangi login. Kita gunakan modul pam_tally.so untuk keperluan ini. File yang perlu kita edit adalah /etc/pam.d/login. Edit baris-baris teratas dengan menambahkan baris yang dicetak tebal:
auth [user_unknown=ignore success=ok ignore=ignore
default=bad] pam_securetty.so
auth     required pam_tally.so per user deny=3 unlock_
time=120
auth  include  system-auth
account required pam_nologin.so
…. 

Perhatikan bahwa kita menaruh pengecekan pam_tally sebelum baris yang menyebutkan “system-auth”.

Toleransinya sebanyak tiga kali Apabila user salah memasukkan password sebanyak tiga kali, proses login pun akan terkunci.Toleransinya sebanyak tiga kali Apabila user salah memasukkan password sebanyak tiga kali, proses login pun akan terkunci.

Berikut ini penjelasan setting diatas:
auth: menyatakan bahwa kita menambahkan suatu aturan untuk authentication user. Beberapa kemungkinan lain akan dibahas terpisah dalam artikel ini

required: modul ini diperlakukan sebagai salah satu pengecekan yang harus dilewati. Dalam hal ini, jika seorang user sudah gagal lebih dari 3 kali maka pengecekan berikutnya (baris “auth include system-auth”) bisa diabaikan.

pam_tally.so: nama modul yang kita pakai. Anda lihat akhiran “.so”? pam_tally.so sebenarnya adalah satu dari beberapa file library (kira-kira kalau di Windows, mirip seperti DLL). Biasanya file-file ini tersimpan di direktori /lib/security/

deny=3: kegagalan sebanyak tiga kali akan mengakibatkan user dilock. Argumen bisa dirubah sesuai kebutuhan Anda. Menurut pengamatan penulis, kegagalan penulisan user atau password sampai dengan 2 kali sering terjadi, sehingga jika Anda set nilai ini dibawah 3 akan menyebabkan user sering terkunci.

unlock_time=120: setiap user yang terkunci, baru akan diizinkan untuk men­coba login kembali setelah 2 menit. Angka yang dipakai dalam satuan detik.

per_user: perhitungan kegagalan akan dihitung untuk tiap user, bukan secara ke­seluruhan. Tanpa opsi ini, jika Anda memiliki 2 user, yakni X dan Y. Sementara parameter “deny” diset sebesar 5, maka jika X gagal login 4  kali berturut-turut dan Y mencoba login dan langsung gagal pada percobaan pertama. Baik X dan Y akan di-lock selama waktu yang telah Anda tentukan. Kemungkinan besar bukan keadaan seperti ini yang Anda harapkan bukan?

Mengecek kekuatan password

Penulis yakin, pepatah “di dalam badan sehat terdapat jiwa yang sehat” sering Anda dengar. Untuk authentication, kira-kira ini bisa berubah menjadi “di dalam password yang kuat terbentuk dasar keamanan yang tangguh”. Kenapa bisa demikian? Bayangkan saja jika password Anda sama seperti nama user Anda. Atau password Anda sesederhana “abcdef” atau “123456″, tentunya relatif mudah ditebak bukan?
Modul pam_cracklib dapat membantu Anda untuk menentukan kriteria dari password yang bisa diset untuk seorang user.

Setting yang berkaitan dengan hal tersebut bisa Anda temukan di file /etc/pam.d/system-auth. Misalnya, kita buat agar password minimal 12 karakter, cari baris yang mencantumkan kata “pam_cracklib dan edit seperti berikut. Atau jika tidak ada, tambahkan tepat diatas baris yang menyebutkan “password …… pam_unix.so………”:
password    requisite     pam_cracklib.so try_first_pass
retry=3 minlen=13

Penjelasan akan penulis urut dari parameter yang paling penting:
minlen=13: panjang karakter “teoritis” adalah 12 ( 13 dikurangi 1) karakter (asumsinya semua huruf kecil dan tidak me­ngandung angka, dan seterusnya). Mungkin Anda berpikir “kenapa parameter ini terlihat tidak konsisten?”.

Password baru ditolak Pada contoh gambar di atas, user mencoba menggunakan password baru, seperti latitude, elephant, amazing. Semua ditolak karena pasword-nya menggunakan kata dalam bahasa Inggris.Password baru ditolak Pada contoh gambar di atas, user mencoba menggunakan password baru, seperti latitude, elephant, amazing. Semua ditolak karena pasword-nya menggunakan kata dalam bahasa Inggris.

Sebenarnya bukan tidak konsisten, namun ini terjadi karena modul cracklib dalam melakukan perhitungan panjang password tidak sekedar menghitung banyaknya karakter, namun juga memasukkan suatu faktor yang disebut “credit”. Anda bisa anggap credit ini semacam bonus tahunan kalau dalam konteks gaji pegawai.

Berikut ini penjelasan singkatnya. De­ngan memakai huruf kecil, Anda mendapat angka bonus +1. Angka ini akan diperhitungkan dalam panjang karakter password. Jadi, karena Anda memakai huruf kecil, maka Anda sudah mengantongi nilai +1. Sisanya adalah panjang karakter password Anda. Artinya, jika Anda ingin menetapkan password minimal sepanjang 12 karakter, maka yang harus Anda tulis adalah 12+1=13.

Penjelasan lengkap untuk masalah ini bisa Anda pelajari di URL http://www.deer-run.com/~hal/sysadmin/pam_cracklib.html dan file /usr/share/doc/pam-0.99.6.2/html/sag-pam_cracklib.html di dokumentasi CentOS. Sesuaikan path nama file jika Anda menggunakan distribusi Linux lainnya.

Catatan: sebagai root, Anda bisa memberikan sembarang password bagi user root dan user lainnya. Apabila Anda berpikir ini adalah suatu permasalahan security serius, Anda bisa membaca URL http://www.linuxquestions.org/questions/linux-security-4/problems-with-pam-password-complexity-807093/ dan menemukan solusinya di sana.

pam_cracklib.so: nama modul yang kita pakai. Di masa mendatang, mungkin saja nama filenya berubah, jadi selalu cermati dokumentasi distribusi Linux yang Anda pakai.

password: menandakan bahwa modul ini kita gunakan untuk masalah terkait manajemen password.

requisite: mirip seperti required pada contoh modul tally, namun maknanya sedikit berbeda. Dalam kasus ini, gagal suksesnya pengecekan modul ini akan langsung menentukan apakah password sudah memenuhi kriteria atau tidak. Pe­ngecekan modul-modul PAM untuk manajemen password pada baris berikutnya tidak lagi berpengaruh.

Masalah lain yang bisa diatasi adalah mencegah user membuat suatu password tetapi menggunakan password yang pernah digunakan di masa lalu. Untuk memecahkan masalah ini, PAM memberikan fasilitas untuk merekam password yang pernah diberikan dan melakukan perbandingan dengan isi file ini.

Syarat pertama adalah pastikan sudah ada file bernama /etc/security/opasswd. Jika belum ada, Anda bisa membuatnya dengan perintah:
# touch /etc/security/opasswd
Selanjutnya, tentukan hak aksesnya agar hanya bisa pengguna dengan akses root yang bisa melakukan proses baca-tulis:
# chown root:root /etc/security/opasswd
# chmod 600 /etc/security/opasswd
Lalu edit kembali file /etc/pam.d/system-auth dan temukan baris yang menyebutkan pam_unix.so. Tambahkan parameter “remember” sehingga menjadi terbaca:
password  sufficient  pam_unix.so debug md5 shadow
nullok try_first_pass use_authtok remember=3

Angka “3″ menunjukan kita ingin meng­ingat 3 password yang dipakai oleh suatu user. Password-password yang dalam ke­adaan terenkripsi tersebut akan disimpan di file /etc/security/opasswd. Nantinya, jika Anda menggunakan perintah passwd dan memberikan password yang sama dengan password yang telah tercatat, akan keluar pesan:
BAD PASSWORD: has been already used

Masalah lain dalam pemberian password adalah password baru sangat mirip dengan password yang lama. Misalnya password lama Anda “anaknakal”, lalu password baru yang akan gunakan adalah “ananaka”. Mirip bukan?  Bedanya cuma tidak ada huruf “k” dan “l” di password baru. Inipun akan mempermudah penye­rang menebak password Anda, jika dianggap dia tahu password lama Anda.

Cara untuk mengatasi masalah ini adalah dengan menggunakan parameter “difok”. Parameter ini menyatakan berapa karakter di password baru yang tidak boleh sama dengan password lama. Misalnya, kita putuskan bahwa minimal 4 karakter harus berbeda, maka penulisannya menjadi:
password    requisite     pam_cracklib.so try_first_pass
retry=3 difok=4

Password lama ditolak Anda dilarang menggunakan password yang pernah Anda pakai.Parameter “remember=n” memerintahkan pam_unix melakukan pencatatan password, sementara pam_cracklib membandingkan password baru dan history.
Repeated password is bad Penulis mencoba menggunakan password “prooooklamasi” dan ditolak. Kenapa? Karena opsi “maxrepeat=3” membatasi maksimal 3 karakter berulang.Repeated password is bad Penulis mencoba menggunakan password “prooooklamasi” dan ditolak. Kenapa? Karena opsi “maxrepeat=3” membatasi maksimal 3 karakter berulang.

Terakhir, berapa kali Anda tergoda untuk menggnakan password seperti “aaabbbccc”? Alasannya klasik, lebih gampang diketik karena sebenarnya Anda cukup menekan 3 tombol keyboard (huruf) yang berbeda, masing-masingnya ditekan sebanyak 3 kali. Apabila Anda merasa bahwa hal ini juga perlu dicegah, Anda bisa menggunakan parameter “maxrepeat”. Untuk lebih jelasnya, simak contohnya berikut ini.
password    requisite     pam_cracklib.so try_first_pass
retry=3 maxrepeat=4

Artinya, jika ada 4 karakter atau lebih berulang, misalnya “aaaabbbb”, maka password ini akan ditolak.
Anda tentunya bisa mengombinasikan parameter-parameter cracklib untuk men­capai aturan penulisan password yang lebih rumit. Sebaiknya jangan terlalu rumit karena bisa saja akan mempersulit user Anda sendiri.

Membatasi waktu login

Pengguna komputer di perusahaan biasanya dibatasi waktu loginnya. Misalnya, aturan perusahaan menetapkan bahwa user hanya boleh login pada hari kerja dimulai dari jam 8 pagi sampai dengan 5 sore. Untuk pembatasan akses Internet, hal ini mungkin bisa kita terapkan de­ngan menulis aturan di proxy (misalnya access control list Squid). Namun, bagaimana dengan aturan login?

Pengaturan waktu login Dengan setting “!Al0800-1700”, artinya user d larang login dari jam 8 pagi sampai dengan 5 sore. Log akan mencatat pelanggaran waktu login jika ada.Pengaturan waktu login Dengan setting “!Al0800-1700”, artinya user d larang login dari jam 8 pagi sampai dengan 5 sore. Log akan mencatat pelanggaran waktu login jika ada.

Inilah gunanya modul pam_time. Untuk menerapkan aturan di atas, kita tuliskan aturan sebagai berikut dalam file /etc/security/time.conf:
login ; * ; mulyadi ; MoTuWeThFr0800-1700
Selain itu, Anda pun harus menuliskan aturan ini di dalam file /etc/pam.d/login:
account    required pam_time.so
account    required     pam_nologin.so
Perhatikan posisi penulisan modul pam_time di atas pam_nologin. Ingat, jangan dibalik!
Penjelasannya sebagai berikut:

->account: kita akan mengatur masalah ijin login. Mungkin Anda mengira ditulis sebagai auth, namun ini sebenarnya keliru.

->pam_time.so: nama modul yang kita perlukan. Sama seperti sebelumnya, di masa depan nama file ini bisa berubah
Lalu untuk definisi waktunya sendiri sebagai berikut:

->login: kita akan mengatur waktu ak­ses untuk log-in. Untuk pengaturan layanan lain, definisi nya juga berbeda namun ini diluar cakupan artikel ini.

->* (pada field kedua): pada console mana login akan dibatasi. Tanda * artinya login dibatasi baik untuk login secara text dan grafik

->mulyadi: nama user yang hendak Anda batasi.

->MoTuWeThFr0800-1700: definisi jam. Yang Anda perlu tuliskan pertama adalah nama hari. Mo adalah Monday (senin), Tu

adalah Tuesday (Selasa) dan seterusnya. Jadi disini kita menyebutkan nama hari dari Senin sampai dengan Jumat. Untuk jam, ditulis sebagai 4 digit, yaitu 2 digit jam dan 2 digit menit. Jadi lengkapnya disini kita tentukan login hanya berlaku dari Senin sampai dengan Jumat dari jam 8 pagi sampai dengan 5 sore. Dari experiment penulis, jam disini adalah dalam zona waktu setempat.

Anda pun bisa membalik definisinya de­ngan memakai tanda !. Jadi, jika tertulis !MoTuWeThFr0800-1700, berarti user hanya diiizinkan login di luar hari kerja atau hari kerja, tetapi di luar jam kerja. Beberapa definisi waktu lain yang bisa digunakan adalah AI (semua hari dari Senin sampai dengan Minggu) dan Wk (hari akhir pekan).

Penutup
Dengan penggunaan modul PAM yang tepat, maka Anda bisa menerapkan aturan-aturan login yang lebih baik. Penjelasan pada artikel ini hanyalah sebagian kecil dari seluruh modul yang bisa Anda pakai. Telusuri dokumentasi yang ter-install di folder /usr/share/doc untuk penjelasan yang lebih lengkap.

 
1 Komentar

Ditulis oleh pada 20 Juni 2011 in Security

 

One response to “LINUX dengan PAM (Pluggable Authentication Module)

  1. kura2gurun

    5 September 2011 at 9:59 AM

    bagus nih tutorial, nanya dong mas 🙂
    klo saya cuma mo kasih security hanya untuk user root ajah bisa gag? user non-root bisa bebas seperti biasa.
    mohon bantuan nya 🙂

     

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

 
%d blogger menyukai ini: