Mật khẩu hết hạn và khóa SSH dựa trên đăng nhập với UsePAM có


12

Có máy SLES 11. Người dùng đăng nhập thông qua SSH và pubkey (hỗn hợp, một số người dùng sử dụng mật khẩu, một số sử dụng khóa ssh)

Sshd_config có:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

Vấn đề: Nếu mật khẩu hết hạn cho người dùng sử dụng đăng nhập pubkey, thì người dùng sẽ được nhắc thay đổi mật khẩu.

Câu hỏi: Làm thế nào chúng ta có thể đặt cấu hình PAM hoặc sshd để cho phép người dùng đăng nhập nếu họ có khóa SSH hợp lệ và mật khẩu của họ đã hết hạn? - Không bật lên "thay đổi mật khẩu của bạn".

CẬP NHẬT # 1: Giải pháp không thể là: "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:~ # 

CẬP NHẬT # 2: Giải pháp không thể là: đặt mật khẩu người dùng thành không bao giờ hết hạn

CẬP NHẬT # 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 # 

Bạn có thể thực hiện điều này bằng cách xóa pam_unix.sokhỏi sessionphần của /etc/pam.d/sshd(và thay thế nó bằng pam_lastlog.sonếu nó không ở đó. Tôi không chắc liệu đó pam_unix.so/sessioncó phải là người làm điều này hay không, nhưng nó cảm thấy như đúng nơi.
Patrick

1
thiết lập tài khoản người dùng để không bao giờ hết hạn :)
Raza

@Raza: Cảm ơn :) ý tưởng tuyệt vời, nhưng không thể là một giải pháp :(
thequestionthequestion

hãy thử ForcedPasswdChange Nođiều này là dành cho SSH1
Raza

1
Tôi nhận ra rằng ForcedPasswdChange Nosẽ không hoạt động sau khi hết hạn. bạn đang tìm kiếm một giải pháp cho phép người dùng hết hạn đăng nhập
Raza

Câu trả lời:


10

Thứ tự các thao tác gây ra dấu nhắc mật khẩu đã hết hạn như sau:

  • SSH chạy accountgiai đoạn PAM , xác minh rằng tài khoản tồn tại và hợp lệ. Các accountthông báo giai đoạn mà các mật khẩu đã hết hạn, và cho phép SSH bí quyết.
  • SSH thực hiện xác thực dựa trên khóa. Nó không cần PAM cho việc này, vì vậy nó không chạy trên authsân khấu. Sau đó, nó sẽ thiết lập phiên đăng nhập SSH và chạy sessiongiai đoạn PAM .
  • Tiếp theo, SSH nhớ rằng PAM đã nói với nó rằng mật khẩu đã hết hạn, in một thông báo cảnh báo và yêu cầu PAM yêu cầu người dùng thay đổi mật khẩu. SSH sau đó ngắt kết nối.

Tất cả điều này là của SSH và tôi không thấy bất kỳ tùy chọn SSH nào để định cấu hình hành vi này. Vì vậy, trừ khi bạn muốn xây dựng một phiên bản tùy chỉnh của SSH và / hoặc PAM, tùy chọn duy nhất tôi thấy là ngăn PAM báo cáo mật khẩu đã hết hạn cho SSH. Nếu bạn làm điều này, nó sẽ vô hiệu hóa hoàn toàn kiểm tra mật khẩu qua SSH , ngay cả khi người dùng đang đăng nhập qua SSH bằng mật khẩu. Các phương thức đăng nhập khác (không phải SSH) vẫn sẽ kiểm tra hết hạn mật khẩu.

pam.d/sshdTập tin hiện tại của bạn có một account include common-accountmục. Tôi đoán có một common-accounttập tin có chứa một tài liệu tham khảo pam_unix.so. Đây là dòng kiểm tra mật khẩu đã hết hạn.

Bạn có thể không muốn chạm vào common-accounttệp, vì nó được sử dụng cho các phương thức đăng nhập khác. Thay vào đó, bạn muốn xóa tệp includekhỏi pam.d/sshdtệp của bạn . Nếu có các chức năng khác common-accountbên cạnh pam_unix.so, bạn có thể muốn đặt chúng trực tiếp vào pam.d/sshd.

Cuối cùng, hãy nhớ rằng đây là một sửa đổi đối với bảo mật hệ thống của bạn và bạn không nên tin tưởng tôi một cách mù quáng để cho bạn lời khuyên tốt. Đọc về cách PAM hoạt động nếu bạn không quen với nó. Một số nơi bắt đầu có thể là man 7 PAM, man 5 pam.confman 8 pam_unix.


Giải thích tốt đẹp về thứ tự của hoạt động, cảm ơn.
M_dk

3

Một tùy chọn đã được thêm vào pam_unix.so (khoảng tháng 2-2016) được gọi là no_pass_Exiry ( thay đổi mã nguồn ở đây hoặc trang man ở đây ). Về cơ bản, nó báo cho pam_unix bỏ qua mật khẩu đã hết hạn nếu một cái gì đó không phải là pam_unix được sử dụng cho auth, ví dụ: nếu sshd thực hiện auth.

Do đó, nếu bạn có phiên bản pam_unix.so có tùy chọn đó, bạn sẽ có thể định cấu hình PAM thành:

  1. Vẫn cảnh báo nhưng không yêu cầu thay đổi mật khẩu đã hết hạn nếu khóa SSH được sử dụng để xác thực qua ssh
  2. Yêu cầu thay đổi mật khẩu của mật khẩu đã hết hạn nếu đăng nhập / mật khẩu qua pam_unix.so được sử dụng để xác thực qua ssh
  3. Không ảnh hưởng đến bất kỳ chuỗi xác thực nào khác (ví dụ: thông qua dịch vụ đăng nhập).

Ví dụ: tôi đã cấu hình máy chủ RHEL 7 để thực hiện các thao tác trên bằng cách cập nhật /etc/pam.d/sshd và thêm pam_unix.so no_pass_Exiry vào cả loại tài khoản và mật khẩu, ví dụ:

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

1
Chỉ cần thử điều này và nó hoạt động. Bạn có thể kiểm tra xem PAM của bạn có hỗ trợ tùy chọn này hay không bằng cách tìm kiếm "no_pass_Exiry" có tồn tại hay không trong trang man "man 8 pam_unix".
Tomofumi

Thay đổi mã từ năm 2016 vẫn chưa có trong Ubuntu 18.04 ... :(
ColinM

0
  • Bạn có thể không muốn thay đổi PAM hoặc sshd_config vì lý do tuân thủ.
  • Bạn có thể đang sử dụng PasswordAuthentication no trong sshd_config
  • Bạn có thể có mật khẩu ngẫu nhiên.
  • Bạn thậm chí có thể đã thực hiện tuân thủ CIS.
  • Người dùng của bạn vẫn nhận được lời nhắc

Sau đó root có thể chỉnh mật khẩu thay đổi ngày:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.