보안 하드닝

Linux 시스템 보안 강화, 취약점 점검, 컴플라이언스 준수 완벽 가이드


Linux 시스템 보안 강화, 취약점 점검, 컴플라이언스 준수 완벽 가이드

목표: 엔터프라이즈 수준의 보안 기준을 적용하고 감사할 수 있는 수준


🛡️ 보안 기본 원칙

CIA 트라이어드

원칙설명구현 방법
Confidentiality (기밀성)인가된 사용자만 접근암호화, ACL, 권한 관리
Integrity (무결성)데이터 변경 방지해시, 서명, 감사 로그
Availability (가용성)필요 시 접근 가능이중화, 백업, 모니터링

최소 권한 원칙 (Principle of Least Privilege)

  • 사용자/프로세스에게 필요한 최소한의 권한만 부여
  • 권한 상승은 명시적으로, 로그에 기록
  • 불필요한 서비스/포트 비활성화

🔐 인증 및 접근 제어

SSH 하드닝

# /etc/ssh/sshd_config

# 기본 설정
Port 2222                           # 기본 포트 변경
PermitRootLogin no                  # 루트 로그인 금지
PasswordAuthentication no           # 키 인증만 허용
PubkeyAuthentication yes

# 고급 설정
MaxAuthTries 3                      # 최대 시도 횟수
MaxSessions 2                       # 최대 세션 수
ClientAliveInterval 300             # 5분 타임아웃
ClientAliveCountMax 2
LoginGraceTime 60                   # 로그인 제한 시간

# 알고리즘 제한
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521

# 사용자 제한
AllowUsers admin deploy
AllowGroups sshusers
DenyUsers guest test

# Chroot jail (제한된 환경)
Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

PAM (Pluggable Authentication Modules)

# /etc/pam.d/common-auth (Debian/Ubuntu)
# /etc/pam.d/system-auth (RHEL/CentOS)

# 실패한 로그인 잠금
auth required pam_tally2.so deny=5 unlock_time=900 onerr=fail audit even_deny_root root_unlock_time=900

# 비밀번호 복잡성
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

# 세션 타임아웃
session required pam_lastlog.so showfailed
session optional pam_motd.so

sudo 감사

# /etc/sudoers (visudo로 편집)

# 로깅 설정
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output
Defaults iolog_dir="/var/log/sudo-io"

# 타임스탬프 타임아웃
Defaults timestamp_timeout=5

# 사용자별 제한
User_Alias ADMINS = alice, bob
ADMINS ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
ADMINS ALL=(ALL) /usr/bin/apt update

# 명령별 제한
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/deploy.sh

🧱 SELinux

SELinux 모드

# 현재 모드 확인
getenforce                    # Enforcing, Permissive, Disabled
sestatus

# 모드 변경 (임시)
sudo setenforce 0             # Permissive
sudo setenforce 1             # Enforcing

# 모드 변경 (영구)
# /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted

SELinux 정책 관리

# 컨텍스트 확인
ls -Z /var/www/html
ps auxZ | grep nginx

# 컨텍스트 변경
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

# 불리언 설정
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on

# 정책 모듈 생성
sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp

🛡️ AppArmor

AppArmor 프로필

# 상태 확인
sudo aa-status

# 프로필 모드
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx

# 프로필 생성
sudo aa-genprof /usr/bin/myapp
# 1. 다른 터미널에서 앱 실행
# 2. 프로필 생성 완료

# 프로필 수정
sudo nano /etc/apparmor.d/usr.bin.myapp

AppArmor 프로필 예시

# /etc/apparmor.d/usr.sbin.nginx
#include <tunables/global>

/usr/sbin/nginx {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/openssl>

  capability dac_override,
  capability dac_read_search,
  capability net_bind_service,
  capability setgid,
  capability setuid,

  /etc/nginx/** r,
  /var/log/nginx/** rw,
  /var/www/** r,
  /run/nginx.pid rw,

  deny /etc/shadow r,
  deny /proc/*/mem r,
}

🔍 취약점 스캐닝

Lynis (시스템 감사)

# 설치
sudo apt-get install lynis    # Debian/Ubuntu
sudo yum install lynis        # RHEL/CentOS

# 시스템 감사
sudo lynis audit system

# 보고서 확인
sudo cat /var/log/lynis-report.dat

OpenSCAP

# 설치
sudo apt-get install libopenscap8 scap-workbench

# CIS 벤치마크 스캔
sudo oscap xccdf eval \
  --profile xccdf_org.ssgproject.content_profile_cis_level2_server \
  --report report.html \
  /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml

# 결과 확인
firefox report.html

CIS 벤치마크

항목설명
Level 1기본 보안, 실용적, 최소 영향
Level 2높은 보안, 까다로움, 성능 영향 가능
Server서버 환경 최적화
Workstation워크스테이션 환경 최적화

📝 감사 및 로깅

auditd (Linux Audit Framework)

# 설치
sudo apt-get install auditd

# 규칙 설정 (/etc/audit/rules.d/audit.rules)
# 파일 변경 감시
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity

# 명령어 실행 감시
-a always,exit -F arch=b64 -S setuid -k privilege_escalation
-a always,exit -F arch=b64 -S setgid -k privilege_escalation

# 디렉토리 감시
-w /var/www/html/ -p wa -k web_changes

# 감사 데몬 재시작
sudo service auditd restart

# 로그 검색
sudo ausearch -k identity
sudo ausearch -ts today -k web_changes
sudo aureport --login --summary

로그 중앙화

# rsyslog 설정 (/etc/rsyslog.conf)
# 원격 서버로 전송
*.* @logserver.example.com:514

# TLS 암호화
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode anon
*.* @@(o)logserver.example.com:6514

🚫 불필요한 서비스 제거

서비스 점검

# 실행 중인 서비스
systemctl list-units --type=service --state=running

# 활성화된 서비스
systemctl list-unit-files --state=enabled

# 불필요한 서비스 예시
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon

포트 점검

# 열린 포트
sudo ss -tlnp
sudo netstat -tlnp

# 불필요한 포트 차단
sudo ufw deny 23/tcp    # Telnet
sudo ufw deny 111/tcp   # RPC
sudo ufw deny 515/tcp   # Printer

🔒 파일 시스템 보안

중요 파일 권한

# /etc/shadow (루트만 읽기)
sudo chmod 640 /etc/shadow
sudo chown root:shadow /etc/shadow

# /etc/passwd (모두 읽기, 루트만 쓰기)
sudo chmod 644 /etc/passwd

# SUID/SGID 파일 검색
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 불필요한 SUID 제거
sudo chmod u-s /usr/bin/some_command

파일 무결성 검사

# AIDE (Advanced Intrusion Detection Environment)
sudo apt-get install aide

# 초기 데이터베이스 생성
sudo aideinit

# 무결성 검사
sudo aide --check

# 데이터베이스 업데이트
sudo aide --update

📋 보안 체크리스트

기본 하드닝

  • SSH 키 인증, 루트 로그인 금지
  • 방화벽 활성화 (ufw/firewalld)
  • 자동 업데이트 설정
  • 불필요한 서비스 비활성화
  • SELinux/AppArmor 활성화

중급 하드닝

  • PAM 설정 (잠금, 복잡성)
  • auditd 감사 규칙
  • 파일 무결성 검사 (AIDE)
  • 로그 중앙화
  • 취약점 스캐닝 (Lynis, OpenSCAP)

고급 하드닝

  • CIS 벤치마크 Level 2
  • 커널 보안 모듈 (SELinux enforcing)
  • 네트워크 세그멘테이션
  • 침입 탐지 시스템 (IDS)
  • 보안 정보 및 이벤트 관리 (SIEM)

🔗 관련 노트

  • 01-02-파일-권한-관리 — 권한 상세
  • 01-03-사용자-관리 — 사용자 보안
  • 02-04-네트워크-설정 — SSH 심화
  • 02-04-네트워크-설정 — 방화벽 상세
  • 03-03-보안-하드닝 — 강제 접근 제어

마지막 업데이트: 2026-06-01