Linux端口、进程安全技巧

本文介绍如何简单利用psnetstatlsof获取一个可疑进程源于或运行于本地的哪个文件、调用了哪些库、占用了哪些端口、开了哪些进程、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
  1. 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后门程序,此时pstopnetstat等命令可能已被替换,如果再通过系统自身命令去检查可疑进程就变得毫不可信。一般地,我们需要借助第三方工具来检查系统可疑程序。

另附常见端口列表:

端口号码 / 层 名称 注释
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)