我有一个自定义的 shell 脚本,当 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 已更新。
有什么建议么?
UDP:
谢谢重力- 通过更改修复IPAddressDeny =任何到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