我正在 Debian Gnu/Linux 上试验功能。
我已将 /bin/ping 复制到我当前的工作目录。正如预期的那样,它不起作用,它最初是 setuid root。
然后,我通过执行 来为我的 ping 提供最小的功能(不是 root)sudo /sbin/setcap cap_net_raw=ep ./ping
,并且我的 ping 可以正常工作。
然后sudo /sbin/setcap -r ./ping
撤销那个能力。它现在没有按预期工作。
我现在尝试使用capsh
.
capsh
没有权限,所以我需要以 root 身份运行它,然后删除 root 并因此删除所有其他权限。
我想我也需要secure-keep-caps
,这在 中没有记录capsh
,但在能力手册中。我从/usr/include/linux/securebits.h
. 它们看起来是正确的,因为输出--print
显示这些位是正确的。
我已经摆弄了几个小时,到目前为止我有这个。
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
但是ping
有错误ping: icmp open socket: Operation not permitted
,这是当它没有能力,会发生什么。也--print
说明了Current: =p cap_net_raw+i
,这还不够我们需要e
。 …
我注意到某些/proc/<pid>/
proc ,例如 bash,其全部资源都可以由创建该 proc 的用户读取。然而,其他 proc,例如 chrome 或 gnome-keyring-daemon,它们的大部分/proc/<pid>/
资源只能由 root 访问,尽管进程本身由普通用户拥有并且没有调用 suid。
我对内核进行了一番挖掘,发现如果任务缺少“可转储”标志,则 /proc/ 内容会受到限制,但是我很难理解在哪些情况下任务变得不可转储(setuid 情况除外,这不适用于 chrome 或 gnome-keyring):
https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/fs/proc/base.c#L1532
有没有人愿意帮助我了解底层机制及其原因?
谢谢!
编辑:
找到了一个关于为什么您不想让gnome-keyring-daemon
您的用户转储您的 SSH 代理(例如)的好文档。仍然不确定如何 gnome-keyring-daemon
使自己无法倾倒。
我只是在回答另一个问题在这里:-),因此一看-想看看在/proc/$PID/fd
的ssh-agent
,以找出它使用套接字。但我不能。我很惊讶地注意到大多数文件和目录都属于 root。ssh-agent
作为我的用户运行(它的父进程也是如此)并且没有安装 SUID root。我无法找出 KDE 的确切启动位置。我好奇; 有人可以告诉我这里发生了什么吗?
或者这根本与用户无关,进程是否可以使用一些内核魔法/proc
来向公众(甚至同一用户的其他进程)隐藏(大部分)他们的信息?
我刚刚检查了/proc/$PID/fd
我所有的进程,并注意到这ssh-agent
不是唯一具有这个奇怪属性的进程。其他的是一堆 Chrome 进程和kdesud
(也没有 SUID 根二进制文件)。
作为非 root 用户,我正在运行一个进程。进程二进制文件被赋予了 cap_sys_resource 能力。即使该进程由同一用户拥有,该用户也无法读取其 /proc//fd 目录。/proc/pid 中的权限如下所示:
dr-xr-xr-x. 9 ec2-user ec2-user 0 May 12 01:03 .
dr-xr-xr-x. 249 root root 0 Apr 3 13:34 ..
dr-xr-xr-x. 2 ec2-user ec2-user 0 May 12 01:03 attr
-rw-r--r--. 1 root root 0 May 12 01:04 autogroup
-r--------. 1 root root 0 May 12 01:03 auxv
-r--r--r--. 1 root root 0 May 12 01:04 cgroup
--w-------. 1 root root 0 May 12 01:04 clear_refs
-r--r--r--. 1 root root 0 May 12 01:03 cmdline …
Run Code Online (Sandbox Code Playgroud) proc ×3
capabilities ×2
linux ×2
permissions ×2
kernel ×1
linux-kernel ×1
process ×1
root ×1
security ×1