
~처럼처음 로그인할 때만 메시지를 표시하도록 pam_mount를 구성합니다., 그러나 권장 답변은 RHEL 9에서는 작동하지 않습니다(원래 질문에서는 작동하지 않는 것 같습니다).
Red Hat Enterprise Linux 9에서 DUO 2단계 인증을 설정해야 합니다.지시하다공급업체 웹사이트의 설정으로 인해 사용자가 비밀번호를 입력할 때마다 2FA 질문에 응답하게 됩니다 sudo
. 예를 들어 처음 로그인할 때만 2FA 질문이 표시되도록 이 설정을 수정하고 싶습니다.
다음을 포함하는 줄 뒤에 /etc/authselect/password-auth에 다음을 추가했습니다 pam_unix.so
.
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
auth sufficient pam_duo.so
pam_succeed_if 조건은 연결된 질문과 Arch 위키(자체 질문에 연결되어 있음) 모두에서 제안됩니다. 그러나 pam_succeed_if 조건은 매번 실패하며 이제 DUO는 시스템이 잠금 해제될 때마다 2FA를 묻는 메시지를 표시합니다. 사용자가 이미 로그인한 경우 DUO를 안정적으로 건너뛰는 방법은 무엇입니까?
답변1
최초 로그인 시에만 2FA 인증을 원할 경우 pam_duo.so
최초 로그인을 처리하는 서비스만 참조해야 합니다.
주의해서 다음 서비스를 명시적으로 나열할 수 있습니다.예2FA를 건너뛸 수 있으므로 2FA가 필요하다는 것을 인식하지 못한 서비스에 실수로 2FA가 없는 "구멍"을 남기는 일이 없습니다.
선
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
의미: ""service=systemd-user" 조건이 일치하면 다음 auth
구성 줄을 건너뛰고, 그렇지 않으면 해당 줄이 전혀 존재하지 않는 것처럼 실행을 계속합니다."
systemd-user
두 서비스(예: 및 )에 대해 유사한 건너뛰기를 제공하려면 sudo
다음을 수행할 수 있습니다.
auth [success=2 default=ignore] pam_succeed_if.so service = sudo quiet
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
auth sufficient pam_duo.so
첫 번째 줄이 일치하면 인증을 요청하는 서비스가 임을 이미 알고 있으므로 sudo
인지 확인할 필요가 없습니다 systemd-user
. 따라서 systemd-user
확인 및 pam_duo.so
인증 모듈 이라는 두 줄을 건너뜁니다 .
2FA 없는 인증도 허용하려면 su
(예를 들어) 세 번째 줄을 추가하면 됩니다.
auth [success=3 default=ignore] pam_succeed_if.so service = su quiet
auth [success=2 default=ignore] pam_succeed_if.so service = sudo quiet
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
auth sufficient pam_duo.so
등.
언제나 그렇듯이 PAM 구성을 수정할 때는 다음을 수행하는 것이 좋습니다.로그아웃하지 마세요변경 사항을 테스트한 후: SSH 연결을 통해 변경한 경우 첫 번째 연결에서 로그아웃하는 대신 두 번째 SSH 연결을 열어서 테스트하세요. 로컬에서 변경하는 경우 두 번째 터미널 창을 열고 그곳에서 루트로 로그인하거나 다른 가상 콘솔로 전환하고 동일한 방식으로 텍스트 모드로 로그인하십시오. 심각한 실수를 저지른 것을 발견한 경우 변경 사항을 취소할 수 있도록 이미 전체 루트 권한으로 로그인한 세션이 필요합니다.
프로덕션 시스템에서는 개인적으로 먼저 로그인합니다.두번째실수로 "두뇌보다 빠른 손가락" 로그아웃을 방지하기 위해 PAM을 변경하기 전에 SSH로 연결하고 루트로 전환합니다.
답변2
다른 답변의 정보를 사용하여 작동시킬 수 있었습니다. 첫째, 적어도 GNOME에서는 PAM 모듈만 사용하여 로그인과 잠금 해제를 구별할 수 있는 방법이 없습니다.이 답변. 이 질문에 대한 다른 답변은 pam_script
해결 방법으로 github을 사용하는 것을 제안하지만 저는 내 PAM 스택에서 다른 사람의 github 프로젝트를 사용하고 싶지 않습니다. 다행히도 pam_exec
동일한 작업을 수행하는 내장 함수가 있습니다.
먼저 스크립트를 수정하세요.이 답변사용 pam_exec
:
#!/bin/sh
SESSION_ID=$(loginctl session-status | head -1 | cut -d' ' -f1)
if [ -z "$SESSION_ID" ]; then
exit 1
fi
if ! loginctl show-session "$SESSION_ID" | grep '^LockedHint=yes$' > /dev/null; then
exit 1
fi
# Current session is locked, return success
exit 0
원하는 위치에 저장하고 /etc/pam.d/is-current-session-locked
그에 따라 전달된 경로를 수정하기만 하면 됩니다. pam_exec
스크립트를 실행 가능하게 만드십시오.
SESSION_ID
대신 에 저장된 명령을 사용하는 이유 XDG_SESSION_ID
는 GNOME(적어도 RHEL 9에서는)이 에 아무것도 저장하지 않기 때문입니다 XDG_SESSION_ID
. pam_exec
명령의 종료 값이 확인되고 종료 값 자체가 에 따라 달라지기 때문입니다. PAM 스택 로직.
다음으로 for 줄 앞에 다음 줄을 추가했습니다 pam_duo.so
.
auth sufficient pam_exec.so quiet /etc/pam.d/is-current-session-locked/pam_script_auth.sh
그 정도면 충분하기 때문에 pam_duo
처리하고 나면 아무것도 남지 않습니다.
물론 다른 답변에서 언급했듯이 로그인하여 다른 세션에서 루트 쉘을 갖는 것이 좋습니다. 이 문제를 해결하는 동안 여러 번 잠겼지만 루트 셸이 열려 있었기 때문에 해당 세션으로 전환하고 PAM 파일을 복구하여 그래픽 세션을 잠금 해제할 수 있었습니다.