web-dev-qa-db-ja.com

ntpdは非ルートとして実行されていますが、発信パケットはuid0として一致します

デフォルトのiptablesOUTPUTチェーンをDROPパケットに設定しました。次に、ntpユーザーのみがntpパケットを送信できるようにするファイアウォールルールを作成しました。

iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT

ただし、10〜20分ごとに次のように表示されます。

ntpd[27769]: sendto(<snip>) (fd=22): Operation not permitted

次に、ルールの-m owner --uid-owner ntp部分を削除し、その前にログルールを追加しました。

iptables -A OUTPUT -p udp --dport 123 -j LOG --log-level debug \
    --log-prefix "Spotted a NTP packet: " --log-uid

ntpdが再び機能し始め、カーネルリングバッファに次のように表示されます。

Spotted a NTP packet: <snip> PROTO=UDP SPT=123 DPT=123 LEN=56 UID=0

--log-uidスイッチをLOGターゲットに使用していて、ntpdがntpユーザー(uid = 38)として実行されています。

# ps auxf | grep ntpd
ntp      27769  0.0  1.0   4512  4508 ?        SLs  Jan04   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid

それでも、ログにはUID=0が表示されます。システム上で他にntpパケットを送信しているものはないと確信しています。また、Operation not permittedを取得しなくなったため、実際にntpdがパケットを送信していると確信しています。

これらのパケットのntpユーザーを一致させなくても大丈夫だと思います。ただし、iptablesが表示されない理由を誰かが説明できますかUID=38これらのパケットの場合

4
Corey Henderson

プログラムが1024未満のポートを使用するには、ルートである必要があります。 NTPのような多くのアプリケーションが起動し、ポートをrootとして開き、他のすべての定義済みアカウントに特権をドロップします。

6
Zoredache

Iptablesルールに誤りがあります:

iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT

-uid-ownerを使用する場合は、uidを定義する必要があります。 -数値。
プログラム名の場合別のオプションが必要です:-cmd-owner。正しいルールは次のとおりです。

iptables -A OUTPUT -m owner --cmd-owner ntp -p udp --dport 123 -j

詳細な説明あなたは素晴らしい byOskar Andreassonで読むことができます。

1
Sergey Serov