Otentikasi tiga langkah?

9

Saya menggunakan Ubuntu.

Saya hanya ingin tahu apakah mungkin untuk memiliki libpam-google-authenticator (yang memungkinkan Anda masuk menggunakan kode yang dihasilkan oleh telepon Anda) DAN otentikasi sertifikat diatur untuk bekerja bersama, dan jika mungkin, bagaimana saya akan lanjut tentang pengaturannya. Jadi - untuk masuk ke akun saya, Anda harus memiliki kata sandi, telepon saya (dan passcode-nya) DAN sertifikat / kunci pribadi dan kata sandinya.

Saya mendapatkan keduanya untuk bekerja secara mandiri tetapi tidak pernah bisa membuat mereka bekerja bersama. Tapi saya yakin itu mungkin.

Terima kasih.

Jesse W
sumber
Biasanya Anda tidak mendapatkan banyak karena faktor duplikat. Sebuah sertifikat dan pembuat kode cocok dengan faktor 'sesuatu yang Anda miliki'. Kata sandi cocok dengan 'sesuatu yang Anda tahu'. Faktor umum lainnya adalah 'sesuatu Anda' (biometrik).
Zoredache

Jawaban:

8

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.soberhasil, 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.sodan 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.somodul 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.somodul, 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 suuntuk masuk ke akun pengguna Anda - Anda harus melalui proses otentikasi tiga langkah.

Dokumentasi lengkap untuk pam_succeed_if.somodul dapat ditemukan di http://linux.die.net/man/8/pam_succeed_if

Xenopathic
sumber
Jawaban yang sangat bagus! Jika saya dapat memperbaiki ini lebih dari satu kali, saya akan melakukannya.
Aaron Miller
Terima kasih! Meskipun - Untuk info masuk sertifikat, saya menambahkan kunci publik saya ke .ssh / otor_keys (menggunakan pengaturan RSAAuthentication dan PubkeyAuthentication di sshd_config) dan untuk kode OTP saya menggunakan pam_google_authenticator - google-authenticator.googlecode.com/hg . Jadi bagaimana cara kerjanya?
Jesse W
@ JesseW Agar ini berfungsi, Anda perlu mengatur SSHD untuk menggunakan PAM dan juga kunci publik. Meskipun saya tidak yakin dengan spesifikasinya, Anda tentu perlu mengatur ChallengeResponseAuthenticationdan UsePAMke 'ya', kemudian mengatur garis-garis yang terinci dalam jawaban saya di atas menjadi /etc/pam.d/sshd atau /etc/pam.d/common -auth, tergantung pada apakah Anda ingin melakukan ini untuk semua login atau hanya SSH. Ingatlah untuk menghapus baris filler 'pam_certificate_auth.so' dan ubah baris [success = <n> sebagai hasilnya.
Xenopathic
2

Saya membaca posting ini dan berpikir itu kedengarannya keren - inilah cara saya mendapatkan otentikasi tiga faktor untuk bekerja. Saya menulis posting blog di sini .

Pada dasarnya, saya mengatur Google Authenticator dan kata sandi di PAM, kemudian setelah itu mengatur otentikasi kunci publik di OpenSSH (ini memintas dua yang lain), dan akhirnya diperlukan oleh OpenSSH untuk juga mengautentikasi melalui PAM (baris terakhir)

Dari / etc / ssh / sshd_conf

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
Einar
sumber
1

Hanya Pubkey + GoogleAuth yang harus Anda tambahkan ke atas /etc/pam.d/sshd Anda

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

Saya berasumsi Anda memiliki OpenSSH> = 6.2 dan sshd_config diedit

Untuk keamanan lebih paranoid, tambahkan beberapa konfigurasi tambahan: D

x4k3p
sumber