1. lsof 란?
일반적으로 시스템에서 동작하고 있는 모든 프로세스에 의해서 열리어진 파일들에
관한 정보를 보여주는 시스템 관리 명령어
2.1. lsof 파일명
지정한 파일을 엑세스 하고 있는 프로세스의 정보를 보여준다.
# lsof /usr/sbin/proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
2.2. lsof /tmp
지정한 디렉토리를 엑세스 하고 있는 프로세스의 정보를 보여준다.
# lsof /tmp
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
libhttpd. 27187 root 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27318 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27319 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27320 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27321 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
2.3. lsof -i
모든 네트워크 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -i
sshd 586 root 3u IPv4 1877 TCP *:ssh (LISTEN)
xinetd 600 root 5u IPv4 1943 TCP *:pop3 (LISTEN)
sendmail 619 root 4u IPv4 1962 TCP *:smtp (LISTEN)
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
mysqld 708 mysql 3u IPv4 2652 TCP *:mysql (LISTEN)
ex)lsof -iTCP ; lsof -iUDP
tcp 나 혹은 UDP를 걸러서 볼때 사용한다.
2.4. lsof -c 데몬명
지정한 데몬과 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -c proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody cwd DIR 8,3 4096 2 /
proftpd 647 nobody rtd DIR 8,3 4096 2 /
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
proftpd 647 nobody mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
proftpd 647 nobody mem REG 8,3 23404 15994 /lib/libcrypt-2.3.2.so
proftpd 647 nobody mem REG 8,3 30488 17917 /lib/libpam.so.0.75
proftpd 647 nobody mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
proftpd 647 nobody mem REG 8,3 14888 15996 /lib/libdl-2.3.2.so
proftpd 647 nobody mem REG 8,3 8612 17914 /lib/liblaus.so.1.0.0
proftpd 647 nobody mem REG 8,3 51908 16016 /lib/libnss_files-2.3.2.so
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
proftpd 647 nobody 4r REG 8,3 3509 82811 /etc/passwd
proftpd 647 nobody 5r REG 8,3 1241 83170 /etc/group
2.5. lsof -p 프로세스ID
지정한 프로세스와 관련된 프로세스와 파일의 정보를 보여준다.
# 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 27036 16204 /sbin/init
init 1 root mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
init 1 root mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
init 1 root 10u FIFO 8,3 71415 /dev/initctl
3. 해킹 추적
3.1. 시나리오
#lsof -i -> 기본 포트연것을 확인한다.
#lsof -p -> 프로세스를 분석한다.
#lsof /home/홈페이지 디렉토리 -> 특정디렉토리에 있는 프로세스 검사
#lsof /tmp -> 임시파일 관련 프로세스 분석
#lsof /dev -> 정규 해킹 디렉토리 분석
fuser 정리
#fuser 21/tcp ----> 포트/tcp,udp : 열린포트 pid 찾기
21/tcp: 931
# fuser -cu /var
하면 현재 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process가 열거된다...
그 열거된 pid를 보고 어떤 데몬이 사용하고 있고 어떤 유저가 사용하고 있는지 알 수 있다.
# fuser -ck /var
하면 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process id 를 모두 'kill -9' 와 같은 행동을 하게 된다.
이 명령어는 주의해서 사용하길 잘못 명령어 먹였다가 서버 리셋 해야된다.ㅋㅋ
fuser : 특정 파일이나 파일시스템, 포트등에서 사용중인 프로세스를 확인할 때 사용.
옵션정리
-a : 사용되지 있지않은 파일까지도 표시
-k : 지정된 파일과 관련된 모든 프로세스들을 KILL
-i : 프로세스를 KILL시키기 전에 사용자에게 확인
-l : 사용가능한 signal을 출력
-m : 지정한 파일이나 디렉토리가 마운트된 파일시스템에서 실행되고 있는 프로세스의 PID 출력
-n space : 지정된 공간(file, udp or tcp)내에서 검색
-s : 결과를 간략히 출력
-signal : 지정된 프로세스에 기본 signal인 SIGKILL 외에 지정된 signal을 보냄
-u : 프로세스 ID(PID)의 소유자를 보여준다.
-v : 자세한 출력모드 (프로세스의 User, PID, ACCESS, COMMAND를 보여줌)
1. 특정 파일을 사용하고 있는 프로세스(pid)확인
fuser /var/log/messages
2. 특정 파일을 사용하고 있는 프로세스(pid) 및 user 확인
fuser -u /var/log/messages
3. 특정 프로토콜, 포트를 사용중인 프로세스 확인
fuser -vn tcp ftp
fuser -vn tcp 1111
4. -k옵션을 사용하여 프로세스 kill
fuser -vn tcp ssh
fuser -kn tcp ssh
fuser -vn tcp ssh
pgrep 정리
[ pgrep으로 실행중인 프로세스 찾기 ]
♧ pgrep을 사용하여 가장 기본적인 형태로, 이름을(또는 일부) 검색.
▶ 기본적인 사용 예제:
# pgrep init
1
2689
프로세스 ID를 보여줌
# pgrep -l init
1 init
2689 xinit
-l 옵션 : 프로세스 이름을 보여줌
# pgrep -lu apache
2551 sshd
2552 bash
2803 vim
-u 옵션 : 유저와 관련된 프로세스 찾기
▶ ps 와 pgrep 결합 사용 예:
/* sshd 및 실행에 대한 검색의 ps(간단하게) */
# ps -p `pgrep sshd`
PID TTY STAT TIME COMMAND
626 ? Ss 0:00 /usr/sbin/sshd -D
4000 ? Ss 0:00 sshd: devanix [priv]
4110 ? S 0:01 sshd: devanix@pts/1
/* sshd 및 실행에 대한 검색의 ps(전체) */
# ps -fp $(pgrep sshd)
UID PID PPID C STIME TTY STAT TIME CMD
root 626 1 0 Aug12 ? Ss 0:00 /usr/sbin/sshd -D
root 4000 626 0 01:59 ? Ss 0:00 sshd: devanix [priv]
devanix 4110 4000 0 01:59 ? S 0:01 sshd: devanix@pts/1
/* firefox 검색, 우선순위 향상 */
# sudo renice -5 $(pgrep firefox)
20522: old priority 0, new priority -5
20527: old priority 0, new priority -5
☞ 이러한 방법으로 입력한 프로세스 ID와 pgrep을 결합할 수 있다.
출처 - http://blog.naver.com/nforce7050/140139510510
[출처] lsof , fuser, pgrep 명령어 정리|작성자 삽질맨
'System > Linux' 카테고리의 다른 글
TCP-Wrapper (0) | 2011.10.31 |
---|---|
/etc/profile 예시 (0) | 2011.10.05 |
top 명령어 (0) | 2011.09.27 |
ngrep 다운로드 및 사용법 (옵션) (1) | 2011.09.23 |
clock, date, rdate, ntpdate (0) | 2011.08.22 |