Bagaimana cara menolak akses ke akun AD yang dinonaktifkan melalui kerberos di pam_krb5?

10

Saya memiliki direktori AD / Linux / LDAP / KRB5 yang berfungsi dan pengaturan otentikasi, dengan satu masalah kecil. Ketika sebuah akun dinonaktifkan, otentikasi publickey SSH masih memungkinkan login pengguna.

Jelas bahwa klien kerberos dapat mengidentifikasi akun yang dinonaktifkan, karena kinit dan kpasswd mengembalikan "Kredensial klien telah dicabut" tanpa kata sandi / interaksi lebih lanjut.

Bisakah PAM dikonfigurasikan (dengan "UsePAM yes" di sshd_config) untuk melarang login untuk akun yang dinonaktifkan, di mana otentikasi dilakukan oleh publickey? Ini sepertinya tidak berhasil:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

Tolong jangan perkenalkan winbind dalam jawaban Anda - kami tidak menggunakannya.

Phil
sumber

Jawaban:

4

Saya telah membaca di tempat lain orang lain meminta SSH untuk "diperbaiki" sehingga akun yang terkunci tidak dapat masuk melalui SSH. (lihat Bug Debian 219377) Permintaan ini ditolak sebagai tambalan "karena itu menghancurkan beberapa harapan dari pengguna [yang] terbiasa dengan passwd -l hanya mengunci passwd." (lihat Bug Debian 389183) misalnya beberapa orang INGIN dapat mengunci akun dari login kata sandi, tetapi masih mengizinkan akses kunci SSH.

PAM tidak akan menolak otentikasi kunci SSH ke akun yang baru saja dikunci (mis. Karena upaya kata sandi yang tidak valid, karena otentikasi kunci SSH dirancang untuk tidak memperhatikan bidang kata sandi, yang merupakan asal dari mana akun biasanya dikunci.)

Saya mengerti bahwa entri hash kata sandi secara implisit diperiksa pada waktu pam_authenicate (), bukan pada waktu pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () sama sekali tidak memeriksa hash kata sandi, dan pam_authenticate () tidak dipanggil selama otentikasi kunci publik.

Jika niat Anda adalah untuk menonaktifkan akun dari login secara terpusat, ada beberapa solusi yang mungkin, termasuk:

Mengubah shell login.

(re) memindahkan file yang diotorisasi

Opsi lain untuk menolak akses bisa berupa penggunaan DenyGroups atau AllowGroups di sshd_config. (lalu menambahkan pengguna ke grup "sshdeny", atau menghapusnya dari grup "sshlogin" untuk menonaktifkannya agar tidak masuk.) (baca di sini: https://help.ubuntu.com/8.04/serverguide/user-management .html )

Dari http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL Saya membaca: "Masalahnya adalah pam_unix memeriksa hanya tanggal kedaluwarsa dari entri bayangan, bukan isi bidang hash kata sandi." Jika ini benar, apakah akan kedaluwarsa akun daripada menguncinya melakukan apa yang Anda butuhkan?

Jawaban untuk pertanyaan Anda mungkin "ya, jika Anda menonaktifkannya di tempat lain selain bidang kata sandi"

JohnGH
sumber
4

Melakukan pekerjaan rumah lagi, dan saya menjawab pertanyaan saya sendiri.

Di pam_krb5 ( pam_krb5-2.3.14-1/src/acct.c), RedHat , kecuali modul berpartisipasi dalam tahap otentikasi, fungsi pam_sm_acct_mgmt () mengembalikan PAM_IGNORE atau PAM_USER_UNKNOWN tergantung pada konfigurasi modul. Karena itu akan membutuhkan perubahan pada kode pam_krb5 untuk melakukan apa yang saya inginkan.

Jawaban JohnGH adalah solusi yang baik; menggunakan atribut "proxy" untuk menyampaikan makna yang sama, seperti memecah shell atau menambahkan ke grup "pengguna yang dinonaktifkan".

Solusi lain (sebagian diuji) adalah menetapkan tanggal kedaluwarsa akun di masa lalu, dan menggunakan modul seperti pam_unix untuk gagal memeriksa akun. Ini menggunakan LDAP, bukan KRB5, tetapi kueri terhadap direktori pengguna yang dikelola secara terpusat yang sama.

Phil
sumber
2

Otentikasi berbasis kunci SSH tidak tergantung pada PAM. Anda memiliki solusi berikut:

  • nonaktifkan otentikasi berbasis kunci di sshd_config
  • ubah dan kompilasi ulang sshd dan tambahkan hook sehingga autentis berbasis key akan memeriksa juga apakah akun itu valid melalui pam.

Jika Anda ingin menggunakan login tanpa kata sandi melalui kerberos, Anda harus memastikan bahwa:

  • Anda tidak menggunakan pam untuk sshd
  • Anda memiliki kerbero yang dikonfigurasi dengan benar. Misalnya kamu bisakinit -k host/server1.example.com@DOMAIN
  • Anda sshd dikonfigurasi untuk menggunakan gssapi:

    KerberosAuthentication ya GSSAPIAuthentication ya GSSAPICleanupKredensial ya UsePAM no

  • Anda menggunakan klien ssh kerberized seperti Putty v0.61 atau yang lebih baru.

Mircea Vutcovici
sumber
1
Saya tidak setuju bahwa kunci publik SSH auth independen dari PAM. Menambahkan account optional pam_echo.so file=/etc/redhat-releaseke /etc/pam.d/sshd menyebabkan konten file dicetak saat menggunakan login auth berbasis kunci (coba).
Phil
Saya pikir pam hanya digunakan untuk akun (misalnya untuk membuat folder rumah) dan bukan untuk auth. Saya sedang memeriksa kasus ini sekarang.
Mircea Vutcovici