2012-08-05 88 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