보안 취약점 조치를 위해 특정 디렉토리 하위의 파일 권한을 일괄 변경하는 방법을 정리합니다.
chmod -R로 기본 권한을 잡고,find명령어를 이용해 설정 파일(xml, properties)이나 로그 파일의 실행 권한을 제거하여 보안을 강화합니다.
0. 배경 및 시나리오 (Context)
일반적으로 웹 애플리케이션(WAS) 디렉토리의 보안 권장 설정은 다음과 같습니다.
- 디렉토리:
750(소유자: rwx, 그룹: r-x, 기타: ---) - 이동(x) 가능해야 함 - 파일:
640(소유자: rw-, 그룹: r--, 기타: ---) - 실행(x) 권한 제거
단순히 chmod -R 750을 하면 모든 파일에 실행 권한이 붙어버리므로, 특정 확장자 파일들을 찾아 640으로 다시 변경해줘야 합니다.
Test Environment
- OS: CentOS 7 (3.10.0-957.el7.x86_64)
1. 1단계: 소유권 및 기본 권한 설정
먼저 대상 디렉토리 하위의 모든 파일/폴더의 소유권을 맞추고, 디렉토리 기준 권한(750)을 일괄 적용합니다.
# 1. 소유권 변경 (하위 포함)
chown -R wasadm:wasadm ./*
# 2. 기본 권한 설정 (일단 모두 750으로 설정)
# 주의: 이 상태에서는 일반 텍스트 파일도 실행 권한(x)을 갖게 됨
chmod -R 750 ./*
2. 2단계: 특정 확장자 권한 강화 (실행 권한 제거)
find 명령어를 사용하여 설정 파일이나 로그 파일 등 실행될 필요가 없는 파일들을 찾아 권한을 640으로 낮춥니다.
명령어 구문
# 구문: find [경로] -name "[패턴]" -exec chmod [권한] {} \;
# XML 설정 파일
find . -name "*.xml" -exec chmod 640 {} \;
# 로그 파일
find . -name "*.log" -exec chmod 640 {} \;
# 프로퍼티 파일
find . -name "*.properties" -exec chmod 640 {} \;
# 쉘 스크립트 제외한 모든 일반 파일 (고급)
# find . -type f ! -name "*.sh" -exec chmod 640 {} \;
주의 (Quotation):
*.xml과 같이 와일드카드를 사용할 때는 반드시 따옴표(" ")로 감싸주어야 합니다. 그렇지 않으면 현재 디렉토리에 xml 파일이 많을 경우 쉘이 먼저 해석해버려 "paths must precede expression" 에러가 발생할 수 있습니다.
3. Tip: 대량 파일 처리 시 성능 최적화
파일이 수만 개 이상일 경우 -exec ... \; 방식은 파일 하나마다 프로세스를 실행하므로 느립니다. xargs를 사용하면 훨씬 빠릅니다.
# xargs를 이용한 고속 처리 방식
find . -name "*.log" -print0 | xargs -0 chmod 640
4. 검증 (Verification)
작업 완료 후 ls -l 명령어로 디렉토리와 파일의 권한이 의도한 대로 분리되었는지 확인합니다.
drwxr-x--- 2 wasadm wasadm 4096 ... logs/ (750, 디렉토리)
-rw-r----- 1 wasadm wasadm 1024 ... server.xml (640, 파일)
-rwxr-x--- 1 wasadm wasadm 512 ... start.sh (750, 스크립트)