如何为我的“/etc/resolv.conf”设置“chattr +i”?

如何为我的“/etc/resolv.conf”设置“chattr +i”?

我的操作系统: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

  1. /dev/sda1对于 Windows 来说是空的。

  2. 我的 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% /
    
  3. 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   
    
  4. 这些 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)以获取更多特定于文件系统的详细信息。

并且没有提到不可变标志chattrtmpfs(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.53DNS 服务器。

如果您有其他程序可能会修改它(例如 DHCP 客户端),则必须考虑重新配置它们。或者chattr +i /etc/resolv.conf将其设置为静态文件而不是符号链接后,但请注意,无论尝试写入它,都可能不喜欢由此产生的错误。

答案4

引导到 live CD 或 USB Linux 安装,然后浏览到硬盘驱动器上的 resolv.conf,可以实现 chattr 的标准语法。

相关内容