Contoh Modul Pam Menunjukkan Otentikasi Dua Faktor untuk Masuk ke Server melalui SSH, OpenVPN, dll ...
Proyek ini bukan tentang masuk ke Google, Facebook, atau sistem faktor kedua TOTP/HOTP lainnya, bahkan jika mereka merekomendasikan menggunakan aplikasi Google Authenticator.
Kata sandi satu kali berbasis HMAC (HOTP) ditentukan dalam RFC 4226 dan kata sandi satu kali berbasis waktu (TOTP) ditentukan dalam RFC 6238.
./bootstrap.sh
./configure
make
sudo make installJika Anda tidak memiliki akses ke "sudo", Anda harus secara manual menjadi "root" sebelum memanggil "membuat instal".
Untuk keamanan tertinggi, pastikan bahwa kata sandi dan OTP diminta bahkan jika kata sandi dan/atau OTP salah. Ini berarti bahwa setidaknya yang pertama dari pam_unix.so (atau modul apa pun yang digunakan untuk memverifikasi kata sandi) dan pam_google_authenticator.so harus ditetapkan sesuai required , tidak requisite . Mungkin tidak ada required untuk memiliki keduanya, tetapi bisa tergantung pada sisa konfigurasi PAM Anda.
Jika Anda menggunakan HOTP (berbasis penghitung sebagai lawan dari berbasis waktu) maka tambahkan opsi no_increment_hotp untuk memastikan penghitung tidak bertambah untuk upaya yang gagal.
Tambahkan baris ini ke file konfigurasi PAM Anda:
auth required pam_google_authenticator.so no_increment_hotp
Jalankan biner google-authenticator untuk membuat kunci rahasia baru di direktori home Anda. Pengaturan ini akan disimpan di ~/.google_authenticator .
Jika sistem Anda mendukung perpustakaan "libqrencode", Anda akan ditampilkan kode qrco yang dapat Anda pindai menggunakan aplikasi Android "Google Authenticator".
Jika sistem Anda tidak memiliki perpustakaan ini, Anda dapat mengikuti URL yang dihasilkan oleh output google-authenticator , atau Anda harus secara manual memasukkan kunci rahasia alfanumerik ke dalam aplikasi Android "Google Authenticator".
Dalam kedua kasus tersebut, setelah Anda menambahkan kunci, klik dan tahan sampai menu konteks ditampilkan. Kemudian periksa apakah nilai verifikasi kunci cocok (fitur ini mungkin tidak tersedia di semua bangunan aplikasi Android).
Setiap kali Anda masuk ke sistem Anda, Anda sekarang akan diminta untuk kode TOTP Anda (waktu-password berbasis waktu) atau HOTP (berbasis kontra), tergantung pada opsi yang diberikan kepada google-authenticator , setelah memasuki ID pengguna normal Anda dan kata sandi akun unix normal Anda.
Selama proses peluncuran awal, Anda mungkin menemukan bahwa belum semua pengguna telah membuat kunci rahasia. Jika Anda masih ingin mereka dapat masuk, Anda dapat melewati opsi "Nullok" pada baris perintah modul:
auth required pam_google_authenticator.so nullok
Jika sistem Anda mengenkripsi direktori home sampai setelah pengguna Anda memasukkan kata sandi mereka, Anda harus mengatur ulang entri dalam file konfigurasi PAM untuk mendekripsi direktori home sebelum meminta kode OTP, atau Anda harus menyimpan file rahasia di Lokasi non-standar:
auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator
akan menjadi pilihan yang mungkin. Pastikan untuk menetapkan izin yang sesuai. Anda juga harus memberi tahu pengguna Anda untuk memindahkan file .google_Authenticator mereka secara manual ke lokasi ini.
Selain "$ {user}", opsi secret= juga mengenali keduanya "~" dan ${HOME} sebagai tangan pendek untuk direktori rumah pengguna.
Saat menggunakan opsi secret= , Anda mungkin juga ingin mengatur opsi user= . Yang terakhir memaksa modul PAM untuk beralih ke ID pengguna kode hard-coded yang berdedikasi sebelum melakukan operasi file apa pun. Saat menggunakan opsi user= , Anda tidak boleh memasukkan "~" atau "$ {home}" di nama file.
Opsi user= juga dapat bermanfaat jika Anda ingin mengotentikasi pengguna yang tidak memiliki akun UNIX tradisional di sistem Anda.
Lihat "Direktori Rumah Terenkripsi", di atas.
Menimpa prompt token default. Jika Anda ingin memasukkan spasi di prompt, bungkus seluruh argumen dalam tanda kurung persegi:
auth required pam_google_authenticator.so [authtok_prompt=Your secret token: ]
Paksa modul PAM untuk beralih ke ID pengguna kode-hard-coded sebelum melakukan operasi file apa pun. Biasa digunakan dengan secret= .
Pilihan Berbahaya!
Secara default modul PAM mensyaratkan bahwa file rahasia harus dimiliki pengguna masuk (atau jika user= ditentukan, dimiliki oleh pengguna itu). Opsi ini menonaktifkan cek itu.
Opsi ini dapat digunakan untuk mengizinkan daemon yang tidak berjalan sebagai root untuk tetap menangani file konfigurasi yang tidak dimiliki oleh pengguna itu, misalnya yang dimiliki oleh pengguna itu sendiri.
Pilihan Berbahaya!
Secara default, modul PAM mengharuskan file Secrets dapat dibaca hanya oleh pemilik file (mode 0600 secara default). Dalam situasi di mana modul digunakan dalam konfigurasi non-default, administrator mungkin memerlukan izin file yang lebih ringan, atau pengaturan khusus untuk kasus penggunaannya.
Aktifkan lebih banyak pesan log verbose di syslog.
Beberapa klien PAM tidak dapat meminta pengguna lebih dari sekadar kata sandi. Untuk mengatasi masalah ini, modul PAM ini mendukung penumpukan. Jika Anda lulus opsi forward_pass , modul pam_google_authenticator menanyakan pengguna untuk kata sandi sistem dan kode verifikasi dalam satu prompt. Kemudian meneruskan kata sandi sistem ke modul PAM berikutnya, yang harus dikonfigurasi dengan opsi use_first_pass .
Pada gilirannya, modul pam_google_authenticator juga mendukung opsi standar use_first_pass dan try_first_pass . Tetapi sebagian besar pengguna tidak perlu mengaturnya di pam_google_authenticator .
Jika Anda menemukan bahwa kode TOTP Anda tidak pernah berfungsi, ini paling umum hasil dari jam di server Anda berbeda dari yang ada di perangkat Android Anda. Modul PAM membuat upaya untuk mengkompensasi kemiringan waktu. Anda dapat mengajarkannya tentang jumlah condong yang Anda alami, dengan mencoba mencatatnya tiga kali berturut -turut. Pastikan Anda selalu menunggu 30 -an (tetapi tidak lagi), sehingga Anda mendapatkan tiga kode TOTP yang berbeda.
Beberapa administrator lebih suka bahwa kemiringan waktu tidak disesuaikan secara otomatis, karena melakukan hal itu menghasilkan konfigurasi sistem yang sedikit kurang aman. Jika Anda ingin menonaktifkannya, Anda dapat melakukannya pada baris perintah modul:
auth required pam_google_authenticator.so noskewadj
Jangan menambah penghitung untuk upaya hotp yang gagal. Biasanya Anda harus mengatur upaya kata sandi yang gagal ini oleh penyerang tanpa token jangan mengunci pengguna yang berwenang.
Izinkan pengguna untuk masuk tanpa OTP, jika mereka belum mengatur OTP.
Pam membutuhkan setidaknya satu jawaban SUCCESS dari suatu modul, dan nullok menyebabkan modul ini mengatakan IGNORE . Ini berarti bahwa jika opsi ini digunakan setidaknya satu modul lain harus mengatakan SUCCESS . Salah satu cara untuk melakukan ini adalah dengan menambahkan auth required pam_permit.so ke akhir konfigurasi PAM.
Secara default, modul PAM tidak menggemakan kode verifikasi ketika dimasukkan oleh pengguna. Dalam beberapa situasi, administrator mungkin lebih suka perilaku yang berbeda. Lewati opsi echo_verification_code ke modul untuk mengaktifkan Echoing.
Jika Anda ingin kode verifikasi yang berbasis counter alih-alih berbasis waktu, gunakan biner google-authenticator untuk menghasilkan kunci rahasia di direktori home Anda dengan opsi yang tepat. Dalam mode ini, clock scew tidak relevan dan opsi ukuran jendela sekarang berlaku untuk berapa banyak kode di luar yang saat ini yang akan diterima, untuk mengurangi masalah sinkronisasi.
Jika ada dan non-nol, berikan masa tenggang di mana kode verifikasi kedua tidak akan diminta. Coba atur detik ke 86400 untuk memungkinkan satu hari penuh antara kode yang meminta; atau 3600 selama satu jam.
Ini berfungsi dengan menambahkan pasangan (alamat IP, timestamp) ke file keamanan setelah login satu kali-password yang berhasil; Hanya sepuluh alamat IP berbeda yang dilacak.
Pilihan Berbahaya!
Dengan opsi ini penyerang dengan kemampuan untuk mengisi sistem file (server banjir dengan permintaan web, atau jika mereka memiliki akun, hanya mengisi disk ke atas) dapat memaksa situasi di mana kata-kata-kata dapat digunakan kembali, mengalahkan tujuan " satu kali ".
Secara default, jika opsi grace_period didefinisikan, modul PAM memerlukan beberapa ruang bebas untuk menyimpan alamat IP dan cap waktu login terakhir. Ini dapat mencegah akses jika server tidak memiliki ruang bebas atau jika terjadi kesalahan file konfigurasi pembaruan. Dengan opsi allow_readonly Anda dapat mengabaikan kesalahan apa pun yang dapat terjadi selama pembaruan file konfigurasi.