Tornar somente leitura /etc gravável

Tornar somente leitura /etc gravável

Estou lidando com um dispositivo embarcado rodando Linux. Os fabricantes deste dispositivo o configuraram para carregar o sistema de arquivos raiz como somente leitura.

Em /etc/mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

Isso significa que não consigo modificar nenhum arquivo em/etc, como para adicionar um novo usuário.

Eu tentei remontar o diretório raiz:

mount -o remount,rw -t squashfs /dev/root /

mas acabei de receber um erro

mount: cannot remount block device /dev/root read-write, is write-protected

Procurei esse erro e as pessoas estavam dizendo para usar o blockdev. O sistema não tem o blockdev instalado, então eu compilei e copiei. Então eu corri

blockdev --setrw rootfs

mas novamente recebi um erro:

blockdev: cannot open rootfs: No such file or directory

É possível tornar /etc gravável se ainda não o for? Tenho acesso root ao sistema, mas não consigo acessar o sistema de arquivos 'offline', todas as alterações devem ser feitas através de comandos Bash.

Responder1

squashfsé um sistema de arquivos compactado somente leitura. Não há nenhuma disposição para fazer modificações nele depois de criado. Portanto, você não poderia escrever nele, mesmo que o dispositivo de bloco subjacente pudesse ser gravável. Você precisaria criar uma nova imagem squashfs de todo o sistema de arquivos com suas modificações equeimarpara o dispositivo de armazenamento onde o sistema de arquivos está armazenado, o que seria problemático de fazer no sistema ativo.

Outra opção é montar um sistema de arquivos diferente no /etc. Poderia ser através de uma montagem união se suportada pelo kernel, que mescla dois sistemas de arquivos normalmente com um sistema de arquivos gravando apenas as alterações em umbasesistema de arquivos somente leitura.

Verifique o suporte para AUFS_FS ou OVERLAY_FS na configuração do kernel.

Por exemplo, para montar um diretório em união /tmp(esperançosamente gravável, embora possivelmente tmpfsna memória (portanto, não persistente durante uma reinicialização) no seu caso, se o sistema não tiver armazenamento gravável permanente)

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

Em seguida, /etcserá gravável e as modificações feitas nele serão armazenadas no arquivo /tmp/etc/upper.

Alternativamente, se houver apenas alguns arquivos que você deseja modificar, você pode montá-los por ligação (sim, você pode montar em qualquer arquivo, não apenas em diretórios) a partir de uma versão armazenada em sistemas de arquivos graváveis:

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

Então /etc/passwdseria gravável. É claro que você também pode fazer isso por completo /etc. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).

informação relacionada