−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS

VPS에서 sudo 사용자 만들고 root 그만 쓰는 법

Ubuntu나 Debian에서 root가 아닌 sudo 사용자를 만들고, SSH 키를 주고, 테스트한 뒤 root 로그인을 끄세요. 스스로 잠기지 않는 순서로 진행합니다.

거의 모든 새 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에 다시 들어가는 법에 정리해 두었습니다.

다음에 할 일

각 요금제의 접속 방법은 접속 문서에 있습니다. $3짜리 Nano라도 root가 아닌 사용자를 둘 가치가 있습니다. 이보다 싼 보안 강화는 없습니다.

자주 묻는 질문

그냥 root를 계속 쓰면 안 되나요?

root로 실행한 것은 오타 하나까지도 시스템 전체를 망가뜨릴 수 있습니다. 봇도 'root'라는 사용자 이름부터 시도하기 때문에 root 로그인을 끄면 가장 많이 노려지는 목표가 사라집니다. 이름 있는 사용자와 sudo 조합은 권한이 필요한 명령마다 한 번 멈출 틈과 실행 기록을 줍니다.

스스로 잠겨 버리면 어떡하죠?

대시보드의 웹 콘솔을 쓰세요. SSH가 고장 나거나 방화벽이 막아도 동작하므로 로그인해서 sshd_config를 고칠 수 있습니다. root 세션을 닫기 전에 새 사용자를 테스트하는 이유도 그것입니다.

비밀번호 없는 sudo를 허용해야 할까요?

사람이 쓰는 계정이라면 비밀번호 입력을 유지하세요. SSH 키가 유출됐을 때 마지막 방어선입니다. 비밀번호 없는 sudo는 자동화용 전용 배포 사용자에게, 실제로 필요한 명령으로만 한정해 줄 때 합리적입니다.

Debian 서버에 sudo 명령이 없습니다. 왜죠?

최소 구성 Debian 이미지에는 없는 경우가 있습니다. root로 'apt install -y sudo'를 실행해 설치한 뒤 사용자를 sudo 그룹에 추가하세요.

어떤 SSH 포트를 써야 하나요?

대시보드에 표시된 포트입니다. 전용 IP 요금제는 자신의 IP에서 22번 포트를, NAT 요금제는 개인 SSH 포트를 씁니다.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.