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

Me *_* Mi 6 root sudo

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

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

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

Hau*_*ing 5

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

setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute
Run Code Online (Sandbox Code Playgroud)

traceroute运行时,您可以使用pscap. 这不会影响进程的 UID/EUID。

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