보안 하드닝
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