如何通过 PID 查看进程完整信息

今天收到一个 443 端口的漏洞报告,遂开始查找进程的详细信息:

1
2
3
4
5
6
[common@WegGsZkp03 ~]$ sudo netstat -anp|grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 15605/nginx
[common@WegGsZkp03 ~]$ ps -ef|grep 15605
nobody 15605 97161 0 2016 ? 00:00:05 nginx: worker process
common 190450 186174 0 17:14 pts/0 00:00:00 grep 15605
[common@WegGsZkp03 ~]$

nobody 是什么鬼,这么简单的进程信息又是什么鬼,怎么才能找到这个 nginx 进程的执行路径呢?

其实每个进程,都会在 /proc 文件夹里面生成一个进程目录,里面存放了进程的各种信息。如果使用 ps 命令无法查出进程的详细信息,不妨到 /proc 里面看看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[common@WegGsZkp03 ~]$ ls -d /proc/15605
/proc/15605
[common@WegGsZkp03 ~]$ sudo ls -l /proc/15605
total 0
dr-xr-xr-x 2 nobody nobody 0 Feb 8 2017 attr
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 autogroup
-r-------- 1 nobody nobody 0 Jul 6 17:07 auxv
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 cgroup
--w------- 1 nobody nobody 0 Jul 6 17:07 clear_refs
-r--r--r-- 1 nobody nobody 0 Dec 1 2016 cmdline
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 coredump_filter
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 cpuset
lrwxrwxrwx 1 nobody nobody 0 Jul 6 17:07 cwd -> /uniiof/users/tsttgn01/tengine/sbin
-r-------- 1 nobody nobody 0 Jul 6 16:54 environ
lrwxrwxrwx 1 nobody nobody 0 Jul 6 17:07 exe -> /uniiof/users/tsttgn01/tengine/sbin/nginx
dr-x------ 2 nobody nobody 0 Dec 16 2016 fd
dr-x------ 2 nobody nobody 0 Jul 6 17:07 fdinfo
-r-------- 1 nobody nobody 0 Jul 6 17:07 io
-rw------- 1 nobody nobody 0 Jul 6 17:07 limits
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 loginuid
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 maps
-rw------- 1 nobody nobody 0 Jul 6 17:07 mem
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 mountinfo
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 mounts
-r-------- 1 nobody nobody 0 Jul 6 17:07 mountstats
dr-xr-xr-x 8 nobody nobody 0 Jul 6 17:07 net
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 numa_maps
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 oom_adj
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 oom_score
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 oom_score_adj
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 pagemap
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 personality
lrwxrwxrwx 1 nobody nobody 0 Jul 6 17:07 root -> /
-rw-r--r-- 1 nobody nobody 0 Jul 6 17:07 sched
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 schedstat
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 sessionid
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 smaps
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 stack
-r--r--r-- 1 nobody nobody 0 Nov 25 2016 stat
-r--r--r-- 1 nobody nobody 0 Feb 22 2017 statm
-r--r--r-- 1 nobody nobody 0 Nov 25 2016 status
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 syscall
dr-xr-xr-x 3 nobody nobody 0 Jul 6 17:07 task
-r--r--r-- 1 nobody nobody 0 Jul 6 17:07 wchan
[common@WegGsZkp03 ~]$

其中几个重要的目录作用如下:

  • cwd 符号链接的是进程运行目录。
  • exe 符号连接就是执行程序的绝对路径。
  • cmdline 就是程序运行时输入的命令行命令。
  • environ 记录了进程运行时的环境变量。
  • fd 目录下是进程打开或使用的文件的符号连接。