리눅스에서 파일을 읽고 있는데 삭제한다면?
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
'리눅스' 카테고리의 다른 글
나중에 bash trick 나오면 쓸만한 가젯 (0) | 2019.06.14 |
---|---|
여러개의 아파치 프로세스가 떠 있는 이유 (0) | 2019.06.13 |
리눅스 커널 공부 (2) | 2018.01.16 |
Apache2 웹서버 포트 열기 (0) | 2017.10.04 |
요즘 드는 생각들 (2) | 2017.02.27 |