Haga que solo lectura / etc se pueda escribir

11

Estoy tratando con un dispositivo integrado que ejecuta Linux. Los fabricantes de este dispositivo lo tienen 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 agregar un nuevo usuario.

He intentado volver a montar el directorio raíz:

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

pero acabo de recibir 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 instalado blockdev, 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 / etc escribible si aún no lo es? Tengo acceso de raíz al sistema, pero no puedo acceder al sistema de archivos 'fuera de línea', todos los cambios tienen que hacerse a través de comandos Bash.

Joshua Walsh
fuente

Respuestas:

19

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

Otra opción es montar un sistema de archivos diferente /etc. Podría ser a través de un montaje de unión si es compatible con el núcleo, que combina dos sistemas de archivos juntos, generalmente con un sistema de archivos que registra solo los cambios en un sistema de archivos base de solo lectura.

Verifique el soporte para AUFS_FS u OVERLAY_FS en la configuración del kernel.

Por ejemplo, para montar un directorio en la unión /tmp(es de esperar que se pueda escribir aunque posiblemente tmpfsesté en la memoria (por lo que no es persistente durante un reinicio) en su caso si el sistema no tiene almacenamiento de escritura 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

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

Alternativamente, si solo desea modificar algunos archivos, puede enlazarlos (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 hacer eso por completo /etc. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc)

Stéphane Chazelas
fuente
Algunos sistemas integrados pueden anular archivos en /etcel momento del arranque en función de cierta configuración en nvram. Por lo tanto, para cambiar un archivo /etc, debe establecer una variable de sistema "mágica", confirmarla en nvram, luego volver a cargar la configuración o reiniciar. La gran mayoría de los enrutadores domésticos funcionan así. Pero los mecanismos y comandos exactos son específicos del sistema.
Satō Katsura
¡Perfecto! ¡El dispositivo no admite montajes de superposición, pero el enlace de archivos personalizados sobre archivos en / etc funcionó muy bien! Gracias por tu ayuda.
Joshua Walsh