我在使用 setcap 从普通用户处运行 dhclient 时遇到了相当令人沮丧的情况。由于我正在使用的环境,添加到 sudoers 不是一个选择。
我的尝试:
sudo setcap 'CAP_NET_BIND_SERVICE,CAP_NET_RAW=+ep' /sbin/dhclient
然后我通过 getcap 确认这些功能实际上已正确设置。但是当我跑步时,我得到一个不允许的操作。然后我在 strace 下运行它,显示了socket(PF_NETLINK, SOCK_RAW, 0) = 4
其他系统调用中的几个,并以我在 PF_PACKET 上读到的所有内容结束,socket(PF_PACKET, SOCK_RAW, 768) = -1 EPERM (Operation not permitted)
表明它应该只需要 cap_net_raw。
Linux 3.16.0-77-generic #99~14.04.1-Ubuntu SMP Tue Jun 28 19:17:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux