004. Linux 서버 보안 — 주요 파일 권한 기준 점검 매트릭스

changseop lee·3일 전

시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 4/50편 (전체 004/450)
학습 단계: 1단계 · 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

주요 파일 권한 점검은 "권한이 맞는가"를 사람이 눈으로 보는 대신, 기대값 매트릭스와 실제값을 기계적으로 비교하는 작업입니다. Rocky와 Ubuntu는 일부 파일의 기본 권한이 다르므로, 배포판별 기대값을 따로 둡니다.

2. 왜 중요한가

  • /etc/shadow가 읽기 가능해지면 패스워드 해시가 노출되고, /etc/sudoers가 쓰기 가능해지면 즉시 권한 상승으로 이어집니다.
  • 공격자는 흔적을 남기지 않기 위해 파일 내용 대신 권한만 느슨하게 바꿔 두기도 합니다.
  • 권한 변화는 D영역 「권한 변경 이상 징후」에서 탐지로 깊게 다루며, 여기서는 정상 기대값을 확정하는 것이 목표입니다.

3. 핵심 명령어 / 설정

파일Rocky 9 기대값Ubuntu 22.04 기대값위험한 상태
/etc/passwd644 root:root644 root:root666, 일반 사용자 소유
/etc/shadow000 root:root640 root:shadow644 (누구나 읽기)
/etc/group644 root:root644 root:root쓰기 권한 추가
/etc/sudoers440 root:root440 root:root640 이상 쓰기
/etc/ssh/sshd_config600 root:root644 root:root666, 타 사용자 쓰기
/etc/crontab644 root:root644 root:root쓰기 권한 추가

Rocky의 /etc/shadow 000은 root가 권한 비트와 무관하게 접근하는 구조를 활용한 설정입니다.

4. 실습 (실습 예시)

# 기대값 파일 (경로 권한 소유자:그룹)
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

5. 정상 상태

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으로 출력됩니다.

6. 이상 상태

DIFF /etc/shadow 기대=0 root:root 실제=644 root:root
DIFF /etc/sudoers 기대=440 root:root 실제=640 root:root
차이의미
shadow 644모든 사용자가 해시를 읽을 수 있음 → 오프라인 크래킹 위험
sudoers 640내용 수정 준비 단계일 수 있음. visudo는 저장 시 권한을 유지하므로 수동 변경 흔적

7. 로그 분석 (분석 방법)

권한 변경은 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)를 보여줍니다.

8. SOC 관제 포인트

  • 권한 점검 결과의 DIFF는 파일 해시 변경이 없어도 별도 이벤트로 관리합니다.
  • shadow·sudoers·sshd_config 권한 변경은 정상 운영에서 거의 없으므로 Alert 레벨을 높게 둡니다.
  • 패키지 업데이트 직후의 권한 변화는 정상일 수 있으므로 dnf/apt 로그와 시간을 맞춰 봅니다.

9. 탐지 규칙

# /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"

10. 대응 방법

  1. 초기 확인 — DIFF 파일의 현재 권한·소유자와 마지막 변경 시각(stat의 Change)을 확인합니다.
  2. 범위 확인 — 같은 기간 다른 중요 파일 권한도 변경됐는지 매트릭스 전체를 재점검합니다.
  3. 증거 확보 — auditd 로그와 stat 출력, 파일 사본을 보존합니다.
  4. 차단/조치 — 기대값으로 권한을 원복합니다(chmod 0 /etc/shadow 등).
  5. 재발 방지 — 매트릭스 점검을 정기 작업으로 등록하고 auditd 속성 감시를 적용합니다.

11. 핵심 정리

파일기대 권한(Rocky / Ubuntu)
/etc/shadow000 / 640(root:shadow)
/etc/sudoers440 / 440
/etc/ssh/sshd_config600 / 644
점검 도구stat -c "%a %U:%G"
면접 포인트"배포판마다 기대값이 다르다 → 매트릭스로 관리"

12. 다음 편 예고

다음 편 005. Linux 서버 보안 — umask와 기본 권한 설정 점검 에서는 새로 만들어지는 파일의 권한을 결정하는 umask 설정을 점검합니다.


이전 편: 003. Linux 서버 보안 — 사용자·그룹 설정 점검 — UID 0과 빈 패스워드
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글