无法更改 /etc/resolv.conf 上的文件属性(例如不可变)

无法更改 /etc/resolv.conf 上的文件属性(例如不可变)

我注意到网络管理员经常更改我的 DNS 服务器,所以我想在文件上设置不可变位/etc/resolv.conf,但没有成功。我注意到该/etc/resolv.conf文件实际上是 的符号链接/run/resolvconf/resolv.conf

现在,sudo chattr +i /run/resolvconf/resolv.conf结果是:

chattr: Inappropriate ioctl for device while reading flags on /run/resolvconf/resolv.conf

据我所知,这意味着/run/resolvconf/不支持此类属性。对吗?

徐本图 15.10;

如何对我的resolv.conf文件进行写保护?

答案1

/run是一个tmpfs(ramdisk)文件系统,不支持扩展属性:

% df -T /run
Filesystem     Type  1K-blocks  Used Available Use% Mounted on
tmpfs          tmpfs    393016  6416    386600   2% /run

关于如何避免/etc/resolv.conf被 NetworkManager 更改,我在Arch Linux 论坛

创建一个resolv.conf文件,其中包含您希望保留在系统中某处的设置(例如/etc/resolv.conf.DNSoverride),并将此脚本放入/etc/NetworkManager/dispatcher.d

#! /bin/sh
cp -f /etc/resolv.conf.DNSoverride /etc/resolv.conf

脚本引用man networkmanager

[...] 应为 root 拥有的常规可执行文件。此外,它不能由组或其他用户写入,也不能是 setuid。[...]

引用man networkmanager

[...] NetworkManager 将按字母顺序执行 /etc/NetworkManager/dispatcher.d 目录或子目录中的脚本以响应网络事件。[...]

这意味着每次发生网络事件时脚本都会复制/etc/resolv.conf.DNSoverride覆盖,从而覆盖可能所做的更改。/etc/resolv.conf/etc/resolv.conf

答案2

这个答案解决了一些问题kos 的回答

因为是一个符号链接,所以直接覆盖它可能会在自动运行/etc/resolv.conf时导致错误。resolvconf -u

首先,按如下方式创建替换resolv.conf.override。这旨在替换resolv.conf。按如下方式匹配权限和所有者:

$ ll /etc/resolv.conf.override
-rwxrwxrwx 1 root root 172 Jun 26 20:38 resolv.conf.override*

接下来,创建一个脚本,例如20-resolv-conf-override。按如下所示匹配权限和所有者。

$ cd /etc/NetworkManager/dispatcher.d
$ ll 20-resolv-conf-override
-rwxr-xr-x 1 root root 101 Jun 26 20:45 20-resolv-conf-override*

$ cat 20-resolv-conf-override
#!/bin/sh
cp -f /etc/resolv.conf.override /run/resolvconf/resolv.conf

$ sudo ln -f 20-resolv-conf-override ./pre-up.d/

脚本在重新启动dispatcher.d时运行NetworkManager。相反,脚本在dispatcher.d/pre-up.d系统重新启动时有效运行。两者都是必需的。

相关内容