Linux 시스템 보안 기초 · 25/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
Part 3의 개념들(권한·SUID·ACL·소유권)을 종합해, 실무에서 가장 먼저 점검하는 핵심 시스템 파일 체크리스트를 만듭니다. 이 몇 개 파일의 권한만 정확히 유지해도 상당수 공격을 예방합니다.
필수 점검 파일과 기준 권한:
| 파일 | 권장 권한 | 소유자:그룹 |
|---|---|---|
| /etc/passwd | 644 | root:root |
| /etc/shadow | 640 (또는 600) | root:shadow |
| /etc/group | 644 | root:root |
| /etc/gshadow | 640 | root:shadow |
| /etc/sudoers | 440 | root:root |
| /etc/ssh/sshd_config | 600 | root:root |
숫자를 외우기보다 '민감할수록 좁게(shadow/sudoers는 특히 엄격)'라는 원칙으로 이해합니다.
점검 스크립트 흐름
대상 파일 목록
│ stat -c '%a %U:%G'
▼
기준값과 비교 ── 불일치 ──> 경고 + 시정
│ 일치
▼
정상
이 파일들은 인증·권한 부여의 근간이라, 권한이 느슨해지면 즉시 공격 표면이 됩니다. 예: sudoers가 world-writable이면 누구나 자신에게 sudo를 부여할 수 있고, sshd_config가 쓰기 가능하면 인증 정책이 무력화됩니다.
점검은 단발이 아니라 기준선(baseline) 대비 지속 비교여야 합니다. 최초 정상 상태의 권한·해시를 저장하고 주기적으로 대조하면, 공격자의 변조를 조기에 탐지할 수 있습니다.
# 핵심 파일 권한/소유자 일괄 확인
for f in /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/sudoers /etc/ssh/sshd_config; do
sudo stat -c '%n %a %U:%G' "$f" 2>/dev/null
done
# 무결성 기준선 저장(최초 1회)
sudo sha256sum /etc/passwd /etc/group /etc/ssh/sshd_config | sudo tee /root/baseline.sha256
# 이후 비교
sudo sha256sum -c /root/baseline.sha256
실습 컨테이너에서 핵심 파일 권한 확인 실제 결과입니다. (실제 캡처)
$ for f in /etc/passwd /etc/shadow /etc/group /etc/ssh/sshd_config; do
sudo stat -c '%n %a %U:%G' "$f"; done
/etc/passwd 644 root:root
/etc/shadow 640 root:shadow
/etc/group 644 root:root
/etc/ssh/sshd_config 600 root:root
모두 기준 권한과 일치합니다. 하나라도 어긋나면(예: shadow가 644) 즉시 chmod로 시정하고 변경 원인을 조사해야 합니다.
이 체크리스트는 침해사고 초동 대응(48편)의 '무결성 확인' 단계와 그대로 연결됩니다.
sha256sum -c) 정기 검증auditd -w ... -p wa, 44편)이 파일들은 Wazuh FIM의 최우선 감시 대상입니다. 변경 발생 시 diff와 함께 즉시 알람이 오며, auditd의 identity/priv_config 키(41·44편에서 설정)와 결합하면 '누가 언제 변경했는가'까지 추적됩니다. 권한 완화·무결성 위반은 침해 타임라인(46편)의 핵심 증거가 됩니다.
[ ] 핵심 파일 권한/소유자 일괄 확인
[ ] 기준값 불일치 시정
[ ] 무결성 해시 기준선 저장·검증
[ ] 핵심 파일 변경 감사 설정
다음 편에서는 26. Linux 프로세스 보안 를 다룹니다. Part 4로 넘어가, 살아 움직이는 실행 주체 — 프로세스를 보안 관점에서 해부합니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.