Rocky Linux 9는 RHEL과 호환되는 무료 선택지입니다. 같은 패키지, 같은 dnf, 같은 firewalld와 SELinux를 씁니다. Debian이나 Ubuntu를 설정해 본 적이 있다면 단계 순서는 같고 도구만 다릅니다. 새 Rocky 9 서버에서의 첫 10분을 정리했습니다.
아래 명령은 모두 게시 전에 저희 Rocky Linux 9 이미지에서 실행해 보았습니다. 깨끗한 서버라면 전체 과정이 몇 분이면 끝납니다.
1. 시스템 업데이트
대시보드의 비밀번호로 root 로그인한 뒤 업데이트합니다.
dnf -y upgrade
저희 이미지에서는 이미 최신 상태여서 테스트할 때 몇 초 만에 끝났습니다.
2. sudo 사용자 만들고 SSH 키 추가
Rocky에서는 관리자 그룹이 sudo가 아니라 wheel입니다.
useradd -m -G wheel deploy
passwd deploy # sudo will ask for this password
공개 키를 서버에 올립니다(키 만드는 방법). /root/key.pub로 복사해 두었다면:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/key.pub /home/deploy/.ssh/authorized_keys
restorecon -R /home/deploy/.ssh
restorecon은 sshd가 기대하는 SELinux 레이블을 붙입니다. 레이블이 틀리면 뚜렷한 오류 없이 키 로그인이 실패합니다.
두 번째 터미널을 열어 ssh deploy@YOUR.SERVER.IP가 되는지, sudo -v가 비밀번호를 받는지 확인하세요. 그 전까지 root 세션은 열어 두세요.
3. root 로그인과 비밀번호 로그인 끄기
여기서 Rocky는 교과서식 sshd_config 수정과 다릅니다. 설정은 /etc/ssh/sshd_config.d/ 아래 개별 파일에 있고, sshd는 처음 찾은 값을 씁니다. 저희 이미지에서는 첫 파일이 00-eqvps.conf이며, 첫날 접속할 수 있도록 root와 비밀번호를 허용합니다. 그 파일을 바꿉니다.
sed -i -e 's/^PermitRootLogin .*/PermitRootLogin no/' \
-e 's/^PasswordAuthentication .*/PasswordAuthentication no/' \
/etc/ssh/sshd_config.d/00-eqvps.conf
sshd -t && systemctl reload sshd
sshd -T | grep -E '^(permitrootlogin|passwordauthentication) '
마지막 명령은 sshd가 실제로 적용하는 값을 보여 줍니다. 다음과 같이 나와야 합니다.
permitrootlogin no
passwordauthentication no
이제 ssh root@…는 키가 있어도 거부되고, deploy는 키로만 로그인합니다.
4. 방화벽: firewalld
클라우드 이미지에는 firewalld가 없습니다. 설치하고 시작한 뒤 필요한 것만 열어 둡니다.
dnf -y install firewalld
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --remove-service=cockpit
firewall-cmd --reload
firewall-cmd --list-services
기본 영역은 cockpit(포트 9090)과 dhcpv6-client를 엽니다. Cockpit은 설치되어 있지 않지만 그 포트를 열어 둘 이유는 없습니다. 앱을 추가할 때는 같은 방식으로 포트를 엽니다. 예: firewall-cmd --permanent --add-service=https.
5. 보안 업데이트 자동화
dnf-automatic은 타이머에 맞춰 업데이트를 내려받습니다. 기본값은 설치하지 않으므로 설치를 켭니다.
dnf -y install dnf-automatic
sed -i 's/^apply_updates = .*/apply_updates = yes/' /etc/dnf/automatic.conf
systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic.timer
보안 패치만 원한다면 같은 파일에서 upgrade_type = security도 설정하세요.
6. SELinux는 켜 둔 채로
새 서버에서 getenforce는 Enforcing을 출력하고, 위의 모든 과정은 그 상태에서 동작합니다. 앱이 표준이 아닌 포트나 디렉터리가 필요하면 해결책은 레이블(semanage port, restorecon)이지 setenforce 0이 아닙니다.
어떤 플랜을 고를까
Rocky 9는 유휴 상태에서 RAM을 약 400 MB 씁니다. Nano 플랜(1 GB, 월 $3)은 작은 서비스 하나에 충분하고, Micro(2 GB, 월 $5)는 데이터베이스를 둘 여유가 있습니다. NAT 플랜에서는 SSH가 대시보드에 표시된 개인 포트로 들어옵니다. 포트 80/443을 모두에게 열어야 한다면 Micro-IP(월 $10)처럼 전용 IPv4가 있는 플랜을 고르세요.
Rocky Linux 9는 RHEL 계열 OS 페이지에 있는 이미지 중 하나로, VPS의 모든 플랜에서 선택할 수 있습니다. 결제는 Base, Ethereum, Polygon 네트워크의 USDT, USDC, ETH로 하며 신분증도 카드도 필요 없습니다. 스크립트로 서버를 다루고 싶다면 API 문서에 주문, 재설치, 연장 방법이 있습니다.
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.