OS Bootstrap Runbook (서비스 설치 전 공통 단계)¶
새 Rocky Linux 운영 서버를 최초 구성할 때,
Node.js / Next.js / PHP / Laravel / MySQL 등 어떤 서비스를 올리기 전까지 공통으로 적용해야 하는 OS 기본 단계를
최소한의 Runbook 으로 정리한 것임.
자세한 이론/정책은 기존 문서(SELinux, firewalld, journald, SSH Hardening 등)를 기준으로 하며,
그 내용을 한 번에 실행 가능한 형태로 요약하는 것을 목표로 함.
1. 범위 및 전제¶
- 대상 OS: Rocky Linux 9 계열
- 목적:
- 새 서버 1대를 가져왔을 때, 서비스 선택 전까지 공통으로 적용하는 OS 기본 보안/운영 기준을 빠르게 완료하기 위함.
- 설치/구성 세부 내용은 기존 문서를 그대로 따름.
- 포함:
- 시스템 업데이트 및 기본 유틸 패키지
dnf-automatic기반 보안 업데이트 자동 적용- 운영자 계정 생성 및 sudo 권한 부여
- SSH 기본 Hardening (RHEL 계열 권장:
sshd_config.d/00-custom.conf기반) - firewalld 기본 정책 (SSH 포트/필요 시 CIDR 제한 반영)
- Fail2ban 설치 및 SSH 보호 기본값 (
jail.local기반) - journald 로그 용량 제한
cron.allow,sysctl, core dump 제한 등 기본 System Hardening- (선택) SSH 포트 변경 시 SELinux
ssh_port_t등록
- 제외:
- Nginx, Node.js, Next.js, PHP, Laravel, MySQL 설치/구성
/tmp,/var/tmp,/home등의 mount/fstab 구조 설계/dev/shm보안 마운트 같은 환경별 선택 강화 항목
2. 실행 방식 개요¶
운영 서버 최초 구성은 다음 세 단계를 기준으로 함.
- OS 공통 Bootstrap 스크립트 실행
- 스토리지 구조 의존 Hardening 수동 적용
- SSH 재접속 및 기본 동작 확인
본 문서에서 설명하는 스크립트는 다음 위치에 존재함.
os-bootstrap 참고.
이 스크립트는 기존 OS 관련 문서의 내용을 바탕으로 작성된 운영 서버 OS Bootstrap 기준 레퍼런스임.
3. 사전 준비¶
- 초기 1회는 root 또는 sudo 권한이 있는 계정으로 접속함.
- SELinux는 Enforcing 유지를 기본 기준으로 함.
- SSH 포트, 운영자 계정명 등은 각 조직 정책에 맞게 조정 가능함.
예시:
- 운영자 계정:
adminuser - SSH 포트:
22(필요 시 나중에 변경)
4. 실행 예시¶
4.1 기본 실행¶
cd /path/to/project # 예: /root/RockyLinux-docs clone 위치
sudo bash scripts/os/os-bootstrap.sh
위 명령을 실행하면 다음 작업이 순차적으로 수행됨.
- 시스템 업데이트 및 기본 유틸 설치
dnf-automatic보안 업데이트 자동 적용 설정adminuser운영자 계정 생성 (기본값)- 운영자 계정 sudoers 등록
- SSH 기본 Hardening (root SSH 로그인 차단, 인증 방식 제한 등)
- firewalld 활성화 및 SSH 포트 허용
- Fail2ban 설치 및 SSH jail 기본 설정
- journald 로그 용량 제한 정책 적용
cron.allow,sysctl, core dump 제한 등 기본 Hardening 적용- (선택) SSH 포트 변경 시 SELinux
ssh_port_t등록(Enforcing 기준)
4.2 매개변수 지정 실행¶
환경 변수로 운영자 계정명, SSH 포트를 지정할 수 있음.
cd /path/to/project
sudo ADMIN_USER=devops SSH_PORT=22 bash scripts/os/os-bootstrap.sh
SSH_PORT를 22가 아닌 값으로 지정하면 스크립트가
firewalld custom port 정책 + SELinuxssh_port_t등록을 먼저 반영한 뒤
sshd를 재시작함.
4.2-1 운영 프로파일 선택 (중요)¶
이 스크립트는 SSH 노출 형태에 따라 두 프로파일을 제공함.
PROFILE=internal(기본값)- 내부망/VPN으로만 SSH 접근이 제한되는 관리 서버 기준
PasswordAuthentication yes기본
PROFILE=public- 외부 노출 SSH 운영 서버 기준
- 공개키 기반 인증만 허용 (
PasswordAuthentication no) ADMIN_AUTHORIZED_KEY제공이 필수(스크립트가 없으면 실행 중단)
내부망 전용이 아니라면 public을 기준으로 적용하는 것을 권장함.
예시(외부 노출 서버):
cd /path/to/project
sudo PROFILE=public ADMIN_USER=adminuser SSH_PORT=22 \
ADMIN_AUTHORIZED_KEY="ssh-ed25519 AAAA... user@pc" \
bash scripts/os/os-bootstrap.sh
4.3 SSH 허용 CIDR 제한 (권장 옵션)¶
운영 서버에서 SSH를 내부망/VPN 대역으로만 제한하려면 SSH_ALLOW_CIDR을 사용함.
cd /path/to/project
sudo SSH_ALLOW_CIDR=192.168.0.0/24 bash scripts/os/os-bootstrap.sh
이 옵션을 사용하면
firewalld에서 전역sshservice 허용 대신,
rich-rule 기반으로 source CIDR 제한을 적용함.
4.4 운영자 공개키 자동 반영 (자동화용)¶
운영 자동화/AI 자동화를 위해 운영자 공개키 1줄을 ADMIN_AUTHORIZED_KEY로 전달하면,
스크립트가 authorized_keys까지 자동 구성함.
cd /path/to/project
sudo ADMIN_USER=adminuser ADMIN_AUTHORIZED_KEY="ssh-ed25519 AAAA... user@pc" bash scripts/os/os-bootstrap.sh
PROFILE=public+ADMIN_AUTHORIZED_KEY조합으로 실행하면
스크립트가 공개키 등록과PasswordAuthentication no전환까지 함께 적용함.
자세한 운영 기준과 판단 근거는 04-SSH 공개키(Public Key) 기반 인증, 08-SSH Hardening 정책 가이드 (운영 서버 기준) 를 따름.
5. 자동화 후 수동 적용 필요 항목¶
다음 항목은 시스템의 디스크 구조/작업 방식에 따라 달라지므로,
Bootstrap 스크립트가 자동 적용하지 않음.
/tmptmpfs +nodev,nosuid,noexec/var/tmp디스크 유지 +nodev,nosuid,noexec/home의noexec적용 여부 판단- (선택)
/dev/shm보안 마운트
관련 기준 문서:
즉, 스크립트 실행만으로 전체 OS 베이스라인이 모두 끝난 것은 아니며,
위 항목까지 반영되어야 현재 프로젝트의 OS 문서 기준을 충족한 것으로 봄.
6. 실행 후 확인 항목¶
Bootstrap 스크립트 실행 후에는 한 번 재부팅을 수행하고, 아래 항목을 확인함.
sudo reboot
재접속 후:
# 필수 서비스 상태
systemctl is-active sshd firewalld fail2ban
# 보안 업데이트 자동 적용
systemctl is-enabled dnf-automatic.timer
# SELinux 상태 (Enforcing)
getenforce
# 방화벽 정책
sudo firewall-cmd --list-all
# journald 로그 용량
sudo journalctl --disk-usage
# sysctl / core dump 정책
sudo sysctl kernel.kptr_restrict fs.suid_dumpable
sudo grep -R "hard core 0" /etc/security/limits.conf /etc/security/limits.d 2>/dev/null
# cron 허용 사용자
sudo cat /etc/cron.allow
위 항목이 정상이라면 OS 공통 Bootstrap 자동화 단계가 완료된 것으로 간주함.
그리고 5. 자동화 후 수동 적용 필요 항목까지 반영되었다면
현재 프로젝트의 OS 베이스라인이 완료된 것으로 봄.
이후에는 각 서비스별 문서(Node.js, Next.js, PHP, Laravel, MySQL 등)를 따라
개별 런타임 및 애플리케이션 구성을 진행함.
7. 역할 정리¶
scripts/os/os-bootstrap.sh- OS 공통 초기 구축 중 자동화 가능한 항목을 반영하는 기준 스크립트
- SSH / firewalld / Fail2ban / journald / dnf-automatic / 기본 System Hardening 을 실제 서버에 반영하는 역할
00-os하위 개별 문서들- SELinux, firewalld, SSH Hardening, journald, mount/fstab 정책 등 세부 기준 및 판단 근거
운영자는 새 서버를 받을 때마다 OS Bootstrap Runbook + 스크립트를 먼저 수행하고,
그 다음에 mount/fstab Hardening 을 반영한 뒤,
서비스별 문서(Node.js / Next.js / Laravel / MySQL 등)를 따라 단계적으로 올리는 것을 기본 흐름으로 삼음.