SSH 로그인을 위한 원본 사용자를 기록하거나 제한합니다.

SSH 로그인을 위한 원본 사용자를 기록하거나 제한합니다.

SSH 로그인에 대한 원본 사용자를 기록 및/또는 제한하는 것이 가능합니까?

예를 들어:

user1@server1server2로 로그인하세요 user2.

또한 으로 user3@server1로그인하십시오 .server2user2

user1"소스 사용자"란 이상 을 의미합니다 user3.

user1@server1어떤 세션이 에 의해 시작되었고 어떤 세션이 에 의해 시작되었는지 추적할 수 있기를 원합니다 user3@server1.

그 목적은 여러 사용자가 이 user2계정을 사용하여 서버 2 등의 프로세스를 관리할 수 있도록 하는 것입니다. (이것이 보안에 영향을 미친다는 것을 알고 있지만 문제의 일부는 이러한 함정의 정도를 평가하는 것입니다.)

매뉴얼 페이지에 언급된 대로 .NET sshd_config(5)의 구성 옵션을 sshd사용하여 AllowUsers특정 사용자에게 액세스를 제한 하는 것이 가능합니다 sshd_config.

사용자 허용

이 키워드 뒤에는 공백으로 구분된 사용자 이름 패턴 목록이 올 수 있습니다. 지정된 경우 이러한 패턴 중 하나와 일치하는 사용자 이름만 로그인이 허용됩니다. 사용자 이름만 유효하며 숫자로 된 사용자 ID는 인식되지 않습니다. 기본적으로 모든 사용자는 로그인이 허용됩니다. 패턴이 USER@HOST 형식인 경우 USER와 HOST를 별도로 확인하여 특정 호스트의 특정 사용자에 대한 로그인을 제한합니다. 허용/거부 지시어는 DenyUsers, AllowUsers, DenyGroup, 마지막으로 AllowGroups 순서로 처리됩니다.

그러나 USER위 매뉴얼 페이지에 지정된 내용은 대상 시스템의 사용자 이름을 설명하는 것 같습니다( server2예제에서는).

AllowUsers 옵션을 로 설정하여 이를 테스트한 결과 ->에서 계속 로그인 user2@server1할 수 있는 것으로 나타났습니다 . user1@server1user2@server2

또한 로그에는 원본 사용자가 표시되지 않는 것 같습니다.

이것은 -> /var/log/secure에서 로그인한 후 RHEL6에 대한 로그입니다 .user1@server1user2@server2

11월 17일 16:14:59 server2 sshd[28349]: /proc/self/oom_score_adj를 0으로 설정

11월 17일 16:14:59 server2 sshd[28349]: 10.1.2.3 포트 36508에서 연결

11월 17일 16:14:59 server2 sshd[28349]: 일치하는 RSA 키를 찾았습니다: aa:bb:cc:dd:ee:ff:gg:..

11월 17일 16:14:59 server2 sshd[28350]: 10.1.2.3 포트 36508 ssh2에서 user2의 공개 키가 지연되었습니다.

11월 17일 16:14:59 server2 sshd[28349]: 일치하는 RSA 키를 찾았습니다: aa:bb:cc:dd:ee:ff:gg:..

11월 17일 16:14:59 server2 sshd[28349]: 10.1.2.3 포트 36508 ssh2에서 user2의 공개 키를 수락합니다.

11월 17일 16:14:59 server2 sshd[28349]: pam_unix(sshd:session): (uid=0)에 의해 사용자 user2에 대한 세션 열기

11월 17일 16:14:59 server2 sshd[28349]: 사용자 하위 프로세스의 pid는 28351입니다.

그럼, 방법은 없을까?

sshd(a) SSH 연결을 수행하는 소스 사용자를 추적하기 위해 로깅 또는 동작을 변경했습니까 ?

(b) 원본 사용자를 기반으로 연결을 제한하도록 sshd를 제한합니까?

답변1

짧은 대답은 '아니요'입니다. 서버는 서버 측 관점에서 유효한 로그인을 허용합니다.

그러나 원하는 것을 달성하기 위한 몇 가지 가능한 해결 방법이 있습니다. 다음 사항이 귀하의 요구 사항을 충족하는지 테스트하고 확인하십시오.

노트이는 "일반" 사용자에게는 충분할 수 있으며 클라이언트도 제어해야 합니다. 숙련된 사용자는 CLIENTUSER아래에 사용된 변수를 가짜로 만드는 방법을 찾을 것입니다 .

AcceptEnv다음의 지시문을 사용하여 /etc/ssh/sshd_configCLIENTUSER라는 변수를 허용할 수 있습니다 .

AcceptEnv CLIENTUSER

다음 단계는 사용자가 로그인 쉘에 대한 명령을 사용하여 강제로 로그인하도록 하는 것입니다. 예를 들면 다음과 같습니다.

ForceCommand /bin/bash -l

sshd 서비스를 다시 시작하고 /etc/profile에 다음을 추가합니다.

if [ -z "$CLIENTUSER" ] || [ "$CLIENTUSER" != "user3" ] && [ ! -z "$SSH_CLIENT" ]
then
       echo 'Client logon not allowed'
       logout
fi

위의 명령은 변수를 보내지 않거나 와 다른 값을 가진 변수를 CLIENTUSER보내는 모든 CLIENTUSER클라이언트를 로그아웃합니다 user3.

다음 클라이언트 명령줄을 사용하여 이를 테스트할 수 있습니다.

$ ssh user2@host
Client logon not allowed

$ CLIENTUSER=user3 ssh -o "SendEnv CLIENTUSER" user2@host
user2@host $

보시다시피, CLIENTUSER이는 명령줄을 통해 쉽게 위조될 수 있습니다. 이를 방지하려면 다음을 추가하면 됩니다.고객`/etc/구성 파일:

declare -r CLIENTUSER="$USER"

CLIENTUSER사용자가 변수 값을 변경하려고 하면 다음 오류가 발생합니다.

bash: CLIENTUSER: readonly variable

관련 정보