當 FireWire 裝置與我的 PC 連接/斷開連接時,我會執行自訂 shell 腳本。腳本執行成功,但我發現該腳本內網路不可用。
這是我的規則:
[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 已更新。
有什麼建議麼?
UDP:
謝謝重力- 透過改變來修復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