udev 쉘 스크립트 내에서 네트워크를 사용할 수 없습니다.

udev 쉘 스크립트 내에서 네트워크를 사용할 수 없습니다.

FireWire 장치가 PC에 연결/연결 해제될 때 사용자 정의 쉘 스크립트가 실행되었습니다. 스크립트가 성공적으로 실행되었지만 이 스크립트 내에서 네트워크를 사용할 수 없습니다.

내 .rule은 다음과 같습니다.

[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가 비활성화되었습니다. 방화벽이 활성화되었습니다. 페도라 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

관련 정보