Kata sandi kadaluarsa dan login berbasis kunci SSH dengan UsePAM ya

12

Ada mesin SLES 11. Pengguna login melalui SSH dan pubkey (campuran, beberapa pengguna menggunakan kata sandi, beberapa menggunakan kunci ssh)

Sshd_config memiliki:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

Masalahnya: Jika kata sandi kedaluwarsa untuk pengguna yang menggunakan login pubkey, maka pengguna akan diminta untuk mengubah kata sandi.

Pertanyaannya: Bagaimana kita dapat mengatur konfigurasi PAM atau sshd untuk memungkinkan pengguna untuk login jika mereka memiliki kunci SSH yang valid dan kata sandi mereka kadaluwarsa? - Tanpa muncul "ubah kata sandi Anda".

UPDATE # 1: Solusinya tidak bisa: "UsePAM no"

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

UPDATE # 2: Solusinya tidak bisa: atur kata sandi pengguna agar tidak pernah kedaluwarsa

PEMBARUAN # 3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 
thequestionthequestion
sumber
Anda mungkin dapat melakukan ini dengan menghapus pam_unix.sodari sessionbagian /etc/pam.d/sshd(dan menggantinya dengan pam_lastlog.sojika tidak ada. Saya tidak yakin apakah pam_unix.so/sessionyang melakukan ini atau tidak, tapi rasanya seperti tempat yang tepat.
Patrick
1
atur akun pengguna agar tidak kedaluwarsa :)
Raza
@Raza: Terima kasih :) ide bagus, tetapi tidak bisa menjadi solusi :(
thequestionthequestion
coba ForcedPasswdChange Noini untuk SSH1
Raza
1
Saya menyadari bahwa ForcedPasswdChange Notidak akan berfungsi setelah kedaluwarsa. Anda mencari solusi yang memungkinkan pengguna kedaluwarsa untuk masuk
Raza

Jawaban:

10

Urutan operasi yang menyebabkan kata sandi yang kadaluarsa adalah sebagai berikut:

  • SSH menjalankan accounttahap PAM , yang memverifikasi bahwa akun itu ada dan valid. The accountpemberitahuan tahap itu password kadaluarsa, dan memungkinkan SSH tahu.
  • SSH melakukan otentikasi berbasis kunci. Tidak perlu PAM untuk ini, jadi tidak menjalankan authpanggung. Kemudian mengatur sesi login SSH dan menjalankan sessiontahap PAM .
  • Selanjutnya, SSH ingat bahwa PAM memberi tahu bahwa kata sandi telah kedaluwarsa, mencetak pesan peringatan, dan meminta PAM agar pengguna mengganti kata sandi. SSH kemudian terputus.

Semua ini dilakukan SSH, dan saya tidak melihat opsi SSH untuk mengkonfigurasi perilaku ini. Jadi, kecuali Anda ingin membangun versi khusus SSH dan / atau PAM, satu-satunya opsi yang saya lihat adalah untuk mencegah PAM melaporkan kata sandi yang kedaluwarsa ke SSH. Jika Anda melakukan ini, itu akan menonaktifkan pemeriksaan kadaluarsa SSH kadaluarsa sepenuhnya , bahkan jika pengguna login lebih dari SSH dengan kata sandi. Metode login lain (non-SSH) masih akan memeriksa kedaluwarsa kata sandi.

pam.d/sshdFile Anda saat ini memiliki account include common-accountentri. Saya kira ada common-accountfile yang berisi referensi pam_unix.so. Ini adalah baris yang memeriksa kata sandi yang kedaluwarsa.

Anda mungkin tidak ingin menyentuh common-accountfile itu sendiri, karena ini digunakan untuk metode login lainnya. Sebaliknya, Anda ingin menghapus includedari pam.d/sshdfile Anda . Jika ada fungsi lain common-accountselain itu pam_unix.so, Anda mungkin ingin memasukkannya langsung ke dalamnya pam.d/sshd.

Akhirnya, ingatlah bahwa ini adalah modifikasi pada keamanan sistem Anda dan Anda tidak seharusnya hanya mempercayai saya untuk memberi Anda nasihat yang baik. Baca bagaimana PAM bekerja jika Anda tidak terbiasa dengannya. Beberapa tempat mulai mungkin man 7 PAM, man 5 pam.confdan man 8 pam_unix.

Jander
sumber
Penjelasan yang bagus tentang urutan operasi, terima kasih.
M_dk
3

Opsi ditambahkan ke pam_unix.so (sekitar Feb-2016) disebut no_pass_expiry ( perubahan kode sumber di sini atau halaman manual di sini ). Pada dasarnya ia memberitahu pam_unix untuk mengabaikan kata sandi yang kadaluwarsa jika sesuatu selain pam_unix digunakan untuk auth, misalnya jika sshd melakukan auth.

Akibatnya, jika Anda memiliki versi pam_unix.so yang berisi opsi itu, Anda harus dapat mengonfigurasi PAM ke:

  1. Masih memperingatkan tetapi tidak memerlukan perubahan ke kata sandi yang kedaluwarsa jika kunci SSH digunakan untuk mengautentikasi melalui ssh
  2. Membutuhkan perubahan kata sandi dari kata sandi yang kadaluwarsa jika login / kata sandi melalui pam_unix.so digunakan untuk mengotentikasi melalui ssh
  3. Tidak memengaruhi urutan auth lainnya (mis. Via layanan login).

Sebagai contoh, saya mengkonfigurasi server RHEL 7 untuk melakukan hal di atas dengan hanya memperbarui /etc/pam.d/sshd dan menambahkan pam_unix.so no_pass_expiry ke jenis akun dan kata sandi, misalnya

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth
Todd
sumber
1
Hanya mencoba ini dan berhasil. Anda dapat memeriksa apakah PAM Anda mendukung opsi ini atau tidak dengan mencari "no_pass_expiry" ada atau tidak di dalam halaman manual "man 8 pam_unix".
Tomofumi
Perubahan kode dari 2016 masih belum ada di Ubuntu 18.04 ... :(
ColinM
0
  • Anda mungkin tidak ingin mengubah PAM atau sshd_config Anda karena alasan kepatuhan.
  • Anda mungkin menggunakan Kata sandiuthentikasi no di sshd_config
  • Anda mungkin memiliki kata sandi acak.
  • Anda bahkan mungkin telah menerapkan kepatuhan CIS.
  • Tetap saja pengguna Anda mendapatkan prompt

Kemudian root dapat mengubah kata sandi tanggal yang diubah:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
bbaassssiiee
sumber