005. Linux 서버 보안 — umask와 기본 권한 설정 점검

changseop lee·6일 전

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

선행 학습

1. 개념

umask 는 새로 만드는 파일·디렉터리에서 빼낼 권한 비트입니다. 파일의 시작값은 666, 디렉터리는 777이며 여기서 umask 비트를 제거합니다.

파일 시작값 666 (rw-rw-rw-)   디렉터리 시작값 777 (rwxrwxrwx)
       umask 022 제거                 umask 022 제거
          ↓                               ↓
      644 (rw-r--r--)                 755 (rwxr-xr-x)

      umask 027 → 파일 640 / 디렉터리 750   (그룹 쓰기·기타 전체 차단)
      umask 000 → 파일 666 / 디렉터리 777   (누구나 쓰기 → 위험)

정확히는 "뺄셈"이 아니라 비트 AND NOT 연산입니다. 그래서 umask 033이어도 파일은 644가 됩니다(원래 실행 비트가 없으므로).

2. 왜 중요한가

  • umask가 느슨하면 이후 생성되는 로그, 백업, 설정 파일이 모두 world-readable/writable 이 됩니다. 한 번의 설정 실수가 수천 개 파일의 노출로 이어집니다.
  • 데몬은 로그인 셸의 umask가 아니라 systemd 유닛의 UMask= 를 따릅니다. 셸만 점검하면 놓치는 부분입니다.
  • 공격자가 /etc/profile에 umask 000을 넣어 두면 관리자가 만드는 파일까지 쓰기 가능해지는 은밀한 약화가 됩니다.

3. 핵심 명령어 / 설정

위치적용 대상확인 방법
/etc/login.defs의 UMASK로그인 세션(pam_umask) / 홈 디렉터리 생성grep ^UMASK /etc/login.defs
/etc/profile, /etc/bashrc(Rocky), /etc/profile.d/*.shbash 로그인 셸grep -rn umask /etc/profile* /etc/bashrc
~/.bashrc, ~/.profile개별 사용자grep -n umask ~/.bashrc
systemd UMask=서비스 프로세스systemctl show -p UMask 서비스
현재 프로세스실행 중인 값grep Umask /proc/PID/status

4. 실습 (실습 예시)

# 현재 셸
umask            # 0022
umask -S         # u=rwx,g=rx,o=rx

# 실행 중인 데몬의 umask (예: sshd)
for p in $(pgrep -x sshd | head -1) $(pgrep -x rsyslogd); do
  echo "$p $(cat /proc/$p/comm) $(grep Umask /proc/$p/status)"
done

# 설정 위치 전수 확인
grep -rn 'umask' /etc/profile /etc/profile.d/ /etc/bashrc /etc/bash.bashrc 2>/dev/null
grep -E '^UMASK' /etc/login.defs

# 동작 확인
umask 027; touch /tmp/t1; mkdir /tmp/d1; stat -c '%a %n' /tmp/t1 /tmp/d1

5. 정상 상태

$ grep -E '^UMASK' /etc/login.defs
UMASK           022
$ stat -c '%a %n' /tmp/t1 /tmp/d1
640 /tmp/t1
750 /tmp/d1
1234 sshd Umask:	0022
1301 rsyslogd Umask:	0066

rsyslog처럼 로그를 쓰는 데몬은 더 엄격한 umask(0066/0077)를 쓰는 경우가 많습니다. 일반 서버 권장값은 022, 보안 강화 환경은 027입니다.

6. 이상 상태

$ grep -rn umask /etc/profile.d/
/etc/profile.d/zz-local.sh:1:umask 000
$ ls -l /var/backup/
-rw-rw-rw-. 1 root root 1048576 Oct  1 03:00 db_dump.sql
  • 낯선 zz-local.sh가 umask 000을 설정 → 이후 root가 만든 DB 덤프가 666으로 생성됨
  • 파일 이름의 zz- 접두사는 profile.d 중 마지막에 실행되어 앞선 설정을 덮어쓰기 위한 것일 수 있습니다.

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

profile.d 스크립트 생성은 auditd 감시로 남길 수 있습니다(가상의 예시 로그).

type=SYSCALL msg=audit(1759714200.010:1104): syscall=257 success=yes auid=1002 uid=0 comm="tee" exe="/usr/bin/tee" key="shell_profile"
type=PATH msg=audit(1759714200.010:1104): item=1 name="/etc/profile.d/zz-local.sh" nametype=CREATE

nametype=CREATE는 신규 파일 생성을 뜻합니다. auid=1002 사용자의 같은 세션(ses=)에서 실행된 다른 명령도 ausearch --session으로 이어서 확인합니다.

8. SOC 관제 포인트

  • /etc/profile.d/·/etc/bashrc의 신규 파일·변경은 셸 초기화 지속성(F영역)과도 연결되므로 함께 모니터링합니다.
  • world-writable 파일이 갑자기 늘어나면 umask 변화를 의심합니다(find / -xdev -type f -perm -0002 -newer 기준파일).
  • 서비스별 UMask는 기준선에 포함시켜 변경 여부를 비교합니다.

9. 탐지 규칙

# auditd: 셸 초기화 파일 감시
-w /etc/profile   -p wa -k shell_profile
-w /etc/profile.d/ -p wa -k shell_profile
-w /etc/bashrc    -p wa -k shell_profile
<!-- Wazuh: profile.d 파일 추가 시 상향 (FIM 554 = File added) -->
<rule id="100120" level="8">
  <if_sid>554</if_sid>
  <field name="file">^/etc/profile.d/</field>
  <description>셸 초기화 스크립트 신규 생성: $(file)</description>
</rule>

FIM 룰을 쓰려면 agent의 syscheck에 /etc/profile.d가 포함돼 있어야 합니다(기본 /etc 감시에 포함).

10. 대응 방법

  1. 초기 확인 — 느슨한 umask가 설정된 위치와 적용 시점을 확인합니다.
  2. 범위 확인 — 설정 이후 생성된 world-writable 파일을 찾아 노출 범위를 확인합니다(-newer 활용).
  3. 증거 확보 — 설정 파일 사본과 생성 로그, 노출된 파일 목록을 보존합니다.
  4. 차단/조치 — umask 설정을 제거·원복하고 노출 파일의 권한을 재설정합니다.
  5. 재발 방지 — umask 기대값과 셸 초기화 파일을 기준선·FIM에 등록합니다.

11. 핵심 정리

구분핵심 내용
원리시작값(666/777)에서 umask 비트를 제거(AND NOT)
권장값022(일반) / 027(강화)
데몬systemd UMask= 또는 /proc/PID/status로 확인
위험 신호profile.d의 umask 000, world-writable 파일 급증
면접 포인트"셸 umask와 서비스 umask는 다르다"

12. 다음 편 예고

다음 편 006. Linux 서버 보안 — sudoers 설정 점검 — NOPASSWD와 와일드카드 에서는 권한 상승의 핵심 통로인 sudoers 설정에서 NOPASSWD와 와일드카드 위험을 점검합니다.


이전 편: 004. Linux 서버 보안 — 주요 파일 권한 기준 점검 매트릭스
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글