为什么 ss -e 不显示 uid?

为什么 ss -e 不显示 uid?

我有一个 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

相关内容