2017-08-03 2 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が変更されて見ることができます。 FYI、/Users/wwk/pf.confがあり、/ etc/sudoersファイルを介してパスワードを入力せずに/ sbin/pfctlを有効にしました。 ありがとうございました!

答えて

1

少なくとも2つの問題があります。

最初に、ProgramArgumentsは、スペースを含む単一の文字列ではなく、文字列の配列である必要があります。

第2に、これにはsudoを使用しないでください。LaunchAgent(ログインしているユーザーとして実行)ではなく、LaunchDaemon(ルートとして実行)にしてください。このように、あなたのProgramArgumentsは次のようになります。私の新しいデーモンがAppleのデフォルトのpfctlデーモンと競合したため

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

ProgramArgumentsに関しては正しいです。私はあなたが指摘したとおりにそれらを整理しましたが、まだ運がありません。 sudoの問題に関しては、sudoersとして登録されていても、まだsudoの接頭辞を付けなければならないことがわかります。 – Pei

+0

@Pei/Library/LaunchDaemonsに移動しましたか(リブートするか、 'sudo launchctl load/Library/LaunchDaemons/com.wwk.networkchange.plist'でロードしますか?それは 'sudo'を無関係にするはずです。 –

+0

ええ、私はそうし、sudo launchctlのロード/アンロードを何度か繰り返したが、まだ運がなかった。 – Pei

0

実際にはでした。 したがって、ネットワークが変更されたときに変更されるパスを監視するために、デフォルトの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> 

に以下を追加しますところで、私たちは、上記のplistファイルに変更を加えるためにMacOSのリカバリモードで$ csrutil disableにより、システムファイルの変更を有効にする必要があります。 ($ csrutil enableはシステムファイルの必要な変更後に行う必要があります)

関連する問題