CentOS 7에서 SSH root 로그인을 비활성화하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

오늘은 CentOS 7에서 SSH를 통한 root 직접 로그인을 비활성화하는 방법을 알아보겠습니다. 인터넷에 노출된 서버에서 root 계정으로 직접 SSH 접속을 허용하면 공격자가 이미 알고 있는 계정명인 root를 대상으로 비밀번호 대입이나 키 탈취 시도를 집중할 수 있으므로, 일반 관리자 계정으로 로그인한 뒤 필요한 작업만 sudo로 수행하는 구성이 더 안전합니다.

CentOS 7에서는 OpenSSH 서버 설정 파일 /etc/ssh/sshd_configPermitRootLogin 값을 no로 설정하면 SSH, SCP, SFTP를 이용한 root 직접 로그인을 차단할 수 있습니다. 다만 현재 root SSH 세션만이 유일한 관리 수단이라면 먼저 일반 관리자 계정과 sudo 권한을 준비하고 새 계정의 SSH 접속이 정상인지 확인해야 합니다.

적용 환경과 지원 상태

항목 내용
운영체제 CentOS Linux 7
SSH 서버 openssh-server
서비스명 sshd.service
설정 파일 /etc/ssh/sshd_config

작업 전 일반 관리자 계정 준비

이미 sudo 권한이 있는 일반 관리자 계정이 있다면 이 단계를 건너뛸 수 있습니다. 없다면 예시로 admin_user 계정을 생성합니다.

sudo useradd -m admin_user
sudo passwd admin_user
sudo usermod -aG wheel admin_user

CentOS 7의 일반적인 sudo 구성에서는 wheel 그룹 구성원이 관리자 권한을 사용할 수 있습니다. 실제 sudo 정책을 확인합니다.

id admin_user
sudo -l -U admin_user

별도의 새 터미널을 열어 일반 계정으로 SSH 접속합니다.

ssh [email protected]

로그인 후 sudo 권한도 실제로 확인합니다.

sudo -v
sudo whoami

정상이라면 마지막 명령에서 root가 표시됩니다. 이 확인이 끝날 때까지 기존 root SSH 세션을 종료하지 마십시오.

현재 SSH 설정 확인

OpenSSH 서버 패키지와 서비스 상태를 확인합니다.

rpm -q openssh-server
sudo systemctl status sshd.service --no-pager -l
sudo systemctl is-active sshd.service

현재 설정 파일에서 PermitRootLogin 항목을 확인합니다.

sudo grep -nE '^[[:space:]]*#?[[:space:]]*PermitRootLogin[[:space:]]+' /etc/ssh/sshd_config

OpenSSH가 실제로 적용하는 값을 확인합니다.

sudo /usr/sbin/sshd -T | grep '^permitrootlogin '

CentOS 7의 기본 설정에서는 root SSH 로그인이 허용될 수 있으므로 설정 파일의 주석 여부만 보지 말고 sshd -T로 유효값을 확인하는 것이 좋습니다.

root SSH 로그인 비활성화

설정 변경 전에 원본 파일을 백업합니다.

sudo cp -a /etc/ssh/sshd_config \
  "/etc/ssh/sshd_config.bak-$(date +%Y%m%d-%H%M%S)"

설정 파일을 편집합니다.

sudo vi /etc/ssh/sshd_config

PermitRootLogin 항목을 찾아 다음과 같이 설정합니다. 같은 지시문을 파일 여러 위치에 중복해서 추가하지 말고 기존 설정을 정리하는 것이 좋습니다.

PermitRootLogin no

Red Hat Enterprise Linux 7 공식 보안 문서도 SSH 프로토콜을 통한 root 로그인을 차단하려면 /etc/ssh/sshd_config에서 PermitRootLogin no를 사용하도록 안내합니다.

설정 검사, 적용 및 접속 확인

SSH 서비스를 적용하기 전에 반드시 설정 문법을 검사합니다.

sudo /usr/sbin/sshd -t
echo $?

sshd -t가 아무 오류 메시지 없이 종료되고 종료 코드가 0이면 기본 문법 검사를 통과한 것입니다. 오류가 표시되면 서비스를 다시 로드하지 말고 해당 줄을 먼저 수정하십시오.

설정을 다시 읽도록 SSH 데몬을 reload 합니다.

sudo systemctl reload sshd.service
sudo systemctl is-active sshd.service

유효 설정값이 no인지 확인합니다.

sudo /usr/sbin/sshd -T | grep '^permitrootlogin '

정상적으로 적용되었다면 다음 값이 확인되어야 합니다.

permitrootlogin no

이제 기존 root 세션을 유지한 상태에서 별도의 새 터미널을 열어 일반 관리자 계정 로그인이 계속 가능한지 다시 확인합니다.

ssh [email protected]

일반 계정으로 접속한 뒤 sudo 권한도 확인합니다.

sudo whoami

마지막으로 별도 터미널에서 root 직접 로그인을 시도합니다.

ssh [email protected]

root 인증이 거부되고 일반 관리자 계정은 정상적으로 로그인할 수 있다면 설정이 의도대로 적용된 것입니다.

문제 발생 시 점검

자주 발생하는 문제와 해결 방법
증상 가능한 원인 확인 방법 해결 방법
sshd -t에서 오류 출력 설정 파일 문법 오류 sudo /usr/sbin/sshd -t 표시된 줄을 수정하고 문법 검사 재실행
permitrootlogin이 여전히 yes 중복 지시문 또는 조건부 Match 설정 grep -n PermitRootLogin /etc/ssh/sshd_config, sshd -T 중복 설정과 Match 블록을 검토한 뒤 다시 적용
일반 계정은 로그인되지만 sudo 불가 wheel 그룹 또는 sudoers 정책 문제 id admin_user, sudo -l -U admin_user root 로그인 차단 전에 정상 관리자 권한부터 복구
root SSH가 계속 허용됨 설정 미적용 또는 다른 sshd 인스턴스 사용 systemctl status sshd, ss -lntp | grep sshd 실제 서비스와 설정 파일을 확인하고 reload
설정 후 새 SSH 접속이 모두 실패 일반 계정 인증·방화벽·sshd 설정 오류 /var/log/secure, 기존 root 세션에서 서비스 상태 확인 기존 세션에서 백업 설정으로 원상복구

SSH 인증 로그 확인

CentOS 7에서는 SSH 인증 관련 로그를 일반적으로 /var/log/secure에서 확인할 수 있습니다.

sudo tail -f /var/log/secure

systemd 저널에서도 SSH 서비스 로그를 확인할 수 있습니다.

sudo journalctl -u sshd.service -f

한 터미널에서 로그를 열어 둔 상태로 다른 터미널에서 root와 일반 계정 접속을 각각 시도하면 어떤 인증 단계에서 거부되는지 확인하기 쉽습니다.

원상복구 방법

일반 관리자 계정에 문제가 생겨 일시적으로 root SSH 로그인을 다시 허용해야 한다면 현재 남아 있는 관리 세션 또는 서버 콘솔에서 백업 파일을 확인합니다.

ls -lt /etc/ssh/sshd_config.bak-*

복원할 파일을 정확히 확인한 후 현재 설정을 별도로 보관하고 백업본을 복원합니다.

sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.failed
sudo cp -a /etc/ssh/sshd_config.bak-YYYYMMDD-HHMMSS /etc/ssh/sshd_config

YYYYMMDD-HHMMSS는 실제 백업 파일명으로 변경합니다. 복원 후 문법을 검사하고 설정을 다시 읽습니다.

sudo /usr/sbin/sshd -t
sudo systemctl reload sshd.service
sudo /usr/sbin/sshd -T | grep '^permitrootlogin '

관련 지구 IDC 기술자료

공식 참고자료

기관 문서 확인 내용 조회일
Red Hat RHEL 7 System Administrator's Guide — SSH 루트 로그인 비활성화 /etc/ssh/sshd_config, PermitRootLogin no, sshd 서비스 적용 절차
Red Hat RHEL 7 Security Guide — Controlling Root Access root SSH 로그인 차단이 SSH, SCP, SFTP에 미치는 영향
OpenSSH sshd(8) sshd -t 문법 검사와 sshd -T 유효 설정 출력
CentOS Project CentOS Linux CentOS Linux 7의 2024년 6월 30일 지원 종료 상태

자주 묻는 질문

PermitRootLogin no를 적용하면 sudo도 사용할 수 없나요?

아닙니다. 이 설정은 SSH를 이용한 root 계정의 직접 로그인만 차단합니다. sudo 권한이 있는 일반 사용자로 로그인한 뒤 sudo를 사용해 관리자 작업을 수행할 수 있습니다.

root 공개키 로그인도 차단되나요?

네. PermitRootLogin no는 비밀번호와 공개키를 포함해 SSH를 통한 root 직접 로그인을 허용하지 않습니다. root의 공개키 로그인만 허용하고 비밀번호는 막는 구성과는 다른 설정입니다.

설정 변경 후 sshd를 restart해야 하나요?

CentOS 7 공식 문서는 restart 예시를 안내하지만, 실행 중인 SSH 데몬이 reload를 지원하므로 문법 검사 후 systemctl reload sshd.service로 설정을 다시 읽게 할 수 있습니다. 원격 작업에서는 기존 연결을 유지한 상태에서 새 세션으로 반드시 검증하십시오.

root SSH를 끄면 SCP와 SFTP에는 어떤 영향이 있나요?

root 계정으로 직접 사용하는 SCP와 SFTP도 차단됩니다. 파일 전송이 필요하다면 일반 관리자 계정으로 접속하고 권한이 필요한 파일은 서버 안에서 sudo를 사용해 이동하거나 권한을 조정해야 합니다.

CentOS 7에서 이 설정만 하면 SSH 보안이 충분한가요?

아닙니다. root 직접 로그인 차단은 기본적인 보안 강화 조치 중 하나입니다. 가능한 경우 공개키 인증, 불필요한 계정 정리, 접근 가능한 관리 IP 제한, 로그인 시도 모니터링도 함께 검토해야 하며, CentOS 7 자체가 이미 지원 종료 상태라는 점도 중요합니다.

마무리

오늘은 CentOS 7에서 일반 관리자 계정과 sudo 권한을 먼저 확인한 뒤 /etc/ssh/sshd_configPermitRootLogin no 설정으로 SSH root 직접 로그인을 비활성화하는 방법을 설명드렸습니다.

원격 SSH 설정은 작은 실수만으로도 서버 접속을 잃을 수 있습니다. 기존 root 세션을 유지한 상태에서 sshd -t 문법 검사와 일반 계정의 새 SSH 접속을 모두 확인한 뒤에만 기존 관리 세션을 종료하시기 바랍니다.

CentOS 7은 이미 공식 지원이 종료된 운영체제이므로 보안 설정을 강화하는 것과 별도로 지원 중인 운영체제로의 이전도 함께 검토하시기 바랍니다. 오늘 준비한 내용은 여기까지입니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back