"root 비밀번호를 없앤다" 는 요구는 실제로는 세 가지 다른 작업을 가리킨다. 비밀번호를 잠그는 것, 해시를 지워 비밀번호 없이 로그인되게 만드는 것, 그리고 원격에서 root 로 붙지 못하게 막는 것이다. 셋은 효과가 정반대일 수 있으므로 구분해서 쓴다.
/etc/shadow 의 비밀번호 필드 앞에 ! 를 붙인다. 어떤 입력도 저장된 해시와 일치할 수 없게 되므로 비밀번호 인증이 실패한다.
passwd -l root
passwd -S root
# root L 2026-03-17 0 99999 7 -1
두 번째 필드가 L 이면 잠금, P 면 사용 가능한 비밀번호가 있는 상태, NP 면 비밀번호가 없는 상태다.
잠금은 비밀번호 인증만 막는다. sudo 로 root 권한을 얻는 경로, root 의 SSH 공개키 인증, 콘솔의 single user 모드 진입은 그대로 남는다. 운영 서버에서 권장하는 구성이 이것이다.
passwd -l root
usermod -aG wheel deploy # RHEL 계열. 데비안 계열은 sudo 그룹
해제는 passwd -u root 다.
해시 자체를 비운다. 이름과 달리 "잠금" 이 아니라 비밀번호 없이 통과되는 상태가 된다.
passwd -d root
PAM 설정이 빈 비밀번호를 허용하면(pam_unix.so 에 nullok) 콘솔에서 엔터만으로 root 가 된다. 자동화 스크립트가 빈 비밀번호를 기대하는 특수한 경우가 아니면 쓰지 않는다.
계정 상태와 무관하게 sshd 쪽에서 막는다.
# /etc/ssh/sshd_config
PermitRootLogin no
sshd -t # 문법 검사. 반드시 먼저 한다
systemctl reload sshd
PermitRootLogin 의 값은 다음과 같다.
| 값 | 뜻 |
|---|---|
yes |
비밀번호·공개키 모두 허용 |
prohibit-password |
공개키 등 비밀번호가 아닌 방법만 허용 (OpenSSH 기본값) |
forced-commands-only |
authorized_keys 에 command 가 지정된 접속만 허용 |
no |
모두 거부 |
설정을 바꾼 뒤에는 현재 세션을 끊지 말고 다른 터미널에서 일반 사용자로 접속해 sudo -i 가 되는지 먼저 확인한다. root 로만 접속하던 서버에서 이 순서를 건너뛰면 잠긴다.