ssh 포트 변경 후 재시작할 때 Permission Denied 에러

Rocky Linux 또는 기타 리눅스 배포본을 설치한 다음 꼭 해줘야 하는 작업 중 하나가 바로 SSH 포트 변경이다. 즉 기본 Port 번호인 22에서 다른 번호로 변경해주는 작업이다. 물론 구글 OTP 또는 기타 인증을 강화하여 SSH 접속을 통제하는 방법도 있지만 ssh 서비스 포트를 22번으로 두고 인터넷에 공개하는 것은 “어린아이를 물가에 내어 놓는” 짓이나 다름이 아니다.

사용자 인증의 강화와 ssh 서비스 포트를 변경하는 취약점 제거는 상호 보완적인 보호대책이기 때문이다. 둘 중 하나를 적용했다하여 어느 하나를 하지 않아도 되는 그런 관계가 아니기 때문이다.

SSH 포트 변경 (sshd_config 수정)

어쨌든 ssh 서비스 포트의 변경을 위해 /etc/ssh/sshd_config 파일에서 Port 항목의 주석을 해제하고 다음과 같이 2020 으로 변경할 것이다.

ssh 포트 변경 - /etc/ssh/sshd_config 수정 
ssh 포트 변경 – /etc/ssh/sshd_config 수정

 

그런 다음 root 계정의 권한으로 다음과 같이 sshd 서비스를 재시작한다.

systemctl restart sshd

# systemctl restart sshd그런데 에러가 발생한다.

ssh 서비스 포트 변경 후 재실행 시 에러가 발생하는 이유

sshd.service 가 에러로 인해 정상적으로 실행하지 못하고 실패했다는 에러 메시지다. 그런데 여기서 멈추지 말자. 분명히 아래줄에 자세한 에러 내용을 보고 싶으면 어떤 명령어를 실행하라고 하지 않는가? 엔지니어라면 이런 메시지를 놓쳐서는 안된다.

자세한 에러를 보기 위해서는 “journalctl -xeu sshd.service” 라는 명령을 실행하라고 친절하게 알려준다.

journalctl -xeu sshd.service

# journalctl -xeu sshd.service에러 메시지를 보면 변경한 2020 포트를 ssh서비스를 수행하는 sshd 대몬이 Bind하지 못하기 때문이라는 것을 알 수 있고 그 이유는 “Permission” 즉 권한이 없기 때문이다.

하지만 기본적으로 root 계정에서 sshd 대몬을 구동하면 2020 포트에 대한 접근권한이 있기 때문에 Bind가 가능해야 한다. 그럼에도 권한 오류가 발생하는 것은 root 계정에서 실행하는 특정 프로세스가 2020 포트를 Bind하지 못하도록 통제하고 있기 때문이라는 것을 예상할 수 있다.

그리고 이러한 접근의 통제는 “Kernel” 내부 또는 Bind 함수를 가로채는 API Hooking이 아니면 불가능하다. 따라서 가장 가능성이 높은 것은 SELINUX에서 차단하는 것은 아닌가라는 생각이 들었다. 그리고 구글링을 해본 결과 역시나 SELINUX를 잠시 중지하고 실행해 보라는 것이었다.

이는 Selinux가 보안정책에 의해 sshd 대몬이 22 번이 아닌 다른 포트를 bind 하지 못하게 차단하고 있기 때문이라고 짐작되었다. 사실 나도 예전에 해킹을 당한 서버에서 sshd 대몬이 22번 하나만  Listen 하고 있어야 하는데 추가로 20000번을 Bind하고 Listen하고 있는 것을 본적이 있지 않은가?

SELINUX 중지하고 SSH 서비스 재실행하기

어쨋든 다음과 같이 selinux를 잠시 중지시켰다.

selinux 중지하기

selinux 중지하기getenforce 의 결과가 Permissive로 출력되는 Selinux가 중지된 것이다. 구동중이라면 enforcing 이라고 출력될 것이다.

이제 다시 sshd 서비스를 시작해본다.

ssh 서비스 다시 시작하기
ssh 서비스 다시 시작하기

이번엔 에러가 발생하지 않고 잘 실행된 듯 하다. 그러면 sshd 대몬이 2020 포트를 잘 Bind하고 있는지 보자

변경한 ssh 서비스 포트 확인
변경한 ssh 서비스 포트 확인

2020 포트가 LISTEN 상태임을 알 수 있다.

SELINUX 정책 확인과 변경하기

그렇다면 이번엔 Selinux의 ssh 대몬 관련 정책을 확인해보자.

Selinux의 정책은 semanage 라는 명령으로 확인할 수 있다.

selinux의 ssh 서비스 포트 정책 확인
selinux의 ssh 서비스 포트 정책 확인

아니나 다를까… ssh 서비스 포트가 22 번으로 고정되어 있다.  만약 지금 이 상태에서 서버를 리부팅하면 sshd 대몬이 2020을 여전히 Bind하지 못할 가능성이 있다. 그러므로 ssh 서비스 포트를 2020으로 변경해보자.

이 때도 역시 semanage 명령이 사용된다.

Selinux의 ssh 서비스 포트 정책 수정하기
Selinux의 ssh 서비스 포트 정책 수정하기

정책을 수정한 다음 다시 확인하는 화면이다. 포트번호에 2020이 추가된 것을 알 수 있다.

이제 리부팅하여 2020 번을 잘 Bind하는지 확인하면 된다.

 

#ssh #ssh_port_change #selinux

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top