시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 41/50편 (전체 041/450)
학습 단계: 4단계 · 자동 점검·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
CIS Benchmark 는 Center for Internet Security가 공개하는 운영체제·소프트웨어별 보안 설정 권고 문서입니다. 개인이 경험으로 만든 점검표 대신 공개된 기준에 맞춰 점검하면, 결과를 다른 사람·조직과 비교하고 설명할 수 있습니다.
CIS Benchmark (Linux 배포판별 문서)
├─ 섹션: 1 초기 설정 / 2 서비스 / 3 네트워크 / 4 로깅·감사 / 5 접근·인증 / 6 시스템 유지보수
│ (버전에 따라 구성·번호가 조금씩 다름)
├─ 프로파일: Level 1 (영향 적은 기본 권고) / Level 2 (보안 강화, 운영 영향 가능)
│ Server / Workstation 구분
└─ 권고 항목 하나의 구조
├─ 설명(Description) · 근거(Rationale) · 영향(Impact)
├─ 점검 방법(Audit) ← 명령어와 기대 결과
├─ 조치 방법(Remediation)
└─ 자동 점검 가능 여부(Automated / Manual)
국내에서는 「주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드」의 Unix 서버 항목(U-01 root 계정 원격 접속 제한 등)이 같은 역할을 합니다. 두 기준은 표현은 달라도 점검 대상이 상당 부분 겹칩니다.
지금까지의 편을 CIS 섹션 기준으로 다시 묶으면 다음과 같습니다(섹션 이름은 일반적인 구성 기준).
| CIS 섹션(일반 구성) | 대표 권고 주제 | 이 시리즈 편 |
|---|---|---|
| 초기 설정 | 파일시스템 옵션, 모듈 차단, 패치, MAC, 배너 | 019·020·036·024·017·018·034 |
| 서비스 | 불필요 서비스, 시간 동기화 | 013·032 |
| 네트워크 | 네트워크 sysctl, 방화벽 | 023·015·016 |
| 로깅·감사 | journald, rsyslog, auditd 규칙·불변 모드 | 028·029·030·031 |
| 접근·인증 | cron 권한, SSH 설정, sudo, PAM, 계정 정책 | 026·009~012·006·007·008 |
| 시스템 유지보수 | 파일 권한, 계정 무결성(UID 0, 빈 패스워드) | 004·003·025 |
CIS 권고 항목 하나를 Audit → 기대값 → 결과 형식으로 직접 점검해 보는 예시입니다(문구는 요약, 실제 문서의 항목 번호·표현은 버전별로 확인).
# [접근·인증] SSH root 로그인 비활성화
sudo sshd -T | grep -i '^permitrootlogin' # 기대: permitrootlogin no
# [로깅·감사] 감사 설정 불변 모드
sudo auditctl -s | awk '/^enabled/{print $2}' # 기대: 2
# [초기 설정] /tmp noexec
findmnt -no OPTIONS /tmp | tr ',' '\n' | grep -x noexec # 기대: noexec
# [시스템 유지보수] root 외 UID 0 없음
awk -F: '$3==0 && $1!="root"' /etc/passwd # 기대: 출력 없음
점검 결과는 항목 | 기대값 | 실제값 | 판정(PASS/FAIL/예외) | 근거 형식으로 기록합니다. 이 형식이 다음 편들의 자동 점검 도구 결과와 같은 구조입니다.
항목 기대값 실제값 판정
SSH root 로그인 비활성화 no no PASS
감사 설정 불변 모드 2 2 PASS
/tmp noexec noexec noexec PASS
root 외 UID 0 없음 없음 PASS
IP 포워딩 비활성화 0 1 예외(VPN 게이트웨이, CHG-2026-0901)
FAIL이 없거나, 있더라도 승인된 예외로 문서화된 상태가 정상입니다.
항목 이전 점검(09-15) 현재(10-01) 판정
SSH root 로그인 비활성화 PASS FAIL(yes)
감사 설정 불변 모드 PASS FAIL(1)
/tmp noexec PASS FAIL
root 외 UID 0 PASS FAIL(sysbak)
이전에 PASS였던 항목이 동시에 FAIL로 바뀐 것은 점검 기준 문제가 아니라 서버 상태 변화입니다. 037편의 드리프트 원인 분류 절차로 넘깁니다.
점검 결과도 로그로 남겨 SIEM에 보내면 시간에 따른 준수율 변화를 추적할 수 있습니다(가상의 예시 로그 — 자체 점검 결과를 syslog로 남긴 형태).
Oct 1 05:00:01 rocky9-web01 hardening-check[10001]: benchmark=CIS-L1-Server item=ssh_permitrootlogin expected=no actual=yes result=FAIL
Oct 1 05:00:01 rocky9-web01 hardening-check[10001]: benchmark=CIS-L1-Server item=audit_immutable expected=2 actual=1 result=FAIL
Oct 1 05:00:02 rocky9-web01 hardening-check[10001]: benchmark=CIS-L1-Server summary pass=41 fail=4 exception=1 score=89
key=value 형식으로 남기면 Wazuh·Logstash에서 별도 디코더 없이도 필드 추출이 쉽습니다(044편에서 표준화).
<!-- 자체 점검 결과 로그에서 PASS→FAIL 의미의 FAIL 이벤트 상향 (예시) -->
<rule id="100460" level="9">
<match>hardening-check</match>
<regex>result=FAIL</regex>
<description>보안 설정 기준 점검 실패 항목 발생</description>
</rule>
Wazuh SCA(045편)를 쓰면 CIS 기반 정책이 기본 제공되어(배포판별 정책 파일) 이와 같은 점검·Alert를 별도 스크립트 없이 운영할 수 있습니다.
| 구분 | 핵심 내용 |
|---|---|
| CIS 구조 | 섹션 · 프로파일(Level 1/2, Server/Workstation) · 권고 항목 |
| 권고 항목 | 설명 · 근거 · 영향 · Audit · Remediation · Automated/Manual |
| 국내 기준 | 주요정보통신기반시설 Unix 서버 항목(U-xx) |
| 결과 형식 | 항목 | 기대값 | 실제값 | 판정 | 근거 |
| 면접 포인트 | "Level 2는 영향 검토 후 적용, 예외는 문서화" |
다음 편 042. Linux 서버 보안 — OpenSCAP 자동 점검과 결과 해석 에서는 CIS 기반 점검을 자동화하는 OpenSCAP 점검과 결과 해석을 다룹니다.
이전 편: 040. Linux 서버 보안 — 신규 리스닝 서비스·비인가 유닛 이상 징후
📚 시리즈 전체 보기: 시스템 보안 · 취약점