我有一个小应用程序,用于更改Mac上的代理。它使用networksetup
命令设置代理设置,并且在Lion上运行正常。但是在Mountain Lion上,它每次更改代理设置时都会询问管理员密码。
networksetup正在尝试修改系统网络配置。输入密码以允许此操作。
有没有办法防止这种情况发生?或者有更好的方法来更改Cocoa中的代理设置吗?在Lion上,当我输入密码时,系统会记住,因此我必须在重新启动后进行身份验证。
我还注意到在Chrome中,Proxy Switchy插件会遇到相同的行为。它说
scutil正在尝试修改系统网络配置。输入密码以允许此操作。
答案 0 :(得分:13)
使用sudo通过为您希望能够执行此命令的用户添加无密码规则来实现此目的。
运行visudo以启动编辑器以修改/ etc / sudoers文件
visudo -f /etc/sudoers
在文件末尾添加行
$USERNAME ALL=(root) NOPASSWD: /usr/sbin/networksetup
在$ USERNAME的位置,将您想要提供的实际用户名提供给netsetword访问networksetup命令。
通过运行
将其作为您的用户进行测试/usr/bin/sudo /usr/sbin/networksetup -version
这是一个更安全的路由,因为它限制了谁可以以root身份运行命令到特定用户,设置networksetup二进制文件本身suid root意味着登录系统的任何人都可以修改您的网络配置。 OSX是一个多用户操作系统,它应该被视为一个。
如果你真的是偏执狂,请确保在调用/ usr / bin / sudo时使用完整路径。
答案 1 :(得分:7)
您可以将权限suid
设置为/usr/sbin/networksetup
,然后netsetup将以root权限运行,因此您无需再输入密码。
sudo chmod u+s /usr/sbin/networksetup
关于suid:http://www.linuxnix.com/2011/12/suid-set-suid-linuxunix.html
答案 2 :(得分:0)
我一直试图解决这个问题。我注意到手册页提到了这个:
任何接受密码的标志都会接受“ - ”代替密码,表示它应该从标准输入读取密码。
不确定如何使用它但似乎有可能......