本文介绍如何简单利用ps
、netstat
、lsof
获取一个可疑进程源于或运行于本地的哪个文件、调用了哪些库、占用了哪些端口、开了哪些进程、pid多少等等的信息,并结合kill
进行进程关闭,达到可疑进程的快速检查与关闭的效果。
利用ps
工具查看进程
使用ps
命令来查询正在运行的进程,比如ps -e -o pid,comm,cmd
[-e表示列出全部进程,-o pid,comm,cmd表示列出我们需要的PID、COMMAND、CMD信息]
cmd信息中被[]
括号括出来的表示内核进程。
当计算机开机时,内核(kernel)只建立一个init进程。Linux kernel并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。
fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间(address space)。当进程fork的时候,Linux会在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间内容复制到新的空间中,此后两个进程同时运行。
ps
工具还有其他强大的功能,可自行查找相关参数,此处不一一列举。
1.ps
结合kill
关闭进程:
例如:关闭进程metacity:
[root@localhost gaveu]# ps -ef |grep metacity
gdm 3343 3325 0 09:37 ? 00:00:00 metacity
root 3386 3372 0 09:38 pts/1 00:00:00 grep metacity
[root@localhost gaveu]# kill 3343
[root@localhost gaveu]#
[关掉这个进程会导致linux的桌面环境异常,注销重登即可]
2.ps
工具的其他技巧:
- 根据用户显示进程:
由进程的所属用户使用”-u”选项后跟用户名显示。多个用户名可以提供逗号以分格。
[root@localhost gaveu]# ps -f -u gaveu UID PID PPID C STIME TTY TIME CMD gaveu 2657 2653 0 09:25 ? 00:00:00 sshd: gaveu@pts/1 gaveu 2658 2657 0 09:25 pts/1 00:00:00 -bash
- 根据名字和进程ID显示进程:
通过命令或名字搜索进程。使用-C选项后加搜索词。
[root@localhost gaveu]# ps -C sshd PID TTY TIME CMD 2051 ? 00:00:00 sshd 2653 ? 00:00:00 sshd 2657 ? 00:00:00 sshd
或者 |grep 后加搜索词。
[root@localhost gaveu]# ps -e -f |grep sshd root 2051 1 0 09:23 ? 00:00:00 /usr/sbin/sshd root 2653 2051 0 09:24 ? 00:00:00 sshd: gaveu [priv] gaveu 2657 2653 0 09:25 ? 00:00:00 sshd: gaveu@pts/1 root 3437 3372 0 09:55 pts/1 00:00:00 grep sshd
- 根据CPU或者内存进行排序:
管理员经常希望找出那些消耗大量内存或CPU的进程。排序选项将基于特定的字段或参数让进程列表进行排序。
--sort
选项由逗号分隔的多个字段可以用指定。此外,该字段可以带有前缀”-“或者”+”来表示降序或升序。通过进程列表进行排序有很多参数,可以通过man
来获取完整信息。此处演示对用户gaveu相关进程的rss升序排序:
[root@localhost gaveu]# ps -au gaveu -o pid,user,comm,cmd,rss PID USER COMMAND CMD RSS 2657 gaveu sshd sshd: gaveu@pts/1 1820 2658 gaveu bash -bash 1832 3366 root su su root 2752 3372 root bash bash 1868 3797 root ps ps -au gaveu -o pid,user,co 1100 [root@localhost gaveu]# ps -au gaveu -o pid,user,comm,cmd,rss --sort +rss PID USER COMMAND CMD RSS 3798 root ps ps -au gaveu -o pid,user,co 1048 2657 gaveu sshd sshd: gaveu@pts/1 1820 2658 gaveu bash -bash 1832 3372 root bash bash 1868 3366 root su su root 2752 [root@localhost gaveu]#
- 查看启动与运行时间:
-o
后加lstart
能输出启动时间,加etime
能输出运行时间。此处演示对用户gdm相关进程的启动时间与运行时间的信息输出:
[root@localhost gaveu]# ps -u gdm -o pid,user,comm,lstart,etime PID USER COMMAND STARTED ELAPSED 3322 gdm dbus-launch Sat May 12 09:37:44 2018 52:16 3323 gdm dbus-daemon Sat May 12 09:37:44 2018 52:16 3325 gdm gnome-session Sat May 12 09:37:44 2018 52:16 3328 gdm gconfd-2 Sat May 12 09:37:44 2018 52:16 3332 gdm at-spi-registry Sat May 12 09:37:44 2018 52:16 3333 gdm gnome-settings- Sat May 12 09:37:44 2018 52:16 3335 gdm bonobo-activati Sat May 12 09:37:44 2018 52:16 3342 gdm gvfsd Sat May 12 09:37:44 2018 52:16 3346 gdm gdm-simple-gree Sat May 12 09:37:44 2018 52:16 3347 gdm polkit-gnome-au Sat May 12 09:37:44 2018 52:16 3348 gdm gnome-power-man Sat May 12 09:37:44 2018 52:16 3354 gdm pulseaudio Sat May 12 09:37:44 2018 52:16 [root@localhost gaveu]#
命令netstat
的运用
netstat
命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
netstat的输出结果可以分为两种方式:
1. 一个是Active Internet connections,称为有源TCP链接,其中”Recv-Q”和”Send-Q”指的是接收队列和发送队列。
2. 另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型。
netstat
常用命令:
netstat -an --ip
:
(与win下netstat -a
形似)
-a(all)显示所有选项,默认不显示LISTEN相关。
-n拒绝显示别名,能显示数字的全部转化为数字。netstat -tnl
:
-t(tcp)仅显示tcp相关选项。(可改为-u,表示仅显示udp相关选项)
-n拒绝显示别名,能显示数字的全部转化成数字。
-l仅列出有在Listen(监听)的服务状态,优先级较 -a 低。netstat -taunp
:
-p列出对应进程的pid值。可配合kill
快速结束木马进程。netstat -s
:
-s显示当前端口的统计信息。
命令lsof
的运用
lsof(list open files)是一个列出当前系统打开文件的工具。
lsof
常用命令:
lsof 文件名/目录名
:
显示当前文件或目录的占用情况。lsof -i: 端口号
:
查看当前端口的占用情况。lsof -p pid号
:
查看指定pid号进程的文件占用情况。
总的而言,ps
查看进程,netstat
查看端口、套接字状况,并与结合lsof
,可以得知一个可疑进程源于或运行于本地的哪个文件、调用了哪些库、占用了哪些端口、开了哪些进程、pid号多少等等。
另一套快速定位进程的组合:
当我们只知道进程的名称而无法得知路径时,可以这样做:
1. pidof 进程名
:
获取当前进程的pid。
[root@localhost gaveu]# pidof sshd
2447 2438 2052
ls -al /proc/pid号/exe
:
查看对应pid目录下exe文件信息。[root@localhost gaveu]# ls -al /proc/2447/exe lrwxrwxrwx. 1 root root 0 May 14 11:34 /proc/2447/exe -> /usr/sbin/sshd [root@localhost gaveu]# ls -al /proc/2438/exe lrwxrwxrwx. 1 root root 0 May 14 11:34 /proc/2438/exe -> /usr/sbin/sshd [root@localhost gaveu]# ls -al /proc/2052/exe lrwxrwxrwx. 1 root root 0 May 14 11:33 /proc/2052/exe -> /usr/sbin/sshd
通过这种方法基本可以找到任何进程的完整执行信息。我们还可以通过指定端口或者tcp、udp协议找到进程pid,从而找到相关进程的路径:
[root@localhost gaveu]# fuser -n tcp 22
22/tcp: 2052 2438 2447
[root@localhost gaveu]# ps -ef|grep 2052
root 2052 1 0 11:33 ? 00:00:00 /usr/sbin/sshd
root 2438 2052 0 11:34 ? 00:00:00 sshd: gaveu [priv]
root 3447 3258 0 13:37 pts/0 00:00:00 grep 2052
当然,有的时候攻击者的程序隐藏很深,如rootkits后门程序,此时ps
、top
、netstat
等命令可能已被替换,如果再通过系统自身命令去检查可疑进程就变得毫不可信。一般地,我们需要借助第三方工具来检查系统可疑程序。
另附常见端口列表:
端口号码 / 层 名称 注释
1 tcpmux TCP 端口服务多路复用
5 rje 远程作业入口
7 echo Echo 服务
9 discard 用于连接测试的空服务
11 systat 用于列举连接了的端口的系统状态
13 daytime 给请求主机发送日期和时间
17 qotd 给连接了的主机发送每日格言
18 msp 消息发送协议
19 chargen 字符生成服务;发送无止境的字符流
20 ftp-data FTP 数据端口
21 ftp 文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用
22 ssh 安全 Shell(SSH)服务
23 telnet Telnet 服务
25 smtp 简单邮件传输协议(SMTP)
37 time 时间协议
39 rlp 资源定位协议
42 nameserver 互联网名称服务
43 nicname WHOIS 目录服务
49 tacacs 用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统
50 re-mail-ck 远程邮件检查协议
53 domain 域名服务(如 BIND)
63 whois++ WHOIS++,被扩展了的 WHOIS 服务
67 bootps 引导协议(BOOTP)服务;还被动态主机配置协议(DHCP)服务使用
68 bootpc Bootstrap(BOOTP)客户;还被动态主机配置协议(DHCP)客户使用
69 tftp 小文件传输协议(TFTP)
70 gopher Gopher 互联网文档搜寻和检索
71 netrjs-1 远程作业服务
72 netrjs-2 远程作业服务
73 netrjs-3 远程作业服务
73 netrjs-4 远程作业服务
79 finger 用于用户联系信息的 Finger 服务
80 http 用于万维网(WWW)服务的超文本传输协议(HTTP)
88 kerberos Kerberos 网络验证系统
95 supdup Telnet 协议扩展
101 hostname SRI-NIC 机器上的主机名服务
102/tcp iso-tsap ISO 开发环境(ISODE)网络应用
105 csnet-ns 邮箱名称服务器;也被 CSO 名称服务器使用
107 rtelnet 远程 Telnet
109 pop2 邮局协议版本2
110 pop3 邮局协议版本3
111 sunrpc 用于远程命令执行的远程过程调用(RPC)协议,被网络文件系统(NFS)使用
113 auth 验证和身份识别协议
115 sftp 安全文件传输协议(SFTP)服务
117 uucp-path Unix 到 Unix 复制协议(UUCP)路径服务
119 nntp 用于 USENET 讨论系统的网络新闻传输协议(NNTP)
123 ntp 网络时间协议(NTP)
137 netbios-ns 在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 名称服务
138 netbios-dgm 在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 数据报服务
139 netbios-ssn 在 红帽企业 Linux 中被 Samba 使用的 NETBIOS 会话服务
143 imap 互联网消息存取协议(IMAP)
161 snmp 简单网络管理协议(SNMP)
162 snmptrap SNMP 的陷阱
163 cmip-man 通用管理信息协议(CMIP)
164 cmip-agent 通用管理信息协议(CMIP)
174 mailq MAILQ 电子邮件传输队列
177 xdmcp X 显示管理器控制协议(XDMCP)
178 nextstep NeXTStep 窗口服务器
179 bgp 边界网络协议
191 prospero Prospero 分布式文件系统服务
194 irc 互联网中继聊天(IRC)
199 smux SNMP UNIX 多路复用
201 at-rtmp AppleTalk 选路
202 at-nbp AppleTalk 名称绑定
204 at-echo AppleTalk echo 服务
206 at-zis AppleTalk 区块信息
209 qmtp 快速邮件传输协议(QMTP)
210 z39.50 NISO Z39.50 数据库
213 ipx 互联网络分组交换协议(IPX),被 Novell Netware 环境常用的数据报协议
220 imap3 互联网消息存取协议版本3
245 link LINK / 3-DNS iQuery 服务
347 fatserv FATMEN 文件和磁带官吏服务器
363 rsvp_tunnel RSVP 隧道
369 rpc2portmap Coda 文件系统端口映射器
370 codaauth2 Coda 文件系统验证服务
372 ulistproc UNIX LISTSERV
389 ldap 轻型目录存取协议(LDAP)
427 svrloc 服务位置协议(SLP)
434 mobileip-agent 可移互联网协议(IP)代理
435 mobilip-mn 可移互联网协议(IP)管理器
443 https 安全超文本传输协议(HTTP)
444 snpp 小型网络分页协议
445 microsoft-ds 通过 TCP/IP 的服务器消息块(SMB)
464 kpasswd Kerberos 口令和钥匙改换服务
468 photuris Photuris 会话钥匙管理协议
487 saft 简单不对称文件传输(SAFT)协议
488 gss-http 用于 HTTP 的通用安全服务(GSS)
496 pim-rp-disc 用于协议独立的多址传播(PIM)服务的会合点发现(RP-DISC)
500 isakmp 互联网安全关联和钥匙管理协议(ISAKMP)
535 iiop 互联网内部对象请求代理协议(IIOP)
538 gdomap GNUstep 分布式对象映射器(GDOMAP)
546 dhcpv6-client 动态主机配置协议(DHCP)版本6客户
547 dhcpv6-server 动态主机配置协议(DHCP)版本6服务
554 rtsp 实时流播协议(RTSP)
563 nntps 通过安全套接字层的网络新闻传输协议(NNTPS)
565 whoami whoami 用户ID列表
587 submission 邮件消息提交代理(MSA)
610 npmp-local 网络外设管理协议(NPMP)本地 / 分布式排队系统(DQS)
611 npmp-gui 网络外设管理协议(NPMP)GUI / 分布式排队系统(DQS)
612 hmmp-ind HyperMedia 管理协议(HMMP)表示 / DQS
631 ipp 互联网打印协议(IPP)
636 ldaps 通过安全套接字层的轻型目录访问协议(LDAPS)
674 acap 应用程序配置存取协议(ACAP)
694 ha-cluster 用于带有高可用性的群集的心跳服务
749 kerberos-adm Kerberos 版本5(v5)的“kadmin”数据库管理
750 kerberos-iv Kerberos 版本4(v4)服务
765 webster 网络词典
767 phonebook 网络电话簿
873 rsync rsync 文件传输服务
992 telnets 通过安全套接字层的 Telnet(TelnetS)
993 imaps 通过安全套接字层的互联网消息存取协议(IMAPS)
994 ircs 通过安全套接字层的互联网中继聊天(IRCS)
995 pop3s 通过安全套接字层的邮局协议版本3(POPS3)