2012-08-05 83 views
25

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

networksetup正试图修改系统网络配置。输入你的密码以允许这个。

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

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

scutil正试图修改系统网络配置。输入你的密码以允许这个。

回答

0

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

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

不知道相当如何使用它,但它似乎有可能...

+1

你误解了这个问题,你在说什么是给网络安装提供一个密码给那些期待的命令。 OP的问题是网络设置需要由具有管理员权限的用户来运行。这甚至不是网络安装,而是要求在这里输入密码,而不是认证管理器。 – SirDarius 2013-06-09 09:48:16

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

+1

这似乎适用于OS X 10.8,但我担心如果使用Disk Util修复权限,此修复将会消失。 – sorin 2013-07-10 09:14:26

+0

这给了我错误“cp:/Library/Preferences/SystemConfiguration/preferences.plist.old:权限被拒绝” – Sean 2013-10-31 23:19:25

+1

不要设置二进制文件suid - 这是不好的做法,也是为什么sudo首先存在的原因。我已经为此问题添加了一个基于sudo的答案,以显示针对此问题的更安全的解决方案。 – synthesizerpatel 2013-11-21 01:21:59

12

使用sudo通过添加密码的规则要能够执行此命令的用户做到这一点。

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

    visudo -f /etc/sudoers 
    
  • 在文件的结尾,添加行

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

在哪里$ USERNAME是,把你想要提供对networksetup命令的nopassword访问权限的实际用户名。

  • 运行

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

,如果它设置正确,这将回显版本信息,或提示输入密码,如果你”保存文件

  • 测试它作为你的用户我犯了一个错误。

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

    如果你确实是偏执狂,那么在调用/ usr/bin/sudo时也要确保使用完整路径。

  • +0

    请提供更多信息。我尝试了上面的(假设我的管理员用户名是'fred'),并且在测试中出现了一长串错误(NB sbin不是仓)。我应该如何格式化命令? – dcnicholls 2014-10-04 11:06:37

    +0

    我编辑了修复路径的答案,并使测试更加清晰。如果你没有任何参数调用networksetup,那么你会得到一长页的使用提示。但是这确实证明了它没有密码就可以工作。 – nanoamp 2014-10-23 07:45:28

    +0

    这些指令现在产生这个错误“sudo:在/ etc/sudoers中靠近第48行的解析错误sudo:找不到有效的sudoers源,退出”我们如何编辑文件? – thefonso 2015-06-29 16:26:09