我最近遇到一个高可用性场景,维护程序需要将虚拟IP与其所在的服务器绑定,然后通过网络进行广播。为此,它分别运行ip
和arp
命令。但是,我注意到任何此类维护程序都需要sudoer
特权才能运行ip
或arp
。我没有授予root
它这样的权限,但希望它仍然能够运行这两个命令。那么有解决办法吗?提前致谢。
我最近遇到一个高可用性场景,维护程序需要将虚拟IP与其所在的服务器绑定,然后通过网络进行广播。为此,它分别运行ip
和arp
命令。但是,我注意到任何此类维护程序都需要sudoer
特权才能运行ip
或arp
。我没有授予root
它这样的权限,但希望它仍然能够运行这两个命令。那么有解决办法吗?提前致谢。
HA 场景需要对(虚拟)IP 地址进行故障转移并发送免费的 arp 请求,以确保 LAN 得知已发生 IP 故障转移。
对系统 IP 堆栈进行更改并发送免费的 arp 请求需要特权/根级别访问。
当进行这些更改的工具已经以 root 身份运行时,当然已经有足够的特权访问权限。
当工具不以 root 身份运行时,则需要一种授予特权访问权限的方法。sudoers 策略是一种可以授予细粒度权限的方法。
另一种方法是对这些命令设置 set-uid root 权限,但这允许任何和所有用户发送免费的 arp 请求并修改相邻系统的 ARP 缓存和/或修改系统 IP 堆栈。这可能不太理想。
这主要是评论(但评论框中没有足够的空间)。
是否有解决方案可以运行需要提升权限的命令而不提升权限?- 不
“我不给予像根这样的特权” - 如果您解释了您的保留意见,那么我们可能能够建议替代方案或减轻您的担忧,例如
允许“维护”用户仅以 root 身份运行指定的脚本。
但我很难想象一个场景,用于实现高可用性的服务需要手动启动。将其作为服务运行还可以提供确保服务持续运行的好处 - 那么为什么不以 root 用户的身份提供它呢?不幸的是,删除 root 权限需要额外的工具。因此,以非特权用户身份运行服务并使用 sudo 规则进行特权操作可能更有意义。
Linux 还有一个被描述为功能的权限管理系统 - 但授予解决此问题的功能可能会破坏您因不使用 root 帐户而隐含的未定义目标。
您可以允许用户通过 sudo 作为任何用户执行特定命令,而不执行任何其他命令(就像 Windows 中的“run-as”)。没有义务提供完全的 root 访问权限,sudo 可以非常精细。
请阅读 sudoers 的手册。
对于HA场景,这或多或少是VRRP的描述