Skip to content

2009.11.30 23:41

lsof 활용 가이드

조회 수 8313 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Tip 1) 어떤 특정한 파일을 사용하고 있는 프로세스들에 대한 정보를 알고 싶을 때,

$ lsof (expected file name with path)

을 실행하면 된다.

$ lsof /etc/passwd

를 실행하면, /etc/passwd를 억세스하고 있는 프로세스들을 점검할 수 있으며, 이 파일을 가지고 장난치는 프로세스들도 발견할 수 있다.

Tip 2) 어떤 파일 시스템 내에, 그렇게 큰 크기의 파일들을 찾을 수 없는데도 불구하고, Available Space가 0을 향해서 치닫고 있을 수도 있다. 아마도, unlink된 파일에 대고 계속해서 써 대고 있을 가능성이 크다. lsof는

$ lsof (expected directory - root of mounted partition)

의 형식으로 해당 디렉토리 내, 혹은 partition 내에 있는 모든 파일들에 대해 억세스하고 있는 프로세스들을 열거해 줄 수 있다. 역시 장난 치는 프로세스를 발견할 수 있을 것이다.

Tip 3) 긴급히 어떤 파일 시스템을 unmount해야 할 때, 여러분은 해당 파일 시스템에 있는 파일들을 사용하는 프로세스들 덕분에 unmount를 하지 못하고 마냥 기다리기만 했던 일을 겪어 봤을 것이다. lsof는 파일 시스템 내에 있는 파일들에 대해서 억세스하고 있는 프로세스들을 다 찾아줄 수 있다.

$ lsof (expected file system name)

이것을 이용해서 즉시 unmount를 하는 스크립트도 간단히 만들 수 있을 것이다.

Tip 4) lsof는 모든 네트워크 Socket들을 찾아낼 수 있다.

$ lsof -i

를 실행하면, 현재 사용되고 있는 모든 Socket들을 볼 수 있을 것이다.

Tip 5) Tip 4)를 잘 이용하면, 어떤 네트워크 Connection에 대해서 그 목적지 나 어디서 부터 맺어진 연결인지를 쉽게 알아낼 수 있다. 만약, 여러분의 서버 에서 돌아가고 있는 프로세스들 중에서, security.kaist.ac.kr로 연결을 하고 있는 프로세스를 잡아낼 수 있으며, 구체적으로 어떤 서비스(혹은 포트)에 연 결하고 있는가도 지정하여 알아낼 수 있다.

$ lsof -i@security.kaist.ac.kr $ lsof -iTCP(|UDP)@security.kaist.ac.kr:smtp

물론 여러개의 -i옵션을 이용해서 다양한 호스트로의 연결을 잡아낼 수 있다.

Tip 6) Tip 5)를 응용해서 netstat과 물려서 이용하는 예도 있다.


$ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 security.kaist.ac:1019 fool.bbaga.co.kr:login ESTABLISHED

자, 누군가가 fool.bbaga.co.kr의 login 서비스로 커넥트하고 있는 것이 발견 됐다. 이 프로세스를 Tip 5)를 이용해서 찾아보도록 하자.

$ lsof -iTCP@fool.bbaga.co.kr:login
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
rlogin 25023 godslord 3u inet 0x10144168 0t184 TCP security.kaist.ac.kr:1019-)fool.bbaga.co.kr:login
...

Tip 7) lsof로, 어떤 특정한 프로그램의 프로세스들이 억세스하고 있는 모든 파일들을 볼 수 있다. -c 옵션으로 이것을 간단하게 해결할 수 있다.
$ lsof -c httpd

httpd 데몬을 통해서 억세스 되고 있는 모든 파일들을 열람할 수 있다.

Tip 8) lsof를 이용하여, rcp나 ftp를 이용한 파일 전송 과정을 모니터링 할 수도 있다. 먼저 대상이 되는 프로세스를 ps 등을 이용해서 찾아낸다. 그런 다음,

$ lsof -p (PID)

를 하면 당연히 해당 프로세스가 열고 있는 파일들을 열람할 수 있게 된다. 조금 더 자세히하고 싶다면, ftp는 일반적으로 9,10이나 10,11번을 각각 Socket과 Local Data File에 할당하고, rcp는 3,4번을 할당한다. 이를 이용 하면,

$ lsof -p (PID) -ad9,10 -r

이런 식으로 되며, 어떤 뜻인지는 위의 옵션 설명을 보고 해석해 보기 바란다.

Tip 9) lsof로는 어떤 유저가 열고 있는 모든 파일들을 열거해 볼 수도 있다.

$ lsof -u(loginname) 혹은 $ lsof -u(UID)

-u 옵션에는 인자를 ","로 구분하여 여러 인자를 한 꺼번에 넘길 수 있다.

$ lsof -ugodslord,sakai,astroby

즉, godslord, sakai, astroby의 유저들이 열고 있는 모든 파일들을 열거한다. -u 옵션을 사용하면서, 특정한 유저에 대한 정보는 보고 싶지 않을 때는, Login Name이나 UID의 앞에 "^"를 붙여 주면 된다.

$ lsof -u ^root 혹은 $ lsof -u ^0

이렇게 되면, root에 대해서는 체크를 하지 않는다.

Tip 10) lsof를 이용해서, 로그인 추적도 가능하다. 다음의 예제는 Solaris 2.x 에서의 경우이다.


$ lsof -i@security.kaist.ac.kr
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
in.rlogin 8112 root 0u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)
in.rlogin 8112 root 1u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)
in.rlogin 8112 root 2u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)

security.kaist.ac.kr에서부터 fool.bbaga.co.kr로 로긴한 프로세스가 있다. 이 프로세스의 ID는 8112번이다.

$ lsof -p 8112
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
....
in.rlogin 8112 root 4u VCHR 23,0 0t0 136785 /devices/pseudo/clone@0:ptmx-)logindmux-)ptm
in.rlogin 8112 root 5u VCHR 4,0 0t0 136939 /devices/pseudo/clone@0:logindmux-)logindmux
in.rlogin 8112 root 6u VCHR 4,1 0t0 136939 /devices/pseudo/clone@0:logindmux-)logindmux
...

물론 다른 내용도 많겠지만 위의 내용, 특히 맨 첫 라인에 주목해 보자. 이 프로세스는 DEVICE 항목에서 보듯이, 23, 0의 Device를 사용하고 있으며, 이는 곧, /dev/pts/0을 의미한다.

$ lsof /dev/pts/0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tcsh 8114 godslord 15u VCHR 24,0 0t35381 136786 /dev/pts/../../devices/pseudo/pts@0:0
...

즉, 이 유저는 /dev/ptr/0에서 tcsh 프로세스를 가지고 로긴한 사실을 알 수 있다.
Platform마다 다르지만 비슷한 방법으로 로긴을 추적해 낼 수 있다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
88 CentOS Portsentry 1.2 소스설치 오류 ADMINPLAY 2014.01.19 7052
87 PHP 보안의 약방의 감초 open_basedir ADMINPLAY 2014.01.02 7520
86 CentOS 5.2 32bit 에 2.6.27.4 커널 + iptables 1.4.2 + c... ADMIN 2008.11.10 7818
85 wowhacker.com ADMIN 2008.11.11 8065
84 파일 퍼미션 설정을 통한 로컬 공격 방지 l2zeo 2010.03.08 8168
» lsof 활용 가이드 ADMINPLAY 2009.11.30 8313
82 서버종합점검[리눅스] ADMINPLAY 2009.05.28 8367
81 iptables 기본 ADMINPLAY 2009.05.22 8386
80 SSH 공격막아내기 방법 l2zeo 2010.03.08 8391
79 SSH(Security SHell) 보안쉘 ADMINPLAY 2009.10.20 8404
78 Tcpdump 용어 정리 ADMINPLAY 2010.01.30 8505
77 ZONE-H.KR ADMIN 2008.11.11 8542
76 pam_abl 을 통한 SSH 무작위 공격 방어 ADMINPLAY 2009.06.04 8731
75 LINUX 해킹당했을 때 대처요령 l2zeo 2010.03.08 8731
74 시스템 로그를 메일로 - logcheck file ADMINPLAY 2009.09.08 8772
73 서버의 iptable 보안설정 일부분 ADMINPLAY 2009.05.28 8786
72 Kernel 2.4.23 버전 이하에 나온 ptrace 버그에 관한 사항 ADMINPLAY 2009.12.13 8797
71 iptables 옵션 및 상태 추적 테이블 및 rule ADMINPLAY 2009.11.30 8851
70 iptables 설정, centos64 설치 간단셋팅 ADMINPLAY 2009.05.28 8854
69 홈페이지 보안 강화 도구(CASTLE) 보급 안내 1 file ADMINPLAY 2010.01.22 8925
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234