Dimungkinkan untuk melakukan ini dengan merantai bersama modul PAM. Tapi sebelum saya masuk ke detail:
Mengkonfigurasi PAM secara tidak benar dapat dan AKAN mencegah Anda masuk ke sistem Anda
Untungnya Anda selalu dapat boot ke mode pengguna tunggal dan memperbaiki masalah, tetapi hanya diingatkan bahwa PAM bukanlah sesuatu yang Anda ingin mengacaukan lebih dari yang diperlukan.
Pokoknya, ide di balik ini adalah bahwa adalah mungkin untuk memanfaatkan susun modul PAM memastikan bahwa pam-google-authenticator
, pam_unix
(ini cek Anda password) dan modul sertifikat semua harus berhasil untuk memungkinkan Anda akses. Secara default, PAM dikonfigurasi untuk memungkinkan modul otentikasi mana pun untuk mengotentikasi Anda, melompati yang lain.
Di /etc/pam.d/common-auth, Anda akan melihat di dekat bagian atas sebuah garis yang mirip dengan yang berikut ini:
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
Ini memberitahu PAM bahwa harus pam_unix.so
berhasil, ia akan melewati dua aturan berikutnya (yang biasanya merupakan modul otentikasi lain kemudian pam_deny.so
) dan melanjutkan ke modul opsional. Namun, jika modul gagal, maka akan diabaikan, dan kontrol akan diteruskan ke modul berikutnya dalam rantai. Ini melanjutkan setiap modul otentikasi hingga kontrol melompat ke blok opsional, atau PAM hits pam_deny.so dan gagal di sana.
Ini dapat ditingkatkan untuk memastikan bahwa pam-google-authenticator
, pam_unix.so
dan modul PAM sertifikat Anda semua harus berhasil memungkinkan Anda mengakses. Saya tidak tahu nama modul autentikator Google atau modul sertifikat yang Anda gunakan, tetapi Anda harus dapat menemukannya di file common-auth Anda. Jadi dengan meletakkan sesuatu seperti ini di atas:
auth requisite pam_unix.so nullok_secure
auth requisite pam_google_authenticator.so
auth requisite pam_certificate_auth.so
auth [success=<n>] pam_permit.so
Mengganti <n>
dengan jumlah modul antara modul pam_permit.so di sini dan pam_permit.so
modul berikutnya - dengan kata lain ini harus diatur ke kode [sukses = n default = abaikan] modul-modul auth atas + 1. Sintaks ini agak funky , tetapi pada dasarnya melewatkan modul auth setelah modul di atas berhasil.
Tentu saja, Anda mungkin bertanya-tanya bagaimana cara membatasi otentikasi tiga langkah ini hanya pada akun pengguna Anda. Ini dapat dilakukan dengan pam_succeed_if.so
modul, dan harus dimasukkan di atas blok auth tiga langkah yang dijelaskan di atas:
auth [success=ignore default=4] pam_succeed_if.so user = <username>
Di mana <username>
diganti oleh nama pengguna Anda. Baris ini hanya mengatakan bahwa seharusnya pam_succeed_if.so berhasil (alias nama pengguna Anda cocok dengan nama pengguna pada baris itu) maka PAM harus melanjutkan dengan modul berikutnya, yang merupakan modul auth tiga langkah. Jika tidak, PAM harus melompat ke modul nyata, yang berjarak 4 modul dari modul ini.
Untuk mencocokkan banyak hal, misalnya keanggotaan grup bersama dengan nama pengguna tertentu, beberapa baris harus digunakan, misalnya:
auth [success=1 default=ignore] pam_succeed_if.so user = <username>
auth [success=ignore default=4] pam_succeed_if.so user ingroup <group>
Sebelum melakukan semua ini, saya akan membuat cadangan file auth umum, dan juga membiasakan diri dengan mode pengguna tunggal dan cara mengembalikan file lama jika terjadi keadaan darurat. Konfigurasi ini belum diuji oleh saya, tetapi harus berfungsi.
Untuk pengujian ini pertama kali, buka satu atau dua root root, dan biarkan saja. Ini bertindak sebagai cadangan jika terjadi kesalahan, karena Anda dapat dengan mudah mengganti common-auth dengan cadangan. Lalu, buat perubahan ini. Selanjutnya, coba gunakan su
untuk masuk ke akun pengguna Anda - Anda harus melalui proses otentikasi tiga langkah.
Dokumentasi lengkap untuk pam_succeed_if.so
modul dapat ditemukan di http://linux.die.net/man/8/pam_succeed_if