我有一个 Debian 虚拟机,信息如下:
las@Client:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
当我输入时,ss -nte
由于该选项,我希望看到使用套接字的进程的 uid -e
,但它没有出现,我不明白为什么。这是输出:
las@Client:~$ ss -nte
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 176 192.168.56.201:22 192.168.56.1:50468 timer:(on,204ms,0) ino:12286 sk:ffff88000e7f3140 <->
我该如何解决这个问题?
答案1
这ss
命令(任何版本)将显示uid仅当它不为零时。这是Debian 8 jessie 版本的源代码:
if (show_details) {
if (s.uid)
printf(" uid:%u", (unsigned)s.uid);
printf(" ino:%u", s.ino);
printf(" sk:%llx", s.sk);
if (opt[0])
printf(" opt:\"%s\"", opt);
}
测试if (s.uid)
使得每次socket所有者的uid值为 时不显示信息0
。
附加测试(但使用内核 5.6 和ss
来自ip路由25.6.0),表明普通用户确实可以知道所有者的uid另一个套接字,即使不属于它自己。因此,条目的缺失uid:
仅意味着两件事:根用户,或由内核拥有(这是不同的,但这里无法区分)。
就你而言,作为sshd守护进程运行为根,与其相关的所有 TCP 套接字都将属于根, 即使sshd授予非 root 登录权限。授予的用户登录名sshd未连接到任何 TCP 套接字:它已连接到sshd通过主/从守护进程(或其单独的实例)PTY或者用管道。因此ss
不能用于将 TCP 连接与通过传入本地登录的用户进行匹配SSH。