시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 4/50편 (전체 004/450)
학습 단계: 1단계 · 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
주요 파일 권한 점검은 "권한이 맞는가"를 사람이 눈으로 보는 대신, 기대값 매트릭스와 실제값을 기계적으로 비교하는 작업입니다. Rocky와 Ubuntu는 일부 파일의 기본 권한이 다르므로, 배포판별 기대값을 따로 둡니다.
/etc/shadow가 읽기 가능해지면 패스워드 해시가 노출되고, /etc/sudoers가 쓰기 가능해지면 즉시 권한 상승으로 이어집니다.| 파일 | Rocky 9 기대값 | Ubuntu 22.04 기대값 | 위험한 상태 |
|---|---|---|---|
/etc/passwd | 644 root:root | 644 root:root | 666, 일반 사용자 소유 |
/etc/shadow | 000 root:root | 640 root:shadow | 644 (누구나 읽기) |
/etc/group | 644 root:root | 644 root:root | 쓰기 권한 추가 |
/etc/sudoers | 440 root:root | 440 root:root | 640 이상 쓰기 |
/etc/ssh/sshd_config | 600 root:root | 644 root:root | 666, 타 사용자 쓰기 |
/etc/crontab | 644 root:root | 644 root:root | 쓰기 권한 추가 |
Rocky의 /etc/shadow 000은 root가 권한 비트와 무관하게 접근하는 구조를 활용한 설정입니다.
# 기대값 파일 (경로 권한 소유자:그룹)
cat > /root/expect_perm.txt <<'EOF'
/etc/passwd 644 root:root
/etc/shadow 0 root:root
/etc/group 644 root:root
/etc/sudoers 440 root:root
/etc/ssh/sshd_config 600 root:root
/etc/crontab 644 root:root
EOF
# 실제값과 비교
while read f perm own; do
cur=$(stat -c '%a %U:%G' "$f")
[ "$cur" = "$perm $own" ] && echo "OK $f $cur" || echo "DIFF $f 기대=$perm $own 실제=$cur"
done < /root/expect_perm.txt
OK /etc/passwd 644 root:root
OK /etc/shadow 0 root:root
OK /etc/group 644 root:root
OK /etc/sudoers 440 root:root
OK /etc/ssh/sshd_config 600 root:root
OK /etc/crontab 644 root:root
stat -c '%a'는 앞자리 0을 생략하므로 000은 0으로 출력됩니다.
DIFF /etc/shadow 기대=0 root:root 실제=644 root:root
DIFF /etc/sudoers 기대=440 root:root 실제=640 root:root
| 차이 | 의미 |
|---|---|
shadow 644 | 모든 사용자가 해시를 읽을 수 있음 → 오프라인 크래킹 위험 |
sudoers 640 | 내용 수정 준비 단계일 수 있음. visudo는 저장 시 권한을 유지하므로 수동 변경 흔적 |
권한 변경은 chmod 실행 기록과 auditd attr 감시로 확인합니다(가상의 예시 로그).
type=SYSCALL msg=audit(1759713011.441:930): arch=c000003e syscall=268 success=yes exit=0 a2=1a4 auid=1002 uid=0 comm="chmod" exe="/usr/bin/chmod" key="perm_shadow"
type=PATH msg=audit(1759713011.441:930): item=0 name="/etc/shadow" inode=16797251 mode=0100000 ouid=0 ogid=0
syscall=268은 x86_64의 fchmodat입니다(ausearch -i로 이름 확인 가능).a2=1a4는 16진수 권한 인자로, 10진수 420 = 8진수 644입니다.mode=0100000은 변경 직전 상태(일반 파일 + 권한 000)를 보여줍니다.shadow·sudoers·sshd_config 권한 변경은 정상 운영에서 거의 없으므로 Alert 레벨을 높게 둡니다.dnf/apt 로그와 시간을 맞춰 봅니다.# /etc/audit/rules.d/30-perm.rules (예시)
-w /etc/shadow -p a -k perm_shadow
-w /etc/sudoers -p a -k perm_sudoers
-w /etc/ssh/sshd_config -p a -k perm_sshd
-p a는 속성(attribute) 변경(chmod/chown 등)만 감시합니다. Wazuh FIM도 권한 변경을 Permissions changed 속성 변화로 기록하므로, 둘 중 하나로 수집하면 됩니다.
Kibana 검색 예시(KQL): data.audit.key : "perm_*" and data.audit.command : "chmod"
stat의 Change)을 확인합니다.stat 출력, 파일 사본을 보존합니다.chmod 0 /etc/shadow 등).| 파일 | 기대 권한(Rocky / Ubuntu) |
|---|---|
| /etc/shadow | 000 / 640(root:shadow) |
| /etc/sudoers | 440 / 440 |
| /etc/ssh/sshd_config | 600 / 644 |
| 점검 도구 | stat -c "%a %U:%G" |
| 면접 포인트 | "배포판마다 기대값이 다르다 → 매트릭스로 관리" |
다음 편 005. Linux 서버 보안 — umask와 기본 권한 설정 점검 에서는 새로 만들어지는 파일의 권한을 결정하는 umask 설정을 점검합니다.
이전 편: 003. Linux 서버 보안 — 사용자·그룹 설정 점검 — UID 0과 빈 패스워드
📚 시리즈 전체 보기: 시스템 보안 · 취약점