[server] sshd에 대한 사용자 정의 오류 메시지

서버 액세스가 거부 된 사용자에 대한 사용자 정의 오류 메시지를 설정할 수 있습니까? 실제로에 설정된 IP 필터로 인해 사용자가 거부 된 경우에만이 메시지를 표시하고 싶습니다 sshd_config. 그러나 하나의 전역 오류 메시지로 충분합니다.



답변

“오류 메시지”란 클라이언트 프로그램에 의해 표시되는 텍스트 문자열을 의미한다고 생각합니다. “메시지”라는 단어는 SSH 인증 프로토콜 RFC에 약간의 컨텍스트가 있습니다. 나중에 참조 할 것이지만, 이것이 여러분이 사용하고있는 의미라고 생각하지 않습니다.

SSH를 TELNET과 같은 것으로 생각합니다. 서버 데몬이 보낸 임의의 텍스트 문자열이 클라이언트에 표시됩니다. SSH는 클라이언트와 서버간에 이진 값의 형태로 토큰 화 된 메시지를 전달 하는 인증 프로토콜 을 사용 합니다. 이러한 토큰 화 된 메시지 중 하나 인 “SSH_MSG_USERAUTH_BANNER”를 사용하여 클라이언트가 임의의 텍스트 문자열을 표시하도록 지시 할 수 있지만 (해당하는 경우) SSH 데몬을 수정하여 적절한 시간에 보내야합니다. OpenSSH에는 인증 프로세스의 임의의 지점에서 SSH_MSG_USERAUTH_BANNER 메시지를 보내는 내장 기능이 있다고 생각하지 않습니다.

왜 인증이 실패했는지에 대한 추가 정보를 원격 공격자에게 제공하려는 이유에 대해 질문하고 싶습니다. 그들은 SSH 클라이언트가 SSH 데몬으로부터 토큰 화 된 메시지를 수신하고 실패를 알리기 때문에 실패했다는 것을 알고 있습니다.


답변

편집 : 에반 앤더슨은 나보다 빨리 입력하고 서버 크기에서 메시지를 사용자 정의 할 수 없음을 확인하는 것 같습니다.

sshd_config에서 배너 파일을 지정할 수 있습니다. 로그인 프롬프트 전에 배너가 모든 사용자에게 표시되며 특정 도메인 및 주소의 로그인 만 허용됨을 나타냅니다.

SSH는 로그인을 unix / bin / login 명령으로 전달할 수 있습니다. OS에 따라 프롬프트와 오류를 사용자 정의 할 수있는 옵션이 있습니까?

내가 생각할 수있는 다른 것은 아마도 코드를 편집하고 다시 컴파일하는 것을 의미합니다. 또한 침입자가 정보를 수집하지 못하도록 서버에서 클라이언트로 실패 메시지가 문자열로 전송되지 않고 코드로 전송 될 수 있습니다. (문자열이고 사용자 정의 할 수있는 경우 누군가 “로그인 실패. OpenSSH_3.7_p2 21032004″로 설정)


답변

이것은 ip 필터의 경우에는 작동하지 sshd_config않지만을 사용하여 PAM에 의해 구현 된 모든 액세스 제어에는 작동합니다 pam_echo.so.

예를 들면 다음과 같습니다.

account [success=2 default=ignore] pam_lastlog.so inactive=30
account optional pam_echo.so file=/path/to/lastlog_error_message.txt
account requisite pam_deny.so
account ...

이 시나리오에서 인증 된 사용자가 지난 30 일 이내에 로그인하지 않은 /path/to/lastlog_error_message.txt경우 SSH 연결이 종료되기 전에 내용이 표준 출력으로 에코됩니다. 이들이 검사를 통과 한 경우 pam_lastlog평가에서 pam_echopam_deny호출을 건너 뛰어 나머지 PAM 모듈을 계속 평가합니다.


답변