find로 권한과 소유자 이상 파일 점검하기

목차

파일 권한 점검과 일괄 수정에 쓰는 find 조건을 정리했습니다. 원노트에는 루트 전체를 대상으로 소유자를 바꾸는 예시도 있지만, 실제 수정은 조회 결과를 검토한 뒤 지정한 데이터 경로 안에서 수행합니다.

먼저 조회만 하기

다음은 /stg 파일시스템 안에서 다른 사용자에게 쓰기가 허용된 일반 파일, root 소유의 SUID·SGID 파일, 소유자 또는 그룹이 없는 항목을 찾습니다. -xdev는 다른 파일시스템으로 넘어가지 않게 합니다.

TERMINAL / CONFIG
find /stg -xdev -type f -perm -0002 -ls
find /stg -xdev -user root -type f \( -perm -4000 -o -perm -2000 \) -ls
find /stg -xdev \( -nouser -o -nogroup \) -ls

SUID가 있다는 사실만으로 비정상 파일은 아닙니다. 패키지 소속과 서비스 용도를 확인합니다. 숫자 UID만 남은 파일도 삭제된 계정의 데이터일 수 있으므로 임의로 root 소유로 바꾸지 않습니다.

링크와 일반 파일 구분

UID·GID 10000의 데이터를 lieper 계정으로 이관하기로 결정한 상황의 예시입니다. 링크 자체를 바꿀 때는 chown -h를 사용해 링크가 가리키는 다른 파일을 변경하지 않도록 합니다.

TERMINAL / CONFIG
find /stg -xdev -uid 10000 -gid 10000 -type l -ls
find /stg -xdev -uid 10000 -gid 10000 ! -type l -ls
# 위 목록을 확인한 뒤 필요한 범위에서만 실행
find /stg -xdev -uid 10000 -gid 10000 -type l -exec chown -h lieper:lieper {} +
find /stg -xdev -uid 10000 -gid 10000 ! -type l -exec chown lieper:lieper {} +

디렉터리만 변경하기

-mindepth 1을 지정하면 시작 경로 자체는 제외합니다. -type d와 -type f를 분리하면 디렉터리의 실행 권한과 일반 파일의 실행 권한을 구분할 수 있습니다.

TERMINAL / CONFIG
find /stg -mindepth 1 -xdev -type d -ls
find /stg -mindepth 1 -xdev -type d -exec chmod 770 {} +

-exec 끝의 \;는 항목마다 실행하고 +는 여러 경로를 묶어 전달합니다. 대량 변경 뒤에는 같은 조회 명령을 다시 실행해 대상과 결과가 의도한 범위인지 확인합니다.

리눅스 › 기본명령어
기본명령어 목록