UsePAM을 사용한 만료된 비밀번호 및 SSH 키 기반 로그인 예

UsePAM을 사용한 만료된 비밀번호 및 SSH 키 기반 로그인 예

SLES 11 머신이 있습니다. 사용자는 SSH 및 pubkey를 통해 로그인합니다(혼합, 일부 사용자는 비밀번호를 사용하고 일부는 SSH 키를 사용함)

sshd_config에는 다음이 포함됩니다.

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

문제: pubkey 로그인을 사용하는 사용자의 비밀번호가 만료되면 사용자에게 비밀번호를 변경하라는 메시지가 표시됩니다.

질문:사용자가 유효한 SSH 키를 가지고 있고 비밀번호가 만료된 경우 로그인할 수 있도록 PAM 또는 sshd 구성을 어떻게 설정할 수 있습니까? -없이"비밀번호 변경" 팝업이 뜹니다.

업데이트#1: 해결책은 "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:~ # 

업데이트#2: 해결책은 다음과 같습니다. 사용자 비밀번호가 만료되지 않도록 설정하세요.

업데이트#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 # 

답변1

만료된 비밀번호 프롬프트를 발생시키는 작업 순서는 다음과 같습니다.

  • accountSSH는 계정이 존재하고 유효한지 확인하는 PAM 단계를 실행합니다 . 스테이지 account에서는 비밀번호가 만료되었음을 확인하고 SSH에 알립니다.
  • SSH는 키 기반 인증을 수행합니다. 이를 위해 PAM이 필요하지 않으므로 스테이지를 실행하지 않습니다 auth. 그런 다음 SSH 로그인 세션을 설정하고 PAM session단계를 실행합니다.
  • 다음으로 SSH는 PAM이 비밀번호가 만료되었음을 알린 것을 기억하고 경고 메시지를 인쇄한 다음 PAM에게 사용자에게 비밀번호를 변경하도록 요청합니다. 그런 다음 SSH 연결이 끊어집니다.

이 모든 작업은 SSH에서 수행되며 이 동작을 구성하는 SSH 옵션은 표시되지 않습니다. 따라서 SSH 및/또는 PAM의 사용자 정의 버전을 구축하려는 경우가 아니면 내가 볼 수 있는 유일한 옵션은 PAM이 만료된 비밀번호를 SSH에 보고하지 못하도록 방지하는 것입니다. 이렇게 하면,SSH를 통한 만료된 비밀번호 확인을 완전히 비활성화합니다., 사용자가 비밀번호를 사용하여 SSH를 통해 로그인하는 경우에도 마찬가지입니다. SSH가 아닌 다른 로그인 방법은 여전히 ​​비밀번호 만료를 확인합니다.

현재 pam.d/sshd파일에 항목이 있습니다 account include common-account. common-account에 대한 참조가 포함된 파일이 있다고 가정합니다 pam_unix.so. 만료된 비밀번호를 확인하는 라인입니다.

common-account파일 자체는 다른 로그인 방법에 사용되므로 파일 자체를 건드리고 싶지 않을 것입니다 . 대신 파일 include에서 을(를) 제거하려고 합니다 pam.d/sshd. common-account이외 의 다른 기능이 있는 경우 pam_unix.so해당 기능을 에 직접 추가할 수 있습니다 pam.d/sshd.

마지막으로, 이는 시스템 보안에 대한 수정이므로 제가 좋은 조언을 제공한다고 맹목적으로 신뢰해서는 안 됩니다. PAM에 익숙하지 않다면 PAM 작동 방식을 읽어보세요. 일부 시작 위치는 man 7 PAM, man 5 pam.conf및 일 수 있습니다 man 8 pam_unix.

답변2

no_pass_expiry라는 옵션이 pam_unix.so(2016년 2월경)에 추가되었습니다(여기서 소스코드 변경또는맨페이지는 여기). 기본적으로 이는 pam_unix가 아닌 다른 것이 인증에 사용된 경우(예: sshd가 인증을 수행한 경우) 만료된 비밀번호를 무시하도록 pam_unix에 지시합니다.

결과적으로 해당 옵션이 포함된 pam_unix.so 버전이 있는 경우 PAM을 다음과 같이 구성할 수 있습니다.

  1. 여전히 경고하지만 SSH를 통해 인증하는 데 SSH 키를 사용한 경우 만료된 비밀번호를 변경할 필요는 없습니다.
  2. SSH를 통해 인증하는 데 pam_unix.so를 통한 로그인/비밀번호를 사용한 경우 만료된 비밀번호의 비밀번호 변경을 요구합니다.
  3. 다른 인증 순서(예: 로그인 서비스를 통해)에는 영향을 주지 않습니다.

예를 들어, 간단히 /etc/pam.d/sshd를 업데이트하고 계정 및 비밀번호 유형 모두에 pam_unix.so no_pass_expiry를 추가하여 위 작업을 수행하도록 RHEL 7 서버를 구성했습니다.

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

답변3

  • 규정 준수 이유로 PAM 또는 sshd_config를 변경하고 싶지 않을 수도 있습니다.
  • 당신은 사용하고있을 수도 있습니다비밀번호인증번호sshd_config에서
  • 임의의 비밀번호가 있을 수 있습니다.
  • CIS 준수를 구현했을 수도 있습니다.
  • 여전히 사용자는 메시지를 받습니다.

그런 다음 루트는 비밀번호 변경 날짜를 조정할 수 있습니다.

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

관련 정보