거의 모든 새 VPS가 똑같이 시작합니다. root로 로그인해서 몇 가지를 설치하고, 한 달 뒤에도 여전히 root입니다. 붙여 넣은 스크립트가 엉뚱한 디렉터리를 지우기 전까지는 잘 돌아가죠. sudo를 쓰는 일반 사용자를 만드는 데는 5분이면 되지만, 명령보다 순서가 더 중요합니다. 순서를 틀리면 스스로 잠깁니다.
Ubuntu 22.04/24.04와 Debian 12에서 안전한 순서는 이렇습니다.
1. 사용자 만들기
root로:
adduser deploy
usermod -aG sudo deploy
adduser는 비밀번호와 몇 가지 선택 항목을 묻습니다(선택 항목은 Enter로 넘기면 됩니다). 제대로 된 비밀번호를 고르세요. sudo를 쓸 때마다 입력하게 됩니다. 최소 구성 Debian 이미지에서 명령이 없다면 먼저 apt install -y sudo를 실행하세요.
2. SSH 키 건네주기
가장 쉬운 방법은 소유자를 올바르게 유지한 채 root의 인증된 키를 복사하는 것입니다.
rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy
직접 하고 싶다면:
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
권한이 잘못된 것이 키 로그인이 조용히 실패하는 전형적인 원인입니다. SSH는 다른 사용자가 쓸 수 있는 authorized_keys를 무시합니다.
3. 무엇이든 바꾸기 전에 테스트하기
root 세션은 열어 둔 채로 새 터미널에서:
ssh -p 22 deploy@203.0.113.10
sudo whoami
자신의 IP와 포트를 쓰세요. NAT 요금제라면 대시보드에 있는 개인 SSH 포트입니다. sudo whoami가 root를 출력하면 성공입니다. 로그인에 실패해도 root 창이 남아 있으니 고칠 수 있습니다.
4. root 로그인 끄기
이제 문을 닫습니다. 메인 설정을 편집하는 대신 작은 drop-in 파일을 만드세요.
cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh
sshd -t가 먼저 문법을 검사합니다. 망가진 설정에 reload까지 하면 콘솔 신세를 지게 됩니다. PasswordAuthentication no는 새 사용자로 키 로그인이 될 때만 의미가 있고, 그건 방금 테스트했습니다.
터미널을 하나 더 열어 root는 거부되고 deploy는 여전히 들어가는지 확인하세요. 그런 다음 예전 root 세션을 닫습니다.
5. 선택: 자동화용 비밀번호 없는 sudo
배포 스크립트가 묻지 않고 sudo를 써야 한다면, 딱 그만큼만 허용하고 그 이상은 주지 마세요.
visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
솔직히 NOPASSWD: ALL은 끌리지만, 그건 도난당한 키가 곧 root라는 뜻입니다. 자동화가 실행하는 명령으로만 한정하세요.
문제가 생기면
대시보드의 웹 콘솔은 SSH에도 방화벽에도 의존하지 않습니다. 거기서 로그인해 /etc/ssh/sshd_config.d/의 파일을 고치고 reload하면 끝입니다. 복구 전체 과정은 잠긴 VPS에 다시 들어가는 법에 정리해 두었습니다.
다음에 할 일
- 키만 쓰는 로그인으로 제대로 전환하기: SSH 키 인증
- 무차별 대입 시도의 소음 줄이기: fail2ban
- 나머지 기본은 새 VPS 보안 체크리스트로 챙기기
각 요금제의 접속 방법은 접속 문서에 있습니다. $3짜리 Nano라도 root가 아닌 사용자를 둘 가치가 있습니다. 이보다 싼 보안 강화는 없습니다.
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.