SSH 로그인에 대한 원본 사용자를 기록 및/또는 제한하는 것이 가능합니까?
예를 들어:
user1@server1
server2
로 로그인하세요 user2
.
또한 으로 user3@server1
로그인하십시오 .server2
user2
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@server1
user2@server2
또한 로그에는 원본 사용자가 표시되지 않는 것 같습니다.
이것은 -> /var/log/secure
에서 로그인한 후 RHEL6에 대한 로그입니다 .user1@server1
user2@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_config
CLIENTUSER라는 변수를 허용할 수 있습니다 .
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