【问题标题】:Prevent networksetup from asking password防止networksetup询问密码
【发布时间】:2012-08-02 21:30:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: macos cocoa proxy passwords osx-mountain-lion


    【解决方案1】:

    我也一直在尝试解决这个问题。我注意到手册页提到了这一点:

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

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

    【讨论】:

    • 您误解了这个问题,您所说的是为 networksetup 为预期的命令提供密码。 OP 的问题是 networksetup 需要由具有管理员权限的用户运行。这里甚至不是 networksetup 要求输入密码,而是身份验证管理器。
    【解决方案2】:

    您可以将权限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

    【讨论】:

    • 这似乎在 OS X 10.8 上工作,但我担心如果我使用 Disk Util 修复权限,这个修复就会消失。
    • 这给了我错误cp: /Library/Preferences/SystemConfiguration/preferences.plist.old: Permission denied
    • 不要设置二进制文件 suid - 这是不好的做法,也是 sudo 存在的原因。我为这个问题添加了一个基于 sudo 的答案,以展示针对这个问题的更安全的解决方案。
    • sudo 并没有修复错误 - 但是 10.10 和 10.11 中的新 UAC 模式将其删除。
    • 链接损坏请修复
    【解决方案3】:

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

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

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

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

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

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

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

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

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

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

    【讨论】:

    • 请提供更多信息。我尝试了上述方法(假设我的管理员用户名是“fred”)添加 {fred ALL=(root) NOPASSWD: /usr/sbin/networksetup} 并在测试中出现一系列错误(NB sbin 不是 bin)。我应该如何格式化命令?
    • 我已经编辑了答案以修复路径,并使测试更清晰。如果你在没有任何参数的情况下调用networksetup,那么你会得到一长页的使用提示。但这确实证明它可以在没有密码的情况下工作。
    • 这些指令现在产生这个错误“sudo: parse error in /etc/sudoers near line 48 sudo: no valid sudoers sources found, quitting” 我们现在如何编辑文件?
    • 使用 visudo 编辑文件。它将确保文件没有任何错误。
    • 我已经尝试过了,但我仍然不断收到提示(尝试在 OSX 上安装 Private Internet Access 客户端),尽管 -version 检查按预期工作。对于我在 El Capitan 上的价值 - networksetup 的位置是否发生了变化?
    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多