위험도 상계정 관리

Rocky Linux 9·10 SSH root 원격 접속 제한 점검

게시

대상 OS
Rocky Linux 9, 10

한눈에 보기

항목 내용
점검 대상 Rocky Linux 9·10 (OpenSSH 서버)
점검 목적 root 계정이 SSH로 직접 로그인할 수 없는지 확인
관련 기준 KISA 주요정보통신기반시설 기술적 취약점 분석·평가 가이드 Unix 서버 “root 계정 원격 접속 제한” 항목 (가이드 판에 따라 항목 번호가 다를 수 있음)
위험도 상
점검 명령 읽기 전용 (설정 변경 없음), 관리자 권한 필요

왜 점검해야 하나요

root는 시스템의 모든 권한을 가진 계정이고, 계정 이름이 모든 리눅스 서버에서 같습니다. 공격자는 아이디를 알아낼 필요 없이 비밀번호만 대입하면 되므로, 인터넷에 열린 SSH 포트에는 root 계정 대입 시도가 끊이지 않습니다.

root 직접 접속을 막고 일반 계정으로 로그인한 뒤 sudo로 권한을 얻게 하면 두 가지 효과가 있습니다.

  • 공격자가 아이디와 비밀번호를 모두 알아야 하므로 대입 공격이 어려워집니다.
  • 누가 관리자 작업을 했는지 계정 단위로 기록이 남습니다.

Rocky Linux 9·10에서 주의할 점

Rocky Linux 9·10은 8 이하 버전과 설정 구조가 달라서, /etc/ssh/sshd_config 파일만 보고 판단하면 틀릴 수 있습니다.

구분 내용
기본값 OpenSSH 기본값은 prohibit-password(비밀번호 로그인 차단, 키 로그인 허용). CentOS 7 시절의 기본값 yes와 다름
추가 설정 파일 sshd_config 맨 앞의 Include /etc/ssh/sshd_config.d/*.conf 줄 때문에 이 폴더의 파일이 먼저 읽힘
먼저 읽은 값이 적용 sshd는 같은 항목이 여러 번 나오면 처음 읽은 값을 씀. 따라서 sshd_config.d 안의 설정이 본 파일보다 우선함
설치 옵션 설치 화면에서 root의 SSH 비밀번호 로그인을 허용하면, sshd_config.d 폴더에 PermitRootLogin yes 설정 파일이 따로 만들어짐

즉 본 파일에 PermitRootLogin no를 적어 두어도, 추가 설정 파일에 yes가 있으면 실제로는 root 접속이 허용됩니다. 그래서 파일 내용이 아니라 실제 적용값을 확인해야 합니다.

점검 방법

1. 실제 적용값 확인

명령어bash
sudo sshd -T | grep -i '^permitrootlogin'

sshd -T는 모든 설정 파일을 읽고 최종적으로 적용되는 값을 출력합니다. 설정을 바꾸지 않는 읽기 전용 명령입니다.

2. 어느 파일에서 설정했는지 확인

명령어bash
sudo grep -Rin '^\s*PermitRootLogin' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

여러 파일에 값이 있으면 sshd_config.d 안에서 이름순으로 가장 앞선 파일의 값이 적용됩니다. 출력이 없으면 직접 설정한 값이 없어 기본값(prohibit-password)이 적용된 상태입니다.

3. 조건부 설정(Match) 확인

명령어bash
sudo grep -Rin '^\s*Match' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

Match 블록이 있으면 특정 사용자나 접속 주소에만 다른 값이 적용될 수 있습니다. 결과가 있다면 아래처럼 조건을 지정해 다시 확인합니다.

명령어bash
sudo sshd -T -C user=root,host=example,addr=192.0.2.10 | grep -i '^permitrootlogin'

4. 텔넷 서비스 확인

SSH를 막아도 텔넷이 켜져 있으면 의미가 줄어듭니다.

명령어bash
rpm -q telnet-server
systemctl is-enabled telnet.socket 2>/dev/null

package telnet-server is not installed(한국어 환경: 패키지가 설치되어 있지 않습니다)와 not-found가 나오면 텔넷 서비스가 없는 것으로 양호입니다.

판정 기준

양호no

root 직접 접속 완전 차단

취약yes

비밀번호로 root 직접 접속 가능

주의prohibit-password / without-password

비밀번호는 막히지만 SSH 키로는 root 접속 가능. 점검 기준을 엄격히 적용하면 취약으로 봄. without-password는 같은 설정의 옛 이름으로, sshd -T가 이 이름으로 출력하기도 함

주의forced-commands-only

키에 지정된 명령만 허용. 백업 등 특수 용도가 아니면 no 권장

조치 방법

설정을 잘못 바꾸면 서버에 다시 접속하지 못할 수 있습니다. 아래 순서를 지켜 주세요.

1. 일반 관리자 계정으로 로그인되는지 먼저 확인

명령어bash
id 관리자계정
getent group wheel

sudo 권한이 있는 일반 계정(wheel 그룹 등)으로 SSH 로그인과 sudo 사용이 되는지 새 터미널에서 직접 확인한 뒤 진행합니다.

2. 현재 설정 백업

명령어bash
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
sudo cp -a /etc/ssh/sshd_config.d /etc/ssh/sshd_config.d.bak.$(date +%Y%m%d)

3. 차단 설정 추가

본 파일을 고치는 대신, 이름순으로 가장 먼저 읽히는 추가 설정 파일을 만듭니다. 기존 파일보다 먼저 읽혀서 확실하게 적용됩니다.

명령어bash
echo 'PermitRootLogin no' | sudo tee /etc/ssh/sshd_config.d/00-permitrootlogin.conf
sudo chmod 600 /etc/ssh/sshd_config.d/00-permitrootlogin.conf

설치 시 만들어진 PermitRootLogin yes 파일이 있다면, 혼동을 막기 위해 그 줄도 주석 처리하거나 파일을 정리하는 것이 좋습니다.

4. 문법 검사 후 반영

명령어bash
sudo sshd -t && sudo systemctl reload sshd

sshd -t에서 오류가 나면 반영하지 말고 설정을 다시 확인합니다. reload는 기존 접속을 끊지 않습니다.

5. 결과 확인

명령어bash
sudo sshd -T | grep -i '^permitrootlogin'

permitrootlogin no가 나오면 완료입니다. 기존 접속 창은 닫지 말고, 새 터미널에서 일반 계정 로그인과 root 직접 로그인 거부를 각각 확인합니다.

차단 이후 확인할 기록

root로 접속하려는 시도가 계속되는지 로그로 확인할 수 있습니다.

명령어bash
sudo grep -E 'sshd.*(root)' /var/log/secure | tail -n 20
sudo lastb root | head -n 20

차단 후에도 시도가 많다면 SSH 접속 허용 IP 제한, 비밀번호 대신 키 인증 사용, 접속 실패 시 일정 시간 차단 같은 추가 조치를 검토합니다.

정리

순서 할 일
1 sshd -T로 실제 적용값 확인 (파일만 보지 않기)
2 sshd_config.d 폴더의 설정 파일까지 확인
3 일반 관리자 계정 접속을 확인한 뒤 PermitRootLogin no 적용
4 sshd -t 검사 → reload → 새 창에서 결과 확인