2017-08-03 45 views
-1

每當網絡發生變化時,我一直試圖重新加載pf規則。 這是我的plist文件。 /Library/LaunchAgents/com.wwk.networkchange.plistmacOS Sierra:每當網絡發生變化時重新加載防火牆

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.wwk.networkchange</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>sudo /sbin/pfctl -f /Users/wwk/pf.conf</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>WatchPaths</key> 
    <array> 
     <string>/private/var/run/resolv.conf</string> 
    </array> 
</dict> 
</plist> 

我可以看到當網絡接口更改,但PF規則不被重新加載在所有/private/var/run/resolv.conf改變。 僅供參考,/Users/wwk/pf.conf在那裏,我已啓用/ sbin/pfctl通過/ etc/sudoers文件沒有密碼提示。 非常感謝!

回答

1

我看到至少有兩個問題。

首先,您的ProgramArguments需要是一個字符串數組,而不是帶空格的單個字符串。

其次,你真的不應該使用sudo這個 - 只需將它作爲LaunchDaemon(作爲根運行)而不是LaunchAgent(作爲登錄用戶運行)。因此,您ProgramArguments應該是這樣的:

<key>ProgramArguments</key> 
<array> 
    <string>/sbin/pfctl</string> 
    <string>-f</string> 
    <string>/Users/wwk/pf.conf</string> 
</array> 
+0

對於ProgramArguments,您是對的。我按照您的指示安排了它們,但仍然沒有運氣。 關於sudo問題,我發現我仍然必須以sudo作爲前綴,即使它已註冊爲sudoers。 – Pei

+0

@Pei您是否將它移動到/ Library/LaunchDaemons(然後重新啓動或使用'sudo launchctl load/Library/LaunchDaemons/com.wwk.networkchange.plist'加載它?這應該使'sudo'無關緊要。 –

+0

是的,我這樣做,並做了sudo launchctl加載/卸載幾次,但仍然沒有運氣。 – Pei

0

其實那是因爲我的新守護進程是衝突與蘋果的默認pfctl的守護進程。 所以我不得不更新默認的pfctl守護進程plist來觀察每當網絡更改時更改的路徑。 添加下面的/System/Library/LaunchDaemons/com.apple.pfctl.plist

<WatchPaths> 
<array> 
    <string>/private/var/run/resolv.conf</string> 
    <string>/etc/pf.conf</string> 
    <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string> 
    <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string> 
</array> 

順便說一句,我們必須啓用MacOS的恢復模式中系統文件的更改由$ csrutil disable作出上述plist文件的變化。 (必須在系統文件中進行必要的更改後才能執行$ csrutil enable

相關問題