리눅스

리눅스에서 파일을 읽고 있는데 삭제한다면?

2019. 5. 3. 18:03

리눅스에서 파일을 읽고 있는데 삭제한다면?

 

소혜!

리눅스는 파일로써 모든 것을 관리한다고들 하는데 만약에 파일을 읽는 도중 읽던 파일이 삭제되면 어떤 상황이 발생하게 될까? 다음과 같은 상황을 생각해보자. 

 

#!/usr/bin/python
import time
import os

f = open('flag.txt', 'r')

# ==== Reading the flag
flag = f.read()
with open('temp.txt','w') as tmp:
  tmp.write('Reading the flag...')

#print flag
time.sleep(99999)

# ==== Done, Cleaning up
os.remove('temp.txt')

f.close()

 

해당 소스는 CSA Capture The Flag 2019의 Linux 1 이라는 문제에서 제공된 파일이다. 해당 문제는 해당 스크립트가 실행되는 서버의 ssh 포트를 열어주고 flag.txt의 내용을 찾으라는 시나리오를 갖고 있었다. 해당 스크립트를 실행시킨채로 flag.txt 를 삭제시킨다. 이에 따라 디렉터리는 다음과 같은 구조를 갖게 된다. 

 

lsof(https://www.morenice.kr/72)로 flag.txt를 사용하고 있는 프로세스를 확인해보면 다음과 같은 결과를 얻을 수 있다. 

 

해당 프로세스를 flag.txt 를 사용하고 있지만 삭제되었기에 deleted 라고 뜬다. 이 경우 fd 를 사용해서 파일을 다시 볼 수 있다. 리눅스는 모든 것을 파일로 관리하기 때문이다. 

 

이렇게 삭제된 파일이 복사된 것을 볼 수 있다. 해당 내용을 이해하려면 Proc filesystem에 대해서 공부하여야 한다. 

 

Proc filesystem

https://www.joinc.co.kr/w/Site/system_programing/proc/GetSMSInfo