udev shell 脚本中网络不可用

udev shell 脚本中网络不可用

我有一个自定义的 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

相关内容