我已经设置了wireguard,我对此非常满意,但我忍不住想知道两件事:
- 为什么 wg-quick 只能由 root 使用?
wg-quick <up/down> <interface>
我可以授予其他用户在没有实际 root 访问权限的情况下执行操作的权限吗?
我猜测这与将文件移动/复制/符号链接到根拥有的目录中,以及重新加载守护进程或其他东西有关。无论如何,我希望对解决方案进行一些阐述和建议
答案1
wg-quick 需要 root 访问权限,因为它使用 wg 和 ip 来更改网络接口。
不要将 wg-quick 添加到 sudoers,它将提供不受限制的 root 访问权限。 wg-quick 配置具有以 root 身份运行任意脚本(PreUp、PostUp 等)的钩子,“最常用于配置自定义 DNS 选项或防火墙规则”。
wg-quick 实际上是一个方便的脚本,正如联机帮助页所述:
一般来说,该实用程序只是一个简单的脚本,它包装对 wg(8) 和 ip(8) 的调用以设置 WireGuard 接口。它是为具有简单需求的用户设计的,并且强烈鼓励具有更高级需求的用户使用更具体的工具、更完整的网络管理器,或者像往常一样仅使用 wg(8) 和 ip(8)。
答案2
警告:遵循此答案存在安全风险,它为用户提供无需密码的完全 root 访问权限。
使用 @ctrl-alt-delor 答案的提示,我设法制定了一个可行的解决方案。在我的场景中,我希望一个名为 jenkins 的非 sudo 用户能够像作者一样运行 wg-quick <up/down> 。
跑步: sudo visudo
root ALL = (ALL) ALL
%admin ALL = (ALL) ALL
下面添加了几行--------
jenkins ALL = (ALL) NOPASSWD: /opt/homebrew/bin/bash
jenkins ALL = (ALL) NOPASSWD: /usr/sbin/networksetup
jenkins ALL = (ALL) NOPASSWD: /sbin/ifconfig
jenkins ALL = (ALL) NOPASSWD: /opt/homebrew/bin/wg
jenkins ALL = (ALL) NOPASSWD: /opt/homebrew/bin/wg-quick
在我们要执行的最终命令之前列出先决条件非常重要!不然不行!我希望这会对某人有所帮助!
之后,普通用户 jenkins 就可以运行这个命令了。如果你面对
encountered an error: "wg-quick: Version mismatch: bash 3 detected, when bash 4+ required"
然后简单地运行
which bash
/opt/homebrew/bin/wg-quick
复制路径输出并将其放在 wg-quick file( )的开头
就我而言,wg-quick 的顶部将有:#!/opt/homebrew/bin/bash
执行此操作后,用户可以运行此 wg-quick up/down 并从 automator/sh 脚本执行此作业:)
使用的资源: https://osxdaily.com/2014/02/06/add-user-sudoers-file-mac/
答案3
是的。但不要(参见其他答案)。
警告:不要为此命令执行此操作。
选择一:找出原因,然后做正确的事。
选项2:sudo
运行sudo
并输入密码。我想你已经在这样做了。
sudo
选项 3:为此命令配置无密码。
此命令不安全。
编辑该/etc/sudoers
文件,以便可以运行这个命令有sudo
密码和无密码。 (小心,使用 visudo 验证文件。)
当它起作用时,您可以编写一个包装器脚本,以使其更容易运行。
答案4
在我自己的笔记本电脑上,只需通过应用 suid 位wg-quick
和wg
可执行文件来解决此问题。
which wg: /usr/bin/wg
which wg-quick: /usr/bin/wg-quick
sudo chmod u+s /usr/bin/wg-quick
sudo chmod u+s /usr/bin/wg