我的操作系统:debian9。
我磁盘上的文件系统:
$ sudo blkid | awk '{print $1 ,$3}'
/dev/sda2: TYPE="ext4"
/dev/sda1: TYPE="vfat"
/dev/sda3: TYPE="ext4"
/dev/sda4: TYPE="ext4"
/dev/sda5: TYPE="swap"
现在chattr +i
我的/etc/resolv.conf
:
sudo chattr +i /etc/resolv.conf
chattr: Operation not supported while reading flags on /etc/resolv.conf
ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 31 Jan 8 15:08 /etc/resolv.conf -> /etc/resolvconf/run/resolv.conf
sudo mount -o remount,acl /
sudo chattr +i /etc/resolvconf/run/resolv.conf
chattr: Inappropriate ioctl for device while reading flags on /etc/resolvconf/run/resolv.conf
如何设置 chattr +i
我的/etc/resolve.conf
?
/dev/sda1
对于 Windows 来说是空的。我的 Debian 安装在
/dev/sda2
$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 1948840 0 1948840 0% /dev tmpfs 392020 5848 386172 2% /run /dev/sda2 95596964 49052804 41644988 55% /
acl
已安装。$ dpkg -l acl Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-============-============-================================= ii acl 2.2.52-3+b1 amd64 Access control list utilities
这些 findmnt 命令没有输出信息:
sudo findmnt -fn / | grep -E "acl|user_xattr" sudo findmnt -fn / | grep vfat sudo findmnt -fn $(dirname $(realpath /etc/resolv.conf)) | grep tmpfs
答案1
尝试使用 -f 标志
sudo chattr -f +i /etc/resolv.conf
答案2
你的/etc/resolv.conf
可能是一个符号链接。看这个解释了解更多信息。
你可以尝试:
chattr +i "$(realpath /etc/resolv.conf)"
根挂载点是否支持访问控制列表 (acl) 或者扩展属性?
通过以下方式检查:
findmnt -fn / | grep -E "acl|user_xattr" || echo "acl or user_xattr mount option not set for mountpoint /"
您的根分区类型是“VFAT”吗?我认为“VFAT”不支持ACL。
通过以下方式检查:
findmnt -fn / | grep vfat
或者也许您的符号链接目标目录是临时文件系统? ACL迷失在临时文件系统
测试一下:
findmnt -fn $(dirname $(realpath /etc/resolv.conf)) | grep tmpfs && echo $(dirname $(realpath /etc/resolv.conf)) is tmpfs
干杯
答案3
正如您所看到的,您似乎无法chattr
在符号链接上设置属性。此外,它们在tmpfs
.这手册页chattr
提到
并非所有文件系统都支持或使用所有标志;请参阅特定于文件系统的手册页,例如
btrfs(5)
、ext4(5)
、 和xfs(5)
以获取更多特定于文件系统的详细信息。
并且没有提到不可变标志chattr
或tmpfs(5)
.
ACL 或扩展属性与此无关,chattr
属性直接存储在 inode 上,如ext4
中所示这个inode结构表。
您需要找到其他方法来防止您的程序修改它。systemd-resolved
应该足够聪明,可以不理会该文件如果用静态文件替换符号链接:
支持三种处理模式
/etc/resolv.conf
(请参阅):resolv.conf(5)
· 或者,
/etc/resolv.conf
可能由其他包管理,在这种情况下systemd-resolved
将读取它的 DNS 配置数据。在这种操作模式下,systemd-resolved
是该配置文件的消费者而不是提供者。请注意,该文件的所选操作模式是完全自动检测的,具体取决于是否
/etc/resolv.conf
是 DNS 服务器的符号链接/run/systemd/resolve/resolv.conf
或列为127.0.0.53
DNS 服务器。
如果您有其他程序可能会修改它(例如 DHCP 客户端),则必须考虑重新配置它们。或者chattr +i /etc/resolv.conf
将其设置为静态文件而不是符号链接后,但请注意,无论尝试写入它,都可能不喜欢由此产生的错误。
答案4
引导到 live CD 或 USB Linux 安装,然后浏览到硬盘驱动器上的 resolv.conf,可以实现 chattr 的标准语法。