해당 문자열이 포함된 파일을 검색하여 출력
find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print
문자열 찾아서 바꾸기
find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;
확장자 bak 파일 찾아서 삭제하기
find ./ -type f -name *.bak -exec rm -f {} \;
2개이상의 조건으로 검색
find . -type f \( -mtime -1 -o -ctime -1 \) -print
(mtime 또는 ctime 1일 미만인 파일)
find . -type f \( -mtime -1 -a -ctime -1 \) -print
(mtime 과 ctime 모두 1일 미만인 파일)
pds 폴더의 하위 list 출력
find . -type d -name 'pds' | xargs ls -al
find [검색 대상 경로] -옵션
옵션
-name filename : 찾고자 하는 파일명 (-name "*.txt")
-atime +n : access time이 현재일 보다 n일 이전인 파일 검색
-atime -n : access time이 현재일 보다 n일 이내의 파일 검색
-mtime +n : 수정일이 현재일 보다 n일 이전인 파일 검색
-mtime -n : 수정일이 현재일 보다 n일 이내인 파일 검색
-type f or d : f - 파일, d - 디렉토리
-maxdepth n : 지정된 경로에서 n개 하위 디렉토리까지 검색
find 후 처리
-print : 검색된 파일의 절대 경로를 화면에 출력
-exec 명령어 {} \; : 명령어 구분자로 ;을 사용한다.
* 현재 디렉토리에서 확장자가 txt이고 수정일이 3일 이전인 파일 삭제
find ./ -name "*.txt" -a -mtime +3 -exec rm {} \;
* 수정된지 10일 이상된 파일 삭제
find ./ -mtime +10 -type f -exec rm -f {} \;
* 확장자가 log인 파일 중에서 수정된지 500일 이상인 파일을 ./backup 디렉토리로 이동
find ./ -name "*.log" -mtime +500 -type f -exec mv {} ./backup \;
option
[찾을 디렉토리경로]
. : 현재 디렉토리 이하를 검색대상으로 한다.
/ : 루트디렉토리(파일시스템전체) 이하를 대상으로 한다.
~ID : 지정된 ID의 홈디렉토리이하를 대상으로한다.
[찾기옵션]
-empty : 비어있는 파일을 찾는다.
-uid UID : 지정된 UID를 갖는 파일을 찾는다.
-gid GID : 지정된 GID를 갖는 파일을 찾는다.
-group 그룹명 : 지정된 group을 갖는 파일을 찾는다.
-name : 지정된 형식의 패턴을 가지는 파일을 찾는다.
-newer : 지정된 파일 이후에 생성된 파일을 찾는다.
-perm : 지정된 퍼미션을 가진 파일을 찾는다.
-used 일자수 : 최근 n일 이후에 변경된 파일을 찾는다.
-user : 지정된 파일을 소유하고 있는 소유자의 모든 파일을 찾는다.
[찾은후 수행할 작업]
-print : 찾은 내용을 보여준다.
-exec "수행명령어" : 검색된 파일을 대상으로 :수행명령어"를 실행한다.
[예제]
특정 사용자의 ID 소유로된 모든 파일 찾기.
[os] find / -user khi083 -print
현재 디렉토리 이하부터 test 파일명을 찾아 보여준다.
[os] find . -name test -print
khi083 사용자의 홈디렉토리에서 test 파일명을 찾아 보여준다.
[os] find ~khi083 -name test -print
특정 파일을 찾은 후 자동 삭제방법.
[os] find ~khi083 -name test -exec rm -f {} \;
지정한 소유자의 모든 파일을 찾아서 확인하기.
[os] find / -user khi083 -exec ls -l {} \;
특정용량 이상되는 파일들 모두찾기.
[os] find /usr/ -size +10000k -exec ls -l {} \; -- 약 10MB이상
특정 퍼미션을 가지고 있는 파일들을 모두 찾기
[os] find / -perm 4755 -exec ls -l {} \;
존재하는 모든 링크파일 찾기
[os] find / -type l -exec ls -l {} \;
디렉토리 이하에서 "doc" 라는 문자를 포함하고 있는 파일을 찾아서 파일의 위치와 파일명, 포함된 행을 출력한다.
[os] find /etc type f -exec egrep -i "doc" /dev/null {} \;
-------------------------------------- 보안 관련된 find --------------------------------------
지정된 일자 이후에 변경된 모든 파일 찾기(서버점검시에 서버해킹으로 인하여 변경된 파일을 찾을 경우)
[os] find / -used 2 -exec ls -l {} \; -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
지정된 파일보다 이후에 생성된 파일 찾기(해킹된 파일이나 백도어 파일을 찾은 후에 그 파일과 함께 시스템에 생성된 파일찾기)
[os] find / -newer /root/file1.txt -exec ls -l {}; -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
root소유의 SetUID 파일 찾기
[os] find / -user root -perm -4000 -print
서버내부에서 .bash_history 파일을 모두 찾아서 확인하기(root소유의 .bash_history파일이 용량이 0이라면 이는 매우 심각한 경우로서 거의 99%이상은 해킹되었다고 보셔도 무방하다.)
[os] find / -name .bash_history -exec ls -l {} \;
소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
[os] find / -nouser -o -nogroup -print -- -o옵션은 "OR"를 의미한다
find 명령어 활용법 정리
1. 특정문자를 포함하는 파일찾기와 그 문자가 속한 행 찾기
- 형식 : find 찾을위치 type f -exec egrep -i "포함하는문자" /dev/null {} \;
- 설명 : 파일에 cmd 라는 단어가 포함되어있는 파일내역을 출력할 수 있다.
2. 소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
- 형식 : find 찾을위치 -nouser -o -nogroup -print
3. 쓰기 권한이 있는 파일 및 디렉토리 찾기
- 형식 : find / -type f \( -perm -2 -o -20 \) -exec ls -lg {} \;
- 형식 : find / -type d \( -perm -2 -o -20 \) -exec ls -lg {} \;
- 설명 : 일반 사용자들에게 쓰기 권한의 퍼미션이 있는 파일이나 디렉토리를 찾을 수 있다.
4. 서버내부에서 .bash_history 파일을 모두 찾아서 확인하기
- 형식 : find / -name .bash_history -exec ls -l {} \;
- 설명 : .bash_history파일은 root를 포함하여 각 사용자들의 홈디렉토리에 존재하는 파일로 각 사용자들이
사용했던 명령어가 저장되어 있는 파일임. 만약 파일용량이 0 이라면 해킹을 의심 해볼 수도 있다.
5. 서버내부의 .rhosts 파일을 확인하기
- 형식 : find / -name .rhosts -exec ls -l {} \;
- 설명 : .rhosts파일은 외부에서 아무런 제한없이 로그인할 수 있는 접근허용이 설정된 파일이다.
파일의 존재여부를 확인해야 한다.
6. 서버 내의 백도어 파일 찾기
- 형식 : find /dev -type f -exec ls -l {} \;
- 설명 : 서버내에 백도어가 생성되는 위치는 거의 대부분 /dev이다.
/dev는 장치파일들이 존재하므로 일반적인 파일들이 존재하지 않다.
만약 /dev에 일반파일이 검색된다면 거의 대부분 백도어 파일이라고 판단할 수 있다.
(요즘은 딱히 그렇지도 않다.)
7. root소유의 SetUID, SetGID 파일찾기
- 형식 : find / -user root -perm -4000 -print
- 형식 : find / -type f \( -perm -4000 -o -perm -2000 \)
- 설명 : root 소유의 SetUID 파일은 실행시에 root 권한으로 실행이 되므로 반드시 관리되어야 할 파일이다.
8. 서버 내에 존재하는 모든 링크파일 검사하기
- 형식 : find / -type l -exec ls -l {} \;
- 설명 : 링크파일은 root 이외에는 잘 사용하지 않는 파일이다. 따라서 이러한 링크파일이 목적한 용도 이외에
생성이 되었는가를 확인해야 한다.
9. 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기
- 형식 : find "검색할 디렉토리경로" -type d -print
10. 지정된 파일보다 이후에 생성된 파일 찾기
- 형식 : find / -newer /root/file1.txt -exec ls -l {} \;
- 설명 : /root/file1.txt 라는 파일이 생성된 날짜 이후에 생성된 파일을 검색
11. 지정된 일자 이후에 변경된 모든 파일 찾기
- 형식 : find / -used 2 -exec ls -l {} \; (2일 전에 변경된 적이 있는 파일을 검색한다.)
- 설명 : 지정된 일자 이후에 변경된 적이 있는 파일을 찾는 방법
12. 특정 퍼미션을 가지고 있는 파일 찾기
- 형식 : find / -perm 4755 -exec ls -l {} \;
13. 특정용량 이상되는 파일찾기
- 형식 : find /usr -size +10000k -exec ls -l {} \; (10메가 이상되는 파일찾기)
14. 지정한 소유자의 모든 파일을 찾기
- 형식 : find / -user test01 -exec ls -l {} \; (test01 소유자의 모든 파일찾기)
15. 지정한 소유자가 nobody 인 파일과 퍼미션이 644 인 파일을 동시에 찾기
- 형식 : find / -user nobody -perm -644 -print | more
- 설명 : 한페이지에 너무 많이 출력될 경우를 대비해 more를 사용하였다. 해킹용 쉘코드가 삽입된 파일들은
대부분이 nobody 에 644 이다. 그래서 위 형식으로 검색할경우 의심파일을 쉽게 찾을수 있다.
16. 해당 문자열이 포함된 파일을 검색하여 출력
- 형식 : find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print
17. 문자열 찾아서 바꾸기
- 형식 : find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;
18. 확장자 bak 파일 찾아서 삭제하기
- 형식 : find ./ -type f -name *.bak -exec rm -f {} \;
19. 2개이상의 조건으로 검색
- 형식 : find . -type f \( -mtime -1 -o -ctime -1 \) -print
(mtime 또는 ctime 1일 미만인 파일)
- 형식 : find . -type f \( -mtime -1 -a -ctime -1 \) -print
(mtime 과 ctime 모두 1일 미만인 파일)
20. pds 폴더의 하위 list 출력
- 형식 : find . -type d -name 'pds' | xargs ls -al
find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print
문자열 찾아서 바꾸기
find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;
확장자 bak 파일 찾아서 삭제하기
find ./ -type f -name *.bak -exec rm -f {} \;
2개이상의 조건으로 검색
find . -type f \( -mtime -1 -o -ctime -1 \) -print
(mtime 또는 ctime 1일 미만인 파일)
find . -type f \( -mtime -1 -a -ctime -1 \) -print
(mtime 과 ctime 모두 1일 미만인 파일)
pds 폴더의 하위 list 출력
find . -type d -name 'pds' | xargs ls -al
find [검색 대상 경로] -옵션
옵션
-name filename : 찾고자 하는 파일명 (-name "*.txt")
-atime +n : access time이 현재일 보다 n일 이전인 파일 검색
-atime -n : access time이 현재일 보다 n일 이내의 파일 검색
-mtime +n : 수정일이 현재일 보다 n일 이전인 파일 검색
-mtime -n : 수정일이 현재일 보다 n일 이내인 파일 검색
-type f or d : f - 파일, d - 디렉토리
-maxdepth n : 지정된 경로에서 n개 하위 디렉토리까지 검색
find 후 처리
-print : 검색된 파일의 절대 경로를 화면에 출력
-exec 명령어 {} \; : 명령어 구분자로 ;을 사용한다.
* 현재 디렉토리에서 확장자가 txt이고 수정일이 3일 이전인 파일 삭제
find ./ -name "*.txt" -a -mtime +3 -exec rm {} \;
* 수정된지 10일 이상된 파일 삭제
find ./ -mtime +10 -type f -exec rm -f {} \;
* 확장자가 log인 파일 중에서 수정된지 500일 이상인 파일을 ./backup 디렉토리로 이동
find ./ -name "*.log" -mtime +500 -type f -exec mv {} ./backup \;
option
[찾을 디렉토리경로]
. : 현재 디렉토리 이하를 검색대상으로 한다.
/ : 루트디렉토리(파일시스템전체) 이하를 대상으로 한다.
~ID : 지정된 ID의 홈디렉토리이하를 대상으로한다.
[찾기옵션]
-empty : 비어있는 파일을 찾는다.
-uid UID : 지정된 UID를 갖는 파일을 찾는다.
-gid GID : 지정된 GID를 갖는 파일을 찾는다.
-group 그룹명 : 지정된 group을 갖는 파일을 찾는다.
-name : 지정된 형식의 패턴을 가지는 파일을 찾는다.
-newer : 지정된 파일 이후에 생성된 파일을 찾는다.
-perm : 지정된 퍼미션을 가진 파일을 찾는다.
-used 일자수 : 최근 n일 이후에 변경된 파일을 찾는다.
-user : 지정된 파일을 소유하고 있는 소유자의 모든 파일을 찾는다.
[찾은후 수행할 작업]
-print : 찾은 내용을 보여준다.
-exec "수행명령어" : 검색된 파일을 대상으로 :수행명령어"를 실행한다.
[예제]
특정 사용자의 ID 소유로된 모든 파일 찾기.
[os] find / -user khi083 -print
현재 디렉토리 이하부터 test 파일명을 찾아 보여준다.
[os] find . -name test -print
khi083 사용자의 홈디렉토리에서 test 파일명을 찾아 보여준다.
[os] find ~khi083 -name test -print
특정 파일을 찾은 후 자동 삭제방법.
[os] find ~khi083 -name test -exec rm -f {} \;
지정한 소유자의 모든 파일을 찾아서 확인하기.
[os] find / -user khi083 -exec ls -l {} \;
특정용량 이상되는 파일들 모두찾기.
[os] find /usr/ -size +10000k -exec ls -l {} \; -- 약 10MB이상
특정 퍼미션을 가지고 있는 파일들을 모두 찾기
[os] find / -perm 4755 -exec ls -l {} \;
존재하는 모든 링크파일 찾기
[os] find / -type l -exec ls -l {} \;
디렉토리 이하에서 "doc" 라는 문자를 포함하고 있는 파일을 찾아서 파일의 위치와 파일명, 포함된 행을 출력한다.
[os] find /etc type f -exec egrep -i "doc" /dev/null {} \;
-------------------------------------- 보안 관련된 find --------------------------------------
지정된 일자 이후에 변경된 모든 파일 찾기(서버점검시에 서버해킹으로 인하여 변경된 파일을 찾을 경우)
[os] find / -used 2 -exec ls -l {} \; -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
지정된 파일보다 이후에 생성된 파일 찾기(해킹된 파일이나 백도어 파일을 찾은 후에 그 파일과 함께 시스템에 생성된 파일찾기)
[os] find / -newer /root/file1.txt -exec ls -l {}; -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
root소유의 SetUID 파일 찾기
[os] find / -user root -perm -4000 -print
서버내부에서 .bash_history 파일을 모두 찾아서 확인하기(root소유의 .bash_history파일이 용량이 0이라면 이는 매우 심각한 경우로서 거의 99%이상은 해킹되었다고 보셔도 무방하다.)
[os] find / -name .bash_history -exec ls -l {} \;
소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
[os] find / -nouser -o -nogroup -print -- -o옵션은 "OR"를 의미한다
find 명령어 활용법 정리
1. 특정문자를 포함하는 파일찾기와 그 문자가 속한 행 찾기
- 형식 : find 찾을위치 type f -exec egrep -i "포함하는문자" /dev/null {} \;
- 설명 : 파일에 cmd 라는 단어가 포함되어있는 파일내역을 출력할 수 있다.
2. 소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
- 형식 : find 찾을위치 -nouser -o -nogroup -print
3. 쓰기 권한이 있는 파일 및 디렉토리 찾기
- 형식 : find / -type f \( -perm -2 -o -20 \) -exec ls -lg {} \;
- 형식 : find / -type d \( -perm -2 -o -20 \) -exec ls -lg {} \;
- 설명 : 일반 사용자들에게 쓰기 권한의 퍼미션이 있는 파일이나 디렉토리를 찾을 수 있다.
4. 서버내부에서 .bash_history 파일을 모두 찾아서 확인하기
- 형식 : find / -name .bash_history -exec ls -l {} \;
- 설명 : .bash_history파일은 root를 포함하여 각 사용자들의 홈디렉토리에 존재하는 파일로 각 사용자들이
사용했던 명령어가 저장되어 있는 파일임. 만약 파일용량이 0 이라면 해킹을 의심 해볼 수도 있다.
5. 서버내부의 .rhosts 파일을 확인하기
- 형식 : find / -name .rhosts -exec ls -l {} \;
- 설명 : .rhosts파일은 외부에서 아무런 제한없이 로그인할 수 있는 접근허용이 설정된 파일이다.
파일의 존재여부를 확인해야 한다.
6. 서버 내의 백도어 파일 찾기
- 형식 : find /dev -type f -exec ls -l {} \;
- 설명 : 서버내에 백도어가 생성되는 위치는 거의 대부분 /dev이다.
/dev는 장치파일들이 존재하므로 일반적인 파일들이 존재하지 않다.
만약 /dev에 일반파일이 검색된다면 거의 대부분 백도어 파일이라고 판단할 수 있다.
(요즘은 딱히 그렇지도 않다.)
7. root소유의 SetUID, SetGID 파일찾기
- 형식 : find / -user root -perm -4000 -print
- 형식 : find / -type f \( -perm -4000 -o -perm -2000 \)
- 설명 : root 소유의 SetUID 파일은 실행시에 root 권한으로 실행이 되므로 반드시 관리되어야 할 파일이다.
8. 서버 내에 존재하는 모든 링크파일 검사하기
- 형식 : find / -type l -exec ls -l {} \;
- 설명 : 링크파일은 root 이외에는 잘 사용하지 않는 파일이다. 따라서 이러한 링크파일이 목적한 용도 이외에
생성이 되었는가를 확인해야 한다.
9. 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기
- 형식 : find "검색할 디렉토리경로" -type d -print
10. 지정된 파일보다 이후에 생성된 파일 찾기
- 형식 : find / -newer /root/file1.txt -exec ls -l {} \;
- 설명 : /root/file1.txt 라는 파일이 생성된 날짜 이후에 생성된 파일을 검색
11. 지정된 일자 이후에 변경된 모든 파일 찾기
- 형식 : find / -used 2 -exec ls -l {} \; (2일 전에 변경된 적이 있는 파일을 검색한다.)
- 설명 : 지정된 일자 이후에 변경된 적이 있는 파일을 찾는 방법
12. 특정 퍼미션을 가지고 있는 파일 찾기
- 형식 : find / -perm 4755 -exec ls -l {} \;
13. 특정용량 이상되는 파일찾기
- 형식 : find /usr -size +10000k -exec ls -l {} \; (10메가 이상되는 파일찾기)
14. 지정한 소유자의 모든 파일을 찾기
- 형식 : find / -user test01 -exec ls -l {} \; (test01 소유자의 모든 파일찾기)
15. 지정한 소유자가 nobody 인 파일과 퍼미션이 644 인 파일을 동시에 찾기
- 형식 : find / -user nobody -perm -644 -print | more
- 설명 : 한페이지에 너무 많이 출력될 경우를 대비해 more를 사용하였다. 해킹용 쉘코드가 삽입된 파일들은
대부분이 nobody 에 644 이다. 그래서 위 형식으로 검색할경우 의심파일을 쉽게 찾을수 있다.
16. 해당 문자열이 포함된 파일을 검색하여 출력
- 형식 : find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print
17. 문자열 찾아서 바꾸기
- 형식 : find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;
18. 확장자 bak 파일 찾아서 삭제하기
- 형식 : find ./ -type f -name *.bak -exec rm -f {} \;
19. 2개이상의 조건으로 검색
- 형식 : find . -type f \( -mtime -1 -o -ctime -1 \) -print
(mtime 또는 ctime 1일 미만인 파일)
- 형식 : find . -type f \( -mtime -1 -a -ctime -1 \) -print
(mtime 과 ctime 모두 1일 미만인 파일)
20. pds 폴더의 하위 list 출력
- 형식 : find . -type d -name 'pds' | xargs ls -al