find 명령어
find 명령은 시스템 내에 있는 파일 중 사용자가 원하는 파일을 찾을 때 사용한다. 찾은 파일에 특정 명령을 실행하도록 명령할 수 있다.
find path [expression] [action]
검색할 경로는 최상위 루트 디렉터리 / 부터 시작하는 절대경로나 현재 디렉터리 . 부터 시작하는 상대경로를 지정할 수 있다.
find / : 최상위 루트 디렉터리 모든 파일 검색
find /tmp : /tmp 디렉터리 이하 파일 검색
find . : 현재 디렉터리 이하 파일 검색
검색 조건(옵션)은 하나 이상 명시할 수 있으며 논리 연산이 가능하다. (논리 연산을 생략하면 AND 연산을 의미)
-a
: AND 연산-o
: OR 연산!
: 부정 연산
기본 사용법
find . -type f -user root
현재 디렉터리 이하 모든 일반 파일 -type f
이고 소유자가 root -user root
인 파일을 검색하여 출력한다. 검색 조건 간 논리 연산을 생략하면 AND 연산을 수행한다.
find . -type f \( -user root -o -group dev \)
현재 디렉터리 이하 모든 일반 파일에 대하여 소유자가 root 이거나 소유그룹이 dev인 파일을 검색하여 출력한다. 연산의 결과를 하나의 단위로 평가하기 위해 소괄호를 사용할 수 있다. 이때 소괄호 기호 앞에 \
백슬래쉬를 써준다.
쉘에서 특수문자의 기능을 제거할 때 백슬래쉬 \ 와 함께 써준다.
find . -name "*.dat" -user gang -exec ls -al {} \;
현재 디렉터리 이하 모든 파일에 대하여 파일명이 .dat 으로 끝나고 소유자가 root인 파일을 검색한 후 결과 파일에 대해 ls -al
명령을 수행한 결과를 출력한다. -exec
옵션을 통해 검색 결과 파일에 대한 추가적인 명령을 실행할 수 있다. {}
은 검색 결과 파일들을 명령의 인수로 전달하기 위한 기호이고 \ ;
는 명령의 끝을 의미한다. (암기)
find . \( -nouser -o -nogroup \) -exec ls -al {} \;
⭐️⭐️⭐️
현재 디렉터리 이하 모든 파일에 대하여 소유자가 존재하지 않거나 소유그룹이 존재하지 않는 파일을 검색한 후 결과 파일에 대해 ls -al
명령을 수행한 결과를 출력한다.
✅ 보안 위협 발생
이러한 파일의 존재 이유는 현재 삭제된 사용자 계정(퇴사 등) 또는 그룹의 소유였거나 관리 소홀로 인해 생성된 파일일 가능성이 높다. 소유자나 소유그룹이 존재하지 않은 파일의 UID 또는 GID로 특정 사용자 계정의 UID나 그룹의 GID를 악의적으로 변경하면 소유자 또는 소유그룹의 권한으로 해당 파일에 접근할 수 있는 위협이 발생할 수 있다.
소유자나 소유그룹이 존재하지 않는 파일이 불필요한 경우에는 삭제 rm
하고 필요한 경우에는 소유자나 소유그룹을 변경한다. chown or chgrp
MAC 타임 관련 검색
-mtime n
: 마지막으로 파일 내용이 수정된 시간으로 일(n)단위로 지정-atime n
: 마지막으로 파일 내용에 접근한 시간으로 일(n)단위로 지정-ctime n
: 마지막으로 파일 속성이 변경된 시간으로 일(n)단위로 지정- n에 + 기호가 있으면 n 일 초과, - 기호가 있으면 n 일 미만, 기호가 없으면 정확히 n일 의미
find . -type f -mtime -10 -exec ls -al {} \;
현재 디렉터리 이하 모든 일반 파일에 대하여 최근 10일 이내에 변경된 파일을 검색한 후 결과 파일을 출력한다. 침해 사고 발생 시 파일 무결성 검증을 위해 활용한다.
find . -type f -mtime -10 > result.out
현재 디렉터리 이하 모든 일반 파일에 대하여 최근 10일 이내에 변경된 파일을 검색한 후 결과 파일을 result.out 파일로 출력한다.
접근 권한 관련 검색
-perm [-]mode
: - 가 없으면 mode 권한과 정확히 일치하는 파일이고 - 가 있으면 mode 권한을 포함하는 파일을 검색한다.
- perm 600 : 소유자에 rw(6)이 있고 소유그룹 및 others는 권한이 없는 파일
- -perm -600 : 소유자에 rw(6) 권한을 포함하고 있는 파일
- -perm -2 : others에 w(2) 권한을 포함하고 있는 파일
- -perm -22 : 소유그룹과 others에 w(2)권한을 포함하고 있는 파일
- -perm -222 : 소유자, 소유그룹, others에 w(2)권한을 포함하고 있는 파일
find / -type f -perm -2 -exec ls -al {} \;
⭐️⭐️⭐️
최상위 루트 디렉터리 이하 모든 일반파일에 대하여 기타사용자(others)에게 쓰기 권한이 있는 파일 = World writable
을 검색한 후 결과 파일에 대해 ls -al
명령을 수행한 결과를 출력한다.
World writable 파일: 파일의 소유자나 소유그룹에 속하지 않는 모든 사용자에 대해 쓰기가 허용된 파일
✅ 보안 위협 발생
시스템 설정파일 등 중요 파일에 World writable 설정이 되어있으면 비인가자에 의해 악의적으로 파일이 변경되는 위협이 발생할 수 있다. World writable 파일이 불필요한 파일이면 삭제하고 필요한 파일이면 others에 쓰기 권한을 제거한다.
크기 관련 검색
-size n
: + 기호가 있으면 n 크기 초과, - 기호가 있으면 n 크기 미만, 기호가 없으면 정확히 n 크기
'Linux' 카테고리의 다른 글
[Linux] 프로세스 관련 식별자 (0) | 2024.04.16 |
---|---|
[Linux] 프로세스 응용 (0) | 2024.04.16 |
[Linux] 파일과 접근 권한 관리 (0) | 2024.03.20 |
[Linux] 파일 시스템 File System 과 링크 (hard link & symbolic link) (0) | 2024.03.14 |
[Linux] Linux 기본 III - 특수문자(Meta character) (0) | 2024.03.13 |