SSH를 통해 Linux 서버에 연결하는 사용자가 Active Directory(Centrify)를 사용하여 인증되었는지 확인하려고 합니다.
그가 로컬 계정( 위치 /etc/passwd
)을 사용하는 경우 Active Directory 계정을 사용하라는 경고를 표시한 다음 다시 로그인하라는 메시지를 표시해야 합니다.
나의 첫 번째 시도는 PAM 모듈 pam_script를 사용하여 /etc/pam.d/login
사용자가 로그인할 때 현재 사용자 이름이 /etc/passwd에 있는지 확인하고, 발견되면 경고를 표시하고 login
명령을 다시 호출하는 스크립트를 실행하는 것이었습니다.
다음 줄을 추가했습니다./etc/pam.d/login
session required pam_script.so runas=root
이 줄은 다음을 포함하는 스크립트 파일을 실행합니다 /etc/security/onsessionopen
.
#!/bin/sh
username=$1
if [ $(grep -c '^'$username':' /etc/passwd) = 1 ]
then
echo "Warning, please user your AD credentials"
login
fi
그러나 SSH를 사용할 때도 동일한 시나리오가 발생합니다 /etc/pam.d/sshd
. 스크립트는 실행되지만 텍스트나 로그인 프롬프트는 표시되지 않습니다.
어떤 아이디어가 있나요? 감사해요
답변1
광고를 통해 연결되었는지, 로컬로 연결되었는지 확인하는 것은 비교적 사용 id
하기 쉽습니다 /etc/passwd
. 다음 단계는 /etc/profile
경고 메시지를 내보낼 수 있는 기능을 갖추는 것입니다 .
답변2
문제의 계정 쉘을 변경하는 것이 /etc/passwd
좋을 것입니다 .
예를 들어 이것을 넣고 /usr/local/etc/mustuseadlogin
실행 가능하게 만듭니다.
#!/bin/sh
echo
echo "Please log in with AD authentication" >&2
echo
sleep 10
exit 0
이제 수정 /etc/passwd
(사용 권장 vipw
)하고 영향을 받는 모든 계정의 마지막 필드를 로 변경합니다 /usr/local/etc/mustuseadlogin
. 예를 들어,
roaima:x:1001:1001:I am roaima:/home/roaima:/usr/local/etc/mustuseadlogin
답변3
표준 "로그인"을 위한 훌륭한 솔루션입니다. 불행히도 "sshd"를 사용하여 동일한 동작을 수행할 행운이 많지 않을 것이라고 생각합니다. 이는 연결을 설정할 때 sshd에서 사용하는 기본 연결 프로세스 때문입니다. PAM 스택(또는 다른 제안에서와 같이 구성 파일 비트)에 도달할 때 사용자 이름은 이미 SSH 클라이언트에 의해 제출되었습니다.
이에 대해 더 자세히 설명하는 리소스는 다음과 같습니다.https://serverfault.com/questions/330310/force-ssh-to-prompt-for-user
이 정보를 고려하면 이상적인 해결책은 스크립트(또는 /etc/profile 추가)를 고수하는 것이지만 "sshd" 스택의 경우 "로그인"을 누르는 대신 10초 동안 잠자기 상태로 두는 것입니다. 뭔가(경고가 표시되는지 확인하기 위해) 세션을 닫습니다.
답변4
모듈 pam_script
은 종료 상태를 사용하여 호출 스택에 수행할 작업을 알려줍니다. 코드를 다음과 같이 변경하면 작동합니다.
#!/bin/bash
username="$1"
if [[ root != "$username" ]] && grep -q '^'"$username"':' /etc/passwd
then
echo "Warning, please user your AD credentials"
exit 1
fi
exit 0
root
블록에서 제외시켰습니다 . [[ ... ]]
UID < 500 등에 대한 테스트를 조정하여 자신의 시나리오에 적용할 수 있습니다 .