【问题标题】:how does fuser report on sockets as non-root user?fuser 如何以非 root 用户身份报告套接字?
【发布时间】:2011-02-08 05:19:38
【问题描述】:

我正在尝试使用 fuser 来查找我拥有的已打开某些 TCP 端口的进程的 pid。

在定影器手册页中它说:

... 这个问题最常见的时候是在以非 root 用户运行 fuser 时查找 TCP 或 UDP 套接字时。在这种情况下,定影器将报告无访问权限。 ...

但是,在我的 Ubuntu 机器上,fuser 确实报告为我拥有的进程打开了套接字,例如:

perl -MIO::Socket 'IO::Socket::INET->new(Listen => 10, LocalPort => 3000)' &

定影器-n tcp 3000

问题:如何设置以允许这种情况发生?它是内核配置选项吗?

谢谢!

注意:问题是:一些 linux 发行版是如何配置的,以便当 fuser 以普通用户身份运行时,fuser 将报告拥有套接字的进程?如果我拥有该进程,一个 Ubuntu 发行版“fuser -n tcp 3000”将报告该进程,但在另一个 linux 发行版(我认为是 Centos)上,即使我拥有它也不会报告该进程。

【问题讨论】:

    标签: linux sockets fuser


    【解决方案1】:

    fuser 通过 /proc 文件系统 (proc(5)) 处理 /proc/[pid]/fd/ 目录并检查文件描述符。您拥有的进程具有相应的 /proc 条目,您再次拥有。这使您可以检查自己的流程,但不能检查其他流程。

    查看给定程序正在做什么的一个非常有用的工具是strace(1)。例如,您可以看到fuser 完成了哪些系统调用以及使用哪些参数:

    ~$ strace fuser -n tcp 3000
    

    【讨论】:

    • 嗨 - 谢谢,但这并不是我要问的。我认为有一个内核配置选项允许 fuser 查看/或不查看拥有特定套接字的进程。在一个 Linux 发行版上,fuser 可以“看到”我自己的进程,但在另一个发行版上,即使我拥有该进程,“fuser -n tcp 3000”也不会报告任何内容。
    • @perlman,是否在不允许fuser 看到您自己的进程的机器上启用了SELINUX
    猜你喜欢
    • 2011-02-28
    • 2013-07-02
    • 2017-02-06
    • 2017-07-14
    • 2020-12-19
    • 2017-07-08
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多