我已经开始使用urxvt
并注意到它每次打开时都会启动 2 个 PID。它们是连续的。我不包括bash
。
ps
PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
21193 0.1 0.3 113368 29340 ? Ss 12:13 0:00 rxvt
21194 0.0 0.0 31932 3716 ? S 12:13 0:00 rxvt
pstree
├─rxvt─┬─bash
└─rxvt
我尝试了urxvtd
(rxvt 守护进程),它也启动了 2 个 PID。我还没有在st
或上看到过这种行为xterm
。他们为自己打开一个进程并且bash
.正常吗?
Debian 10,rxvt-unicode 软件包。
答案1
urxvt
运行 setuid/setgid 来使用utmp/wtmp
(该功能可让您使用who
和last
命令)。直接这样做被认为是一个潜在的漏洞。 xterm
一般使用乌腾普特,以防范这种情况。 st
没有直接支持utmp/wtmp
。根据其常见问题解答,您可以使用另一个程序来完成该工作:
## Why does st not handle utmp entries?
Use the excellent tool of [utmp](https://git.suckless.org/utmp/) for this task
urxvt 的文档以不同的方式解释了 fork:
从 7.1 版本开始应该是这样。我们鼓励您现在使用操作系统所需的权限正确安装 urxvt。
当 rxvt-unicode 检测到它运行 setuid 或 setgid 时,它将分叉到一个帮助程序进程中进行特权操作(某些系统上的 pty 处理,其他系统上的 utmp/wtmp/lastlog 处理)并立即删除特权。这比大多数其他在运行时保留特权的终端要安全得多(但与 urxvt 更相关,因为它包含 perl 解释器等内容,这可能对攻击者“有帮助”)。
这个分叉是在 main() 中第一次完成的,这是非常早的,并且减少了在 main() 之前运行的初始化代码可能出现的错误,或者诸如系统的动态加载器之类的事情,这应该会导致很小的风险。
查看终端是否支持 utmp/wtmp 的一种简单方法是运行w
命令。结果输出将表明w
命令(如果终端支持该功能)。我看到这个xterm
:
09:57:14 更新 2:34, 5 位用户, 平均负载: 0.05, 0.01, 0.00 来自登录的用户 TTY@ IDLE JCPU PCPU 什么 汤姆 pts/1 192.168.1.8:S.0 07:24 5:45 7.49s 7.46s 邪恶 汤姆 pts/2 192.168.1.8:S.1 07:25 42:02 0.13s 0.10s ded /usr/build/ 汤姆 pts/3 192.168.1.8:S.2 09:15 7:45 0.41s 0.38s ded rpmbuild//S 汤姆 pts/4 192.168.1.8:S.3 09:51 12.00s 0.16s 0.00s sh -c uxterm-de 汤姆 pts/5 本地主机:10.0 09:57 0.00s 0.04s 0.00sw
这在st
:
09:59:07 更新 2:36, 4 位用户, 平均负载: 0.00, 0.00, 0.00 来自登录的用户 TTY@ IDLE JCPU PCPU 什么 汤姆 pts/1 192.168.1.8:S.0 07:24 7:38 7.58s 7.55s 邪恶 汤姆 pts/2 192.168.1.8:S.1 07:25 43:55 0.13s 0.10s ded /usr/build/ 汤姆 pts/3 192.168.1.8:S.2 09:15 9:38 0.41s 0.38s ded rpmbuild //来源/ 汤姆 pts/4 192.168.1.8:S.3 09:51 27.00s 0.39s 0.00s sh -c stterm