Hacer que se pueda escribir en /etc de solo lectura

Hacer que se pueda escribir en /etc de solo lectura

Estoy tratando con un dispositivo integrado que ejecuta Linux. Los fabricantes de este dispositivo lo han configurado para que cargue el sistema de archivos raíz como de solo lectura.

Desde /etc/mtab:

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

Esto significa que no puedo modificar ningún archivo dentro de /etc, como por ejemplo agregar un nuevo usuario.

Intenté volver a montar el directorio raíz:

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

pero me sale un error

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

Busqué este error y la gente decía que usara blockdev. El sistema no tiene blockdev instalado, así que lo compilé y lo copié. Entonces corrí

blockdev --setrw rootfs

pero nuevamente recibí un error:

blockdev: cannot open rootfs: No such file or directory

¿Es posible hacer que /etc se pueda escribir si aún no lo es? Tengo acceso de root al sistema, pero no puedo acceder al sistema de archivos 'sin conexión', todos los cambios deben realizarse mediante comandos Bash.

Respuesta1

squashfses un sistema de archivos comprimido de sólo lectura. No tiene ninguna disposición para realizar modificaciones una vez creado. Por lo tanto, no se podría escribir en él incluso si se pudiera escribir en el dispositivo de bloque subyacente. Necesitarías crear una nueva imagen de squashfs de todo el sistema de archivos con tus modificaciones yquemaral dispositivo de almacenamiento donde se almacena ese sistema de archivos, lo que sería problemático de hacer desde el sistema en vivo.

Otra opción es montar un sistema de archivos diferente en /etc. Podría ser a través de un montaje de unión si lo admite el kernel, que fusiona dos sistemas de archivos, generalmente con un sistema de archivos que registra solo los cambios en unbaseSistema de archivos de sólo lectura.

Verifique la compatibilidad con AUFS_FS o OVERLAY_FS en la configuración del kernel.

Por ejemplo, para montar un directorio en unión /tmp(con suerte, se puede escribir aunque posiblemente esté tmpfsen la memoria (por lo que no es persistente durante un reinicio) en su caso si el sistema no tiene almacenamiento permanente de escritura)

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

Luego /etcse podrá escribir y las modificaciones que realice se almacenarán en formato /tmp/etc/upper.

Alternativamente, si solo desea modificar unos pocos archivos, puede vincularlos y montarlos (sí, puede montarlos en cualquier archivo, no solo en directorios) desde una versión almacenada en un sistema de archivos grabable:

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

Entonces /etc/passwdsería escribible. Por supuesto, también puedes hacerlo para todo el /etcmundo. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).

información relacionada