FireWire デバイスが PC に接続/切断されたときに、カスタム シェル スクリプトが実行されるようになりました。スクリプトは正常に実行されましたが、このスクリプト内でネットワークが利用できないことがわかりました。
これが私のルールです:
[root@ rules.d]# cat 99-superuser.rules
ACTION=="remove", KERNEL=="fw*1", SUBSYSTEM=="firewire", RUN+="/root/remove.bash"
ACTION=="add", KERNEL=="fw*1", SUBSYSTEM=="firewire",RUN+="/root/add.bash"
これが私の bash スクリプトです:
[root@ rules.d]# cat /root/remove.bash
#!/usr/bin/bash
nslookup superuser.com 8.8.8.8 >> /root/udev.log 2>&1
デバイスが切断された後に /root/udev.log に出力される内容は次のとおりです。
[root@ rules.d]# cat /root/udev.log
;; connection timed out; no servers could be reached
同時に、コンソールからコマンドを手動で実行する場合:
[root@ rules.d]# nslookup superuser.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: superuser.com
Address: 151.101.1.69
まったく混乱しています。どうやってそうなるのでしょうか? SELinux が無効になっています。ファイアウォールが無効になっています。Fedora 28 が更新されています。
助言がありますか?
UDPI: いいえ
感謝重力- 変更により修正IPアドレス拒否=任意にIPアドレス許可=任意systemd-udevd.service ファイル内。
答え1
udev サービスは、seccomp フィルターを使用して作成できるソケットを制限するように構成されています (ただし、これは最近緩和され、inet/inet6 が許可されるようになりました)。また、cgroup BPF ソケット フィルターを使用して、パケットの送受信先の IP アドレスを制限するように構成されています。
具体的には、systemd-udevd.service のオプション:
[Unit]
# Attaches a cgroup-wide eBPF socket filter
IPAddressDeny=any