리눅스 분류
lsof 사용하기
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 8,947 조회
- 0 추천
- 목록
본문
0. lsof란
사전적인 의미로는 열려진 파일을 보는 유틸이다
즉 시스템에서 구동되고 있는 프로세서에 의해 열려진 파일을 확인 하는 확인하는 것이다
하지만 Unix, Linux계열은 프로세서분아니라 소켓등도
파일로 관리 함으로 lsof로 모니터링이 가능하다 .
1. 설치 및 다운로드
일반적으로 사용하는 배포본의 경우 포함하고 있거나 배포패키를 제공한다
즉 rpm, dep와 같은 형테의 팡르을 찾아서 설치하면되며
최신버전을 원하는경우에는 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof에서 확인이 가능하다 .
다운 받은후 압축을 해제하면 먼저 소스파일의 무결성을 조사하여야한다 .
# ./inventory
Conducting an inventory of the lsof distribution; this will take a while.
....
....
Examining lib: OK
Examining scripts: OK
This lsof distribution seems to be complete.
무결성 조사이후 complete가 되면 헤더파일에대한 테스및 환경을 구성해야한다
# ./Configure
이후 이상이 없다면 컴컴파일과 인스톨을 진행한다
# make && make install
2. lsof 옵션 및 기본 사용법
lsof 사용법
lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-f [cfgGn] ]
[ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ]
[ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
lsof 의 옵션
-?, -h list help
-a AND selections (OR)
-d s select by FD set
-D D ?|i|b|r|u[path]
+|-f -files +filesys
-l list UID numbers
-n no host names
-N select NFS files
-s list file size
-t terse listing
-T disable TCP/TPI info
-v display version info
-V verbose search
-F [f] select fields;-F? for help
-o o o 0t offset digits (8)
-S [t] t second stat timeout(15)
-i i select by IPv4 address: [proto][@host|addr][:svc_list|port_list]
+|-r [t] repeat every t seconds (15);
+ until no files, - forever
-b avoid kernel blocks
-c c list command c
-P no port names
-i select IPv4 files
-p s select by PID set
-C no kernel name cache
+|-w Warnings (+)
-R list paRent PID
-k k kernelsymbols (/dev/ksyms)
-U select Unix socket
-u s exclude(^)/select login/UID s
-m m kernel memory (/dev/kmem)
+|-M portMap registration (-)
-- end option scan
-g [s] select by process group ID set and print process group IDs
names select named files or files on named file systems
lsof 각 컬럼에 대한 정의
Command 프로세스와 관련된 Unix command 이름
-------------------------------------------------------------------------------------------------
PID,PPID,PGRP Process IDentification number
Parent Process IDentification number
(해당 프로세스의 부모 프로세스 ID)
Process Group IDentification number
(해당 프로세스와 관련된 프로세스 그룹 ID)
-------------------------------------------------------------------------------------------------
USER 해당 프로세스를 소유한 사용자 ID 또는 login name
-------------------------------------------------------------------------------------------------
FD File Descriptor number
(ex) cwd : current working directory
r : read access / w : write access / u : read and write access
-------------------------------------------------------------------------------------------------
TYPE 해당 파일과 관련한 노드 타입
(ex) inet : Internet domain socket
-------------------------------------------------------------------------------------------------
DEVICE device number
-------------------------------------------------------------------------------------------------
SIZE file 이나 file offset의 사이즈
SIZE/OFF
OFFSET
-------------------------------------------------------------------------------------------------
INODE local file 의 node number 또는 Internet protocol type
NODE-ID 또는 서버 호스트의 NFS file의 inode number
-------------------------------------------------------------------------------------------------
NAME 해당 파일이 소속된 mount point나 파일 시스템의 이름
3. lsof 이용방법
lsof <filename> 해당 파일을 액세스 하는 프로세서 확인
# lsof /tmp/mysql.sock
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 2617 mysql 12u unix 0xf4705e40 5907 /tmp/mysql.sock
lsof <directoryname> 해당 디렉토리를 엑세스 하는 프로세서 확인
# lsof /home
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 4705 nobody cwd DIR 8,17 4096 13828178 /home/test/
httpd 4705 nobody 22u REG 8,17 0 13853325 /home/test/data/session/sess_5a9d8c235bb55430370c131b95bdaf08
httpd 5662 nobody 21r REG 8,17 172964 17925310 /home/test/images/2009/06/05/dWljaHNtdWx0aV8xMjQ0MjA2OTE4.jpg
httpd 5797 nobody cwd DIR 8,17 4096 13828269 /home/test/js
httpd 5920 nobody cwd DIR 8,17 4096 13828269 /home/test/js
httpd 5920 nobody 22u REG 8,17 16 13840521 /home/test/data/session/sess_50941be40d86bf93a77cebf04570f9d8
httpd 6034 nobody 21r REG 8,17 178051 14489669 /home/test/images/2009/06/07/eWhyamphbmdfMTI0NDMzNTIxMw==.jpg
httpd 6066 nobody 22u REG 8,17 0 13841011 /home/test/data/session/sess_9137b3fecd4352d194e92d5b35374593
httpd 6209 nobody 22u REG 8,17 0 13840040 /home/test/data/session/sess_7c81eab19efa98c260c48bb1736261ef
httpd 6433 nobody cwd DIR 8,17 4096 13828129 /home/test
httpd 6433 nobody 22u REG 8,17 0 13841235 /home/test/data/session/sess_b211208c7485bc3e1380ca12cfe981c5
lsof -i 열려있는 소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 2115 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2115 nobody 20u IPv6 131549543 TCP xxx.xxx.xxx.xxx:http->219.241.231.110:cs-live (FIN_WAIT2)
httpd 2116 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2116 nobody 20u IPv6 131549652 TCP xxx.xxx.xxx.xxx:http->121.55.80.117:dict-lookup (FIN_WAIT2)
httpd 2117 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2117 nobody 20u IPv6 131549861 TCP xxx.xxx.xxx.xxx:http->59.25.15.194:gbs-smp (ESTABLISHED)
lsof -i TCP 열려있는 TCP소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 2521 root 3u IPv6 5729 TCP *:ssh (LISTEN)
xinetd 2550 root 5u IPv4 5910 TCP *:pop3 (LISTEN)
xinetd 2550 root 6u IPv4 5911 TCP *:rsync (LISTEN)
vsftpd 2575 root 3u IPv4 5822 TCP *:ftp (LISTEN)
mysqld 2617 mysql 10u IPv4 5906 TCP *:mysql (LISTEN)
sendmail 2651 root 4u IPv4 81221389 TCP *:smtp (LISTEN)
httpd 4536 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 4536 nobody 20u IPv6 131583624 TCP xxx.xxx.xxx.xxx:http->122.47.11.45:eicon-x25 (FIN_WAIT2)
httpd 4537 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 4537 nobody 20u IPv6 131584625 TCP xxx.xxx.xxx.xxx:http->121.181.169.49:street-stream (ESTABLISHED)
lsof -i UDP 열려있는 UDP소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 12413 rpc 3u IPv4 20459612 UDP *:sunrpc
rpc.rquot 15418 root 3u IPv4 20804960 UDP *:755
rpc.rquot 18396 root 3u IPv4 24909363 UDP *:webster
rpc.mount 18515 root 6u IPv4 24909943 UDP *:883
lsof -c deamon 해당 데몬에서 사용하는 프로세서와 파일 확인
# lsof -c httpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 7101 nobody cwd DIR 8,3 4096 2 /
httpd 7101 nobody rtd DIR 8,3 4096 2 /
httpd 7101 nobody txt REG 8,3 2186786 10019698 /usr/local/apache_2.0.63/bin/httpd
httpd 7101 nobody mem REG 8,3 880518 9599577 /usr/lib/sse2/libgmp.so.3.3.3
httpd 7101 nobody mem REG 8,3 9336 9604463 /usr/lib/libXau.so.6.0.0
httpd 7101 nobody mem REG 8,3 276818 10019678 /usr/local/apache_2.0.63/lib/libaprutil-0.so.0.9.17
httpd 7101 nobody mem REG 8,3 69316 9609234 /usr/lib/libXpm.so.4.11.0
lsof -p PID 해당 PID에서 사용하는 프로세서와 파일 확인
# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 38652 3993807 /sbin/init
init 1 root mem REG 8,3 125736 6484198 /lib/ld-2.5.so
init 1 root mem REG 8,3 1602128 6484199 /lib/libc-2.5.so
init 1 root mem REG 8,3 16428 6484204 /lib/libdl-2.5.so
init 1 root mem REG 8,3 93508 6484212 /lib/libselinux.so.1
init 1 root mem REG 8,3 245376 6484211 /lib/libsepol.so.1
init 1 root 10u FIFO 0,16 1189 /dev/initctl
lsof -n 레퍼런스 카운터 점검
# lsof -n
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 38652 3993807 /sbin/init
init 1 root mem REG 8,3 125736 6484198 /lib/ld-2.5.so
init 1 root mem REG 8,3 1602128 6484199 /lib/libc-2.5.so
init 1 root mem REG 8,3 16428 6484204 /lib/libdl-2.5.so
init 1 root mem REG 8,3 93508 6484212 /lib/libselinux.so.1
init 1 root mem REG 8,3 245376 6484211 /lib/libsepol.so.1
init 1 root 10u FIFO 0,16 1189 /dev/initctl
migration 2 root cwd DIR 8,3 4096 2 /
migration 2 root rtd DIR 8,3 4096 2 /
migration 2 root txt unknown /proc/2/exe
ksoftirqd 3 root cwd DIR 8,3 4096 2 /
ksoftirqd 3 root rtd DIR 8,3 4096 2 /
4. 마무리
운영중인 서버에서 갑자기 대량 메일이 발송된다든지 이상 패킷이 송.수신을 한다면
lsof를 이용하여 점검하면 보다 편하고 빠르게 찾을수 잇다
물론 모든것을 다 찾아준다고 할수는없다
하지만 현제 프로세서와 연관되어있는 소켓이나 파일 디렉토리를 보다 용이하게 찾게해주며
특히 구동되오있는 백도어, 해킹툴등을 찾기에는 탁월하다
사전적인 의미로는 열려진 파일을 보는 유틸이다
즉 시스템에서 구동되고 있는 프로세서에 의해 열려진 파일을 확인 하는 확인하는 것이다
하지만 Unix, Linux계열은 프로세서분아니라 소켓등도
파일로 관리 함으로 lsof로 모니터링이 가능하다 .
1. 설치 및 다운로드
일반적으로 사용하는 배포본의 경우 포함하고 있거나 배포패키를 제공한다
즉 rpm, dep와 같은 형테의 팡르을 찾아서 설치하면되며
최신버전을 원하는경우에는 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof에서 확인이 가능하다 .
다운 받은후 압축을 해제하면 먼저 소스파일의 무결성을 조사하여야한다 .
# ./inventory
Conducting an inventory of the lsof distribution; this will take a while.
....
....
Examining lib: OK
Examining scripts: OK
This lsof distribution seems to be complete.
무결성 조사이후 complete가 되면 헤더파일에대한 테스및 환경을 구성해야한다
# ./Configure
이후 이상이 없다면 컴컴파일과 인스톨을 진행한다
# make && make install
2. lsof 옵션 및 기본 사용법
lsof 사용법
lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-f [cfgGn] ]
[ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ]
[ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
lsof 의 옵션
-?, -h list help
-a AND selections (OR)
-d s select by FD set
-D D ?|i|b|r|u[path]
+|-f -files +filesys
-l list UID numbers
-n no host names
-N select NFS files
-s list file size
-t terse listing
-T disable TCP/TPI info
-v display version info
-V verbose search
-F [f] select fields;-F? for help
-o o o 0t offset digits (8)
-S [t] t second stat timeout(15)
-i i select by IPv4 address: [proto][@host|addr][:svc_list|port_list]
+|-r [t] repeat every t seconds (15);
+ until no files, - forever
-b avoid kernel blocks
-c c list command c
-P no port names
-i select IPv4 files
-p s select by PID set
-C no kernel name cache
+|-w Warnings (+)
-R list paRent PID
-k k kernelsymbols (/dev/ksyms)
-U select Unix socket
-u s exclude(^)/select login/UID s
-m m kernel memory (/dev/kmem)
+|-M portMap registration (-)
-- end option scan
-g [s] select by process group ID set and print process group IDs
names select named files or files on named file systems
lsof 각 컬럼에 대한 정의
Command 프로세스와 관련된 Unix command 이름
-------------------------------------------------------------------------------------------------
PID,PPID,PGRP Process IDentification number
Parent Process IDentification number
(해당 프로세스의 부모 프로세스 ID)
Process Group IDentification number
(해당 프로세스와 관련된 프로세스 그룹 ID)
-------------------------------------------------------------------------------------------------
USER 해당 프로세스를 소유한 사용자 ID 또는 login name
-------------------------------------------------------------------------------------------------
FD File Descriptor number
(ex) cwd : current working directory
r : read access / w : write access / u : read and write access
-------------------------------------------------------------------------------------------------
TYPE 해당 파일과 관련한 노드 타입
(ex) inet : Internet domain socket
-------------------------------------------------------------------------------------------------
DEVICE device number
-------------------------------------------------------------------------------------------------
SIZE file 이나 file offset의 사이즈
SIZE/OFF
OFFSET
-------------------------------------------------------------------------------------------------
INODE local file 의 node number 또는 Internet protocol type
NODE-ID 또는 서버 호스트의 NFS file의 inode number
-------------------------------------------------------------------------------------------------
NAME 해당 파일이 소속된 mount point나 파일 시스템의 이름
3. lsof 이용방법
lsof <filename> 해당 파일을 액세스 하는 프로세서 확인
# lsof /tmp/mysql.sock
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 2617 mysql 12u unix 0xf4705e40 5907 /tmp/mysql.sock
lsof <directoryname> 해당 디렉토리를 엑세스 하는 프로세서 확인
# lsof /home
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 4705 nobody cwd DIR 8,17 4096 13828178 /home/test/
httpd 4705 nobody 22u REG 8,17 0 13853325 /home/test/data/session/sess_5a9d8c235bb55430370c131b95bdaf08
httpd 5662 nobody 21r REG 8,17 172964 17925310 /home/test/images/2009/06/05/dWljaHNtdWx0aV8xMjQ0MjA2OTE4.jpg
httpd 5797 nobody cwd DIR 8,17 4096 13828269 /home/test/js
httpd 5920 nobody cwd DIR 8,17 4096 13828269 /home/test/js
httpd 5920 nobody 22u REG 8,17 16 13840521 /home/test/data/session/sess_50941be40d86bf93a77cebf04570f9d8
httpd 6034 nobody 21r REG 8,17 178051 14489669 /home/test/images/2009/06/07/eWhyamphbmdfMTI0NDMzNTIxMw==.jpg
httpd 6066 nobody 22u REG 8,17 0 13841011 /home/test/data/session/sess_9137b3fecd4352d194e92d5b35374593
httpd 6209 nobody 22u REG 8,17 0 13840040 /home/test/data/session/sess_7c81eab19efa98c260c48bb1736261ef
httpd 6433 nobody cwd DIR 8,17 4096 13828129 /home/test
httpd 6433 nobody 22u REG 8,17 0 13841235 /home/test/data/session/sess_b211208c7485bc3e1380ca12cfe981c5
lsof -i 열려있는 소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 2115 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2115 nobody 20u IPv6 131549543 TCP xxx.xxx.xxx.xxx:http->219.241.231.110:cs-live (FIN_WAIT2)
httpd 2116 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2116 nobody 20u IPv6 131549652 TCP xxx.xxx.xxx.xxx:http->121.55.80.117:dict-lookup (FIN_WAIT2)
httpd 2117 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 2117 nobody 20u IPv6 131549861 TCP xxx.xxx.xxx.xxx:http->59.25.15.194:gbs-smp (ESTABLISHED)
lsof -i TCP 열려있는 TCP소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 2521 root 3u IPv6 5729 TCP *:ssh (LISTEN)
xinetd 2550 root 5u IPv4 5910 TCP *:pop3 (LISTEN)
xinetd 2550 root 6u IPv4 5911 TCP *:rsync (LISTEN)
vsftpd 2575 root 3u IPv4 5822 TCP *:ftp (LISTEN)
mysqld 2617 mysql 10u IPv4 5906 TCP *:mysql (LISTEN)
sendmail 2651 root 4u IPv4 81221389 TCP *:smtp (LISTEN)
httpd 4536 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 4536 nobody 20u IPv6 131583624 TCP xxx.xxx.xxx.xxx:http->122.47.11.45:eicon-x25 (FIN_WAIT2)
httpd 4537 nobody 3u IPv6 65745129 TCP *:http (LISTEN)
httpd 4537 nobody 20u IPv6 131584625 TCP xxx.xxx.xxx.xxx:http->121.181.169.49:street-stream (ESTABLISHED)
lsof -i UDP 열려있는 UDP소켓 확인
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 12413 rpc 3u IPv4 20459612 UDP *:sunrpc
rpc.rquot 15418 root 3u IPv4 20804960 UDP *:755
rpc.rquot 18396 root 3u IPv4 24909363 UDP *:webster
rpc.mount 18515 root 6u IPv4 24909943 UDP *:883
lsof -c deamon 해당 데몬에서 사용하는 프로세서와 파일 확인
# lsof -c httpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 7101 nobody cwd DIR 8,3 4096 2 /
httpd 7101 nobody rtd DIR 8,3 4096 2 /
httpd 7101 nobody txt REG 8,3 2186786 10019698 /usr/local/apache_2.0.63/bin/httpd
httpd 7101 nobody mem REG 8,3 880518 9599577 /usr/lib/sse2/libgmp.so.3.3.3
httpd 7101 nobody mem REG 8,3 9336 9604463 /usr/lib/libXau.so.6.0.0
httpd 7101 nobody mem REG 8,3 276818 10019678 /usr/local/apache_2.0.63/lib/libaprutil-0.so.0.9.17
httpd 7101 nobody mem REG 8,3 69316 9609234 /usr/lib/libXpm.so.4.11.0
lsof -p PID 해당 PID에서 사용하는 프로세서와 파일 확인
# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 38652 3993807 /sbin/init
init 1 root mem REG 8,3 125736 6484198 /lib/ld-2.5.so
init 1 root mem REG 8,3 1602128 6484199 /lib/libc-2.5.so
init 1 root mem REG 8,3 16428 6484204 /lib/libdl-2.5.so
init 1 root mem REG 8,3 93508 6484212 /lib/libselinux.so.1
init 1 root mem REG 8,3 245376 6484211 /lib/libsepol.so.1
init 1 root 10u FIFO 0,16 1189 /dev/initctl
lsof -n 레퍼런스 카운터 점검
# lsof -n
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 38652 3993807 /sbin/init
init 1 root mem REG 8,3 125736 6484198 /lib/ld-2.5.so
init 1 root mem REG 8,3 1602128 6484199 /lib/libc-2.5.so
init 1 root mem REG 8,3 16428 6484204 /lib/libdl-2.5.so
init 1 root mem REG 8,3 93508 6484212 /lib/libselinux.so.1
init 1 root mem REG 8,3 245376 6484211 /lib/libsepol.so.1
init 1 root 10u FIFO 0,16 1189 /dev/initctl
migration 2 root cwd DIR 8,3 4096 2 /
migration 2 root rtd DIR 8,3 4096 2 /
migration 2 root txt unknown /proc/2/exe
ksoftirqd 3 root cwd DIR 8,3 4096 2 /
ksoftirqd 3 root rtd DIR 8,3 4096 2 /
4. 마무리
운영중인 서버에서 갑자기 대량 메일이 발송된다든지 이상 패킷이 송.수신을 한다면
lsof를 이용하여 점검하면 보다 편하고 빠르게 찾을수 잇다
물론 모든것을 다 찾아준다고 할수는없다
하지만 현제 프로세서와 연관되어있는 소켓이나 파일 디렉토리를 보다 용이하게 찾게해주며
특히 구동되오있는 백도어, 해킹툴등을 찾기에는 탁월하다
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.