我有一个自定义配方,可以将 systemd .network 配置文件复制到 /etc/systemd/network 中,为我的系统设置静态 IP。
由于许多设备可以连接到同一网络,我希望用户能够编辑系统 IP 地址。
我的映像有一个只读根分区和一个可写主分区。我的想法是让 /etc/systemd/network 中的 .network 文件成为 home 中文件的链接,以便用户可以编辑它(显然,通过不会搞砸文件的远程软件)。
# ll /etc/systemd/network/20-wired.network
lrwxrwxrwx 1 root root 35 Sep 16 15:16 /etc/systemd/network/20-wired.network -> /home/root/systemd/20-wired.network*
这些是链接文件的权限
# ll /home/root/systemd/20-wired.network
-rwxrwxrwx 1 root root 107 Mar 9 2018 /home/root/systemd/20-wired.network*
糟糕的是,链接技巧不起作用:
# systemctl status systemd-networkd.service
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-09-16 15:19:31 UTC; 6min ago
TriggeredBy: * systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 413 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 520)
Memory: 2.0M
CGroup: /system.slice/systemd-networkd.service
`-413 /lib/systemd/systemd-networkd
Sep 16 15:19:31 imx8mpsolidrun systemd[1]: Starting Network Service...
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: Failed to load /etc/systemd/network/20-wired.network, ignoring: Permission denied
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: Enumeration completed
Sep 16 15:19:31 imx8mpsolidrun systemd[1]: Started Network Service.
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: eth0: Link UP
Sep 16 15:19:36 imx8mpsolidrun systemd-networkd[413]: eth0: Gained carrier
Sep 16 15:19:37 imx8mpsolidrun systemd-networkd[413]: eth0: DHCPv4 address 10.0.10.240/24 via 10.0.10.1
Sep 16 15:19:37 imx8mpsolidrun systemd-networkd[413]: eth0: Gained IPv6LL
如果链接文件位于根分区而不是主分区,则链接技巧有效。但随后它将再次变为只读......
我认为这是由于 systemd-networkd 服务具有ProtectHome=yes
.我尝试通过将其设置为 并对其进行评论来禁用此功能no
,false
但到目前为止没有运气。我也尝试过将其设置为read-only
并设置ReadOnlyPaths=path/to/linked/file
,但仍然没有运气。
知道如何让它发挥作用吗?
当根分区为只读时,是否有更好的方法来获得可编辑的静态 IP?
编辑
我进一步测试,看来确实是文件权限访问问题。
我确认文件ProtectHome=no
中需要该systemd-networkd.service
文件,否则该服务无法访问主目录中的文件。
我注意到任何用户家中的文件(例如/home/weston/
)都可以被 systemd 访问和使用,但/home/root
就整个文件夹的权限设置而言,无法访问 中的文件。我尝试为所有/home/root/
文件夹和子文件夹设置0777,但systemd仍然无法访问这些文件。事实上,systemd-network
用户无权访问配置文件。
这里是文件权限(这两个文件似乎对任何人都可读)和test
结果:
# namei -l /home/root/20-wired.network
f: /home/root/20-wired.network
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr--r-- root root root
-rw-r--r-- root root 20-wired.network
# sudo -u systemd-network test -r /home/root/20-wired.network; echo $?
1
# namei -l /home/weston/20-wired.network
f: /home/weston/20-wired.network
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x weston weston weston
-rw-r--r-- weston weston 20-wired.network
# sudo -u systemd-network test -r /home/weston/20-wired.network; echo $?
0
我想我需要更好地研究root
访问权限......