지난 회차까지 우리는 리눅스 시스템의 기초적인 탐색, 권한 제어, 프로세스 감시, 그리고 물리적인 디스크와 메모리 자원을 점검하는 핵심 인프라 관리 기술에 대해 알아보았습니다. 시스템 운영의 전반적인 자원 상태를 완벽히 장악했다면, 이제는 연재의 후반부 첫 단계이자 보안 인프라 엔지니어링의 정점 중 하나인 '파일 시스템 검색과 무결성 검증 기술'을 마스터할 차례입니다.
수백만 개의 파일이 얽혀 있는 엔지니어링 환경에서 특정 조건(예: 특정 날짜 이후에 수정되었거나 권한이 잘못 설정된 파일)에 맞는 대상을 정확히 찾아내기란 모래사장에서 바늘을 찾는 것과 같습니다. 게다가 해커가 시스템에 침투하여 커널 명령어나 중요 시스템 파일을 변조해 두었다면, 일반적인 방법으로는 이를 알아채기 어렵습니다.
이때 우리에게 필요한 무기가 바로 정교한 조건 검색 도구인 find와 시스템 파일의 변조 여부를 과학적으로 증명하는 파일 무결성 검증 기술입니다. 이번 11회차에서는 파일 시스템 깊숙이 숨겨진 대상을 추적하고 시스템의 안전성을 검증하는 실무 기법을 상세히 살펴보겠습니다.
find 명령어는 리눅스 파일 시스템을 실시간으로 직접 순회하며 사용자가 제시한 이름, 크기, 소유자, 권한, 수정 시간 등 복합적인 조건을 만족하는 파일을 색출해 내는 가장 강력한 탐색 엔진입니다. 단순히 파일을 '찾는' 것에 그치지 않고, 찾은 대상에 대해 특정 후속 명령어(삭제, 복사, 권한 변경 등)를 즉시 연계 실행할 수 있는 실무 최적화 기능을 제공합니다.
Bash
find [경로] [조건_옵션] [동작_옵션]
-name: 파일이나 디렉토리의 이름을 기준으로 검색합니다. (와일드카드 * 사용 가능)
-user / -group: 특정 소유자나 소유 그룹의 파일을 찾습니다.
-size: 파일 크기를 기준으로 검색합니다. (예: +100M은 100MB 초과, -10G는 10GB 미만)
-mtime: 파일의 수정 시간(Modify Time)을 일(Day) 단위 기준으로 검색합니다. (-atime은 접근 시간, -ctime은 속성 변경 시간)
-perm: 특정 접근 권한을 가진 파일을 찾습니다. (보안 하드닝 시 필수)
디스크 용량 고갈을 막기 위해 /var/log/myapp 디렉토리 하위에서 수정된 지 30일이 넘은 오래된 확장자 .log 파일들을 찾아서 자동으로 지워버리는 스케줄러 스크립트용 명령어입니다.
Bash
find /var/log/myapp -name "*.log" -mtime +30 -exec rm -f {} \;
-mtime +30: 마지막으로 수정된 지 30일이 초과된 파일만 필터링합니다.
-exec [명령어] {} \;: find가 찾아낸 파일들을 하나씩 {} 자리에 대입하여 뒤에 나오는 명령어를 실행하라는 뜻입니다. 여기서는 rm -f를 실행하여 조건에 맞는 파일을 자동 소멸시킵니다. 맨 끝의 \;은 exec 구문의 종료를 의미하는 필수 기호입니다.
시스템 보안 가이드라인에 따라, 인프라 내부에 전면 개방 권한(777)을 가진 위험한 파일이 방치되어 있는지 스캔하거나, 퇴사한 사용자의 계정이 삭제되어 UID 숫자만 덩그러니 남은 '소유자 없는 파일'을 추적하는 격리 단계입니다.
Bash
# 1. /var/www 디렉토리 하위에서 권한이 777인 일반 파일(-type f) 검색
find /var/www -type f -perm 777
# 2. 시스템 전체에서 소유자가 존재하지 않는(nouser) 위험 파일 스캔
find / -nouser 2>/dev/null
실무 팁: 시스템 전체를 훑을 때는 권한 문제로 발생하는 무수한 에러 메시지가 화면을 뒤덮지 않도록 표준 에러를 널 디바이스로 버리는 2>/dev/null 파이프 제어를 붙여주는 것이 좋습니다.
find 명령어는 파일 시스템 전체를 실시간으로 물리적으로 긁으며 탐색하기 때문에 정확하지만 디스크 I/O 자원을 많이 소모하고 검색 속도가 느리다는 단점이 있습니다. 반면, 파일의 이름만 가지고 위치를 빛의 속도로 찾아내야 할 때는 locate 명령어가 압도적으로 유리합니다.
locate는 실시간 디스크 탐색을 하지 않습니다. 시스템 내부에 미리 구축된 파일 경로 인덱스 데이터베이스인 /var/lib/mlocate/mlocate.db에서 키워드를 검색하기 때문에 1초도 안 되는 시간에 결과를 반환합니다.
Bash
# 시스템 전체에서 nginx.conf 파일의 위치를 초고속 검색
locate nginx.conf
locate 데이터베이스는 일반적으로 하루에 한 번(cron 스케줄러에 의해 밤새 자동으로) 갱신됩니다. 따라서 방금 전 내가 생성한 파일이나 몇 분 전에 다운로드한 파일은 locate로 검색하면 나오지 않습니다. 이때는 데이터베이스를 강제로 수동 업데이트해 준 뒤 검색해야 합니다.
Bash
# 1. 파일 경로 인덱스 DB를 지금 즉시 최신화 (root 권한 필요)
sudo updatedb
# 2. 이후 다시 검색 수행
locate my_new_script.sh
시스템 어드mini스트레이터에게 검색만큼 중요한 것이 바로 "이 파일이 원본 그대로 보존되어 있는가?"를 증명하는 무결성 검증입니다. 해커들이 시스템 침투에 성공하면 추후 재접속을 위해 /bin/login이나 /bin/ps, /usr/bin/ssh 같은 핵심 바이너리 실행 파일을 변조하여 백도어(Backdoor)를 심어두는 경우가 많습니다.
외형적인 파일 크기나 생성 날짜는 해커가 쉽게 조작할 수 있으므로, 엔지니어는 눈에 보이지 않는 파일 내부 데이터의 유일무이한 지문이라고 할 수 있는 암호학적 해시 함수(Cryptographic Hash Function)를 이용해 무결성을 검증해야 합니다. 리눅스에서는 주로 sha256sum 명령어를 표준으로 사용합니다.
해시 함수는 파일 내용이 단 1비트, 글자 한 자만 바뀌어도 완전히 상이한 64자리의 고유한 16진수 문자열(해시 결과값)을 뱉어내는 '산사태 효과'를 가집니다. 따라서 원본 상태일 때 기록해 둔 해시 값과 현재 파일의 해시 값을 대조하면 파일의 오염 및 변조 여부를 100% 확증할 수 있습니다.
Bash
# 1. 원본 상태의 /bin/ps 파일에 대한 SHA-256 해시 지문 추출
sha256sum /bin/ps
# 출력 결과 예시: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 /bin/ps
# 2. 안전한 별도의 오프라인 보관소에 이 해시 리스트를 텍스트 파일로 저장해 둠
sha256sum /bin/ps /bin/login /usr/bin/ssh > /root/system_fingerprints.txt
# 3. 주기적인 보안 점검 날, 저장해 둔 파일 지문 리스트를 기반으로 자동 교차 검증 실행 (-c 옵션)
sha256sum -c /root/system_fingerprints.txt
위 명령어 검증 결과, 각 파일 옆에 OK 사인이 떨어지면 변조되지 않은 깨끗한 상태임을 의미합니다. 만약 해커가 악성 코드를 심어 둔 파일이 있다면 FAILED 경고가 출력되어 침해 사고가 발생했음을 즉시 인지할 수 있습니다.
Plaintext
/bin/ps: OK
/bin/login: FAILED # 신속한 시스템 격리 및 백업본 복구가 필요한 상태!
/usr/bin/ssh: OK
리눅스 파일 시스템의 깊은 구조 속에서 원하는 자산을 명확히 식별하고, 시스템의 안정성을 빈틈없이 수호하는 검색과 검증 기술은 고급 인프라 엔지니어로 가기 위한 필수 관문입니다.
디스크 용량 정리나 취약점 진단을 위해 파일의 메타데이터 조건을 엮어 정밀 타격하고 연계 명령을 수행할 때는 find -exec 아키텍처를 가동하고,
단순 파일 이름 기반의 경로 파악이 급선무일 때는 데이터베이스 기반의 초고속 검색 숏컷인 locate와 updatedb 조합을 배치하며,
육안으로 구별하기 힘든 핵심 실행 파일 및 설정 파일의 은밀한 변조와 오염을 과학적으로 차단하고 검증할 때는 sha256sum -c 기법을 상시 가동해야 합니다.
검색을 통해 비정상적인 요소를 골라내고, 해시 지문을 통해 인프라의 완전무결함을 증명할 수 있을 때, 거대한 엔터프라이즈 환경에서도 흔들림 없는 완벽한 방어 체계를 유지할 수 있습니다. 다음 12회차에서는 이러한 일련의 점검 작업과 주기적인 백업 명령들을 엔지니어가 매번 수동으로 입력하지 않고, 커널이 정해진 스케줄에 맞춰 스스로 실행하도록 만드는 '인프라 자동화의 비서, Crontab 스케줄러 정복' 기술에 대해 자세히 알아보겠습니다.