1. lsof의 정의
사전적인 의미로는 열려진 파일을 보는 유틸리티이다.
즉 시스템에서 구동되고 있는 프로세서에 의해 열려진 파일을 확인 하는 확인하는 명령어이며
프로세서뿐만 아니라 소켓등도 파일로 관리 함으로 lsof로 모니터링이 가능하다 . 해당 명령어를 이용하여
해킹툴이나 백도어 감지에도 용이하다,
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
(예) cwd : current working directory
r : read access / w : write access / u : read and write access
————————————————————————————————-
TYPE 해당 파일과 관련한 노드 타입
(예) 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 <실행파일명> 해당 파일을 액세스 하는 프로세서 확인
# lsof /tmp/mysql.sock
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 2617 mysql 12u unix 0xf4705e40 5907 /tmp/mysql.sock
lsof <디렉토리명> 해당 디렉토리를 엑세스 하는 프로세서 확인
# 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 /