Como definir 'chattr + i' para o meu '/etc/resolve.conf'?

2

Meus os: debian9.
O sistema de arquivos no meu disco.

$ 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"

Agora para chattr +i para meu /etc/resolve.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

Como definir chattr +i para meu /etc/resolve.conf ?

  1. /dev/sda1 está vazio para as janelas.

  2. Meu debian está instalado em /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 está instalado.

    $ 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. Nenhuma informação de saída para findmnt.

    sudo findmnt -fn / | grep -E "acl|user_xattr"
    sudo findmnt -fn / | grep vfat
    sudo findmnt -fn $(dirname $(realpath /etc/resolv.conf)) | grep tmpfs
    
por scrapy 05.02.2018 / 10:31

2 respostas

4

Como você viu, parece que não é possível definir atributos chattr em links simbólicos. Além disso, eles não são compatíveis com tmpfs . A página man do chattr menciona que

Not all flags are supported or utilized by all filesystems; refer to filesystem-specific man pages such as btrfs(5), ext4(5), and xfs(5) for more filesystem-specific details.

E não há menção do sinalizador imutável ou chattr em tmpfs(5) .

ACLs ou atributos estendidos não têm nada a ver com isso, chattr atributos são armazenados diretamente no inode, como visto por ext4 em esta tabela da estrutura do inode .

Você precisará encontrar outra maneira de impedir que seus programas o modifiquem. systemd-resolved deve ser inteligente o suficiente para deixar o arquivo sozinho se você substitua o symlink por um arquivo estático:

Three modes of handling /etc/resolv.conf (see resolv.conf(5)) are supported:

· Alternatively, /etc/resolv.conf may be managed by other packages, in which case systemd-resolved will read it for DNS configuration data. In this mode of operation systemd-resolved is consumer rather than provider of this configuration file.

Note that the selected mode of operation for this file is detected fully automatically, depending on whether /etc/resolv.conf is a symlink to /run/systemd/resolve/resolv.conf or lists 127.0.0.53 as DNS server.

Se você tiver outros programas que possam modificá-lo (como um cliente DHCP), você terá que ver como reconfigurá-los. Ou chattr +i /etc/resolv.conf depois de torná-lo um arquivo estático em vez de um link simbólico, mas tenha cuidado para o que quer que tente escrevê-lo, pode não gostar dos erros resultantes.

    
por 05.02.2018 / 12:06
1

Seu /etc/resolv.conf é provavelmente um link simbólico. Veja esta explicação para mais informações.

Você pode tentar:

chattr +i "$(realpath /etc/resolv.conf)"

O suporte ao ponto de montagem raiz lista de controle de acesso (acl) ou Atributos Estendidos ?

Verifique via:

findmnt -fn / | grep -E "acl|user_xattr" || echo "acl or user_xattr mount option not set for mountpoint /"

A sua partição raiz é do tipo 'VFAT'? Acredito que 'VFAT' não suporta ACLs .

Verifique via:

findmnt -fn / | grep vfat

Ou talvez seu diretório de destino do symlink seja um tmpfs ? ACLs são perdidos em tmpfs

Teste:

findmnt -fn $(dirname $(realpath /etc/resolv.conf)) | grep tmpfs && echo $(dirname $(realpath /etc/resolv.conf)) is tmpfs

felicidades

    
por 05.02.2018 / 10:43

Tags