[Linux] 보안 조치: 특정 확장자 파일 권한 일괄 변경 (find + chmod 조합)

보안 취약점 조치를 위해 특정 디렉토리 하위의 파일 권한을 일괄 변경하는 방법을 정리합니다. 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, 스크립트)
Comments