如何在没有sudo的情况下执行需要root权限的命令?

如何在没有sudo的情况下执行需要root权限的命令?

我正在尝试以traceroute -d具有特权的“标准”用户身份进行身份验证sudo。但是,如果我运行 sudo traceroute -d它将由用户执行,root所以我想知道如何以标准用户身份执行它。我尝试了几种方法来使用户基本上成为超级用户(又名 root),但没有成功。

唯一有效的方法是将 /etc/passwd 上的 uid 和组 id 更改为 0,但这会将用户“身份”更改为“root”。例如,如果我运行 whoami,我会得到“root”而不是“标准”用户名。

我需要这个的原因是我有一些基于 --uid-owner 的网络路由,现在我正在尝试调试它,但使用 sudo b/c 运行没有意义,它将执行为“ root”用户有其他路由。

答案1

traceroute不需要运行为root;它只需要能力CAP_NET_ADMIN。因此traceroute,如果您的内核支持文件功能并且没有 Linux 安全模块(SELinux、AppArmor)阻止它,您可以将其设置为文件的文件功能,然后将始终具有此功能(但对于所有用户):

setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute

traceroute运行时,您可以使用 来查看其功能pscap。这不会影响进程的 UID/EUID。

我不知道该怎么做,但据我所知,也可以使用 AppArmor(可能还有 SELinux)来运行具有某些功能的进程。当然,主要任务是限制可用的功能。

相关内容