시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 5/50편 (전체 005/450)
학습 단계: 1단계 · 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
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가 됩니다(원래 실행 비트가 없으므로).
UMask= 를 따릅니다. 셸만 점검하면 놓치는 부분입니다./etc/profile에 umask 000을 넣어 두면 관리자가 만드는 파일까지 쓰기 가능해지는 은밀한 약화가 됩니다.| 위치 | 적용 대상 | 확인 방법 |
|---|---|---|
/etc/login.defs의 UMASK | 로그인 세션(pam_umask) / 홈 디렉터리 생성 | grep ^UMASK /etc/login.defs |
/etc/profile, /etc/bashrc(Rocky), /etc/profile.d/*.sh | bash 로그인 셸 | grep -rn umask /etc/profile* /etc/bashrc |
~/.bashrc, ~/.profile | 개별 사용자 | grep -n umask ~/.bashrc |
systemd UMask= | 서비스 프로세스 | systemctl show -p UMask 서비스 |
| 현재 프로세스 | 실행 중인 값 | grep Umask /proc/PID/status |
# 현재 셸
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
$ 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입니다.
$ 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 중 마지막에 실행되어 앞선 설정을 덮어쓰기 위한 것일 수 있습니다.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으로 이어서 확인합니다.
/etc/profile.d/·/etc/bashrc의 신규 파일·변경은 셸 초기화 지속성(F영역)과도 연결되므로 함께 모니터링합니다.find / -xdev -type f -perm -0002 -newer 기준파일).UMask는 기준선에 포함시켜 변경 여부를 비교합니다.# 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 감시에 포함).
-newer 활용).| 구분 | 핵심 내용 |
|---|---|
| 원리 | 시작값(666/777)에서 umask 비트를 제거(AND NOT) |
| 권장값 | 022(일반) / 027(강화) |
| 데몬 | systemd UMask= 또는 /proc/PID/status로 확인 |
| 위험 신호 | profile.d의 umask 000, world-writable 파일 급증 |
| 면접 포인트 | "셸 umask와 서비스 umask는 다르다" |
다음 편 006. Linux 서버 보안 — sudoers 설정 점검 — NOPASSWD와 와일드카드 에서는 권한 상승의 핵심 통로인 sudoers 설정에서 NOPASSWD와 와일드카드 위험을 점검합니다.
이전 편: 004. Linux 서버 보안 — 주요 파일 권한 기준 점검 매트릭스
📚 시리즈 전체 보기: 시스템 보안 · 취약점