25

我有一个小应用程序,用于更改 Mac 上的代理。它使用networksetup命令来设置代理设置,并且在 Lion 上运行良好。不过,在 Mountain Lion 上,每次我更改代理设置时,它都会询问管理员密码。

networksetup 正在尝试修改系统网络配置。输入您的密码以允许此操作。

有什么办法可以防止这种情况发生吗?或者有没有更好的方法来更改 Cocoa 中的代理设置?在 Lion 上,当我输入密码时系统会记住,所以我必须在重新启动后进行身份验证。

我还注意到,在 Chrome 中,Proxy Switchy 插件也有同样的行为。它说

scutil 正在尝试修改系统网络配置。输入您的密码以允许此操作。

4

3 回答 3

13

使用 sudo 通过为您希望能够执行此命令的用户添加无密码规则来完成此操作。

  • 运行 visudo 启动编辑器以修改 /etc/sudoers 文件

    visudo -f /etc/sudoers
    
  • 在文件末尾添加一行

    $USERNAME ALL=(root) NOPASSWD: /usr/sbin/networksetup
    

在 $USERNAME 所在的位置,将您想要提供 nopassword 访问权限的实际用户名放入 networksetup 命令。

  • 保存文件
  • 通过运行以您的用户身份对其进行测试

    /usr/bin/sudo /usr/sbin/networksetup -version
    

如果设置正确,它将回显版本消息,如果您犯了错误,则会提示输入密码。

这是一条更安全的路线,因为它将谁可以以 root 身份运行命令限制为特定用户,将 networksetup 二进制文件本身设置为 suid root 意味着任何登录到系统的人都可以修改您的网络配置。OSX 是一个多用户操作系统,它应该被视为一个多用户操作系统。

如果您真的很偏执,请确保在调用 /usr/bin/sudo 时也使用完整路径。

于 2013-11-21T01:27:44.793 回答
7

您可以设置权限suid/usr/sbin/networksetup然后networksetup将以root权限运行,因此您不再需要输入密码。

sudo chmod u+s /usr/sbin/networksetup

关于suid:http ://www.linuxnix.com/2011/12/suid-set-suid-linuxunix.html

于 2013-01-29T13:03:22.600 回答
0

我也一直试图弄清楚这一点。我注意到手册页提到了这一点:

任何接受密码的标志都将接受“-”代替密码,以指示它应该从标准输入读取密码。

不太清楚如何使用它,但似乎有可能......

于 2012-11-04T14:51:44.780 回答