У меня есть пользовательский скрипт оболочки, который выполняется при подключении/отключении устройства FireWire от моего ПК. Скрипт выполнен успешно, но я обнаружил, что сеть недоступна внутри этого скрипта.
Вот мое правило:
[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=любойкIPAddressAllow=любойв файле systemd-udevd.service.
решение1
Служба udev настроена на использование фильтров seccomp для ограничения количества создаваемых сокетов (хотя недавно это ограничение было смягчено и разрешено использование inet/inet6), а также фильтров сокетов cgroup BPF для ограничения количества IP-адресов, на которые могут отправляться/с которых могут приниматься пакеты.
В частности, параметры в systemd-udevd.service:
[Unit]
# Attaches a cgroup-wide eBPF socket filter
IPAddressDeny=any