Rendi leggibile / etc scrivibile


11

Ho a che fare con un dispositivo incorporato che esegue Linux. I produttori di questo dispositivo lo hanno impostato in modo tale da caricare il filesystem di root in sola lettura.

Da / etc / mtab:

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

Ciò significa che non sono in grado di modificare alcun file all'interno di / etc, ad esempio per aggiungere un nuovo utente.

Ho provato a rimontare la directory principale:

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

ma ho appena ricevuto un errore

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

Ho cercato questo errore e la gente diceva di usare blockdev. Il sistema non ha Blockdev installato, quindi l'ho compilato e copiato. Poi ho corso

blockdev --setrw rootfs

ma ancora ho ricevuto un errore:

blockdev: cannot open rootfs: No such file or directory

È possibile rendere / etc scrivibile se non lo è già? Ho accesso root al sistema, ma non riesco ad accedere al filesystem 'offline', tutte le modifiche devono essere fatte tramite i comandi Bash.

Risposte:


19

squashfsè un file system compresso di sola lettura. Non ha alcuna disposizione per modificarlo una volta che è stato creato. Quindi non è possibile scrivere su di esso anche se il dispositivo a blocchi sottostante potrebbe essere reso scrivibile. Dovresti creare una nuova immagine squashfs dell'intero filesystem con le tue modifiche e masterizzarla sul dispositivo di archiviazione in cui è archiviato quel file system, il che sarebbe problematico da fare dal sistema live.

Un'altra opzione è montare un file system diverso /etc. Potrebbe essere tramite un mount sindacale se supportato dal kernel, che unisce due file system in genere con un file system che registra solo le modifiche a un file system di sola lettura di base .

Verificare il supporto per AUFS_FS o OVERLAY_FS nella configurazione del kernel.

Ad esempio per montare una directory in una directory /tmp(si spera scrivibile anche se possibilmente tmpfsin memoria (quindi non persistente attraverso un riavvio) nel tuo caso se il sistema non ha memoria permanente scrivibile)

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

Quindi /etcsarà scrivibile e le modifiche apportate verranno effettivamente archiviate /tmp/etc/upper.

In alternativa, se si desidera modificare solo alcuni file, è possibile associarli (sì, è possibile montare su qualsiasi file, non solo directory) da una versione memorizzata in un file system scrivibile:

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

Quindi /etc/passwdsarebbe scrivibile. Ovviamente puoi anche farlo per tutto il resto /etc. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).


Alcuni sistemi incorporati possono sovrascrivere i file /etcall'avvio in base a determinate impostazioni in nvram. Pertanto, per modificare un file in /etcdevi impostare una variabile di sistema "magica", eseguirne il commit in nvram, quindi ricaricare la configurazione o riavviare. La stragrande maggioranza dei router domestici funziona così. Ma i meccanismi e i comandi esatti sono specifici del sistema.
Satō Katsura,

Perfetto! Il dispositivo non supporta i montaggi overlay, ma il collegamento di file personalizzati su file in / etc ha funzionato molto bene! Grazie per l'aiuto.
Joshua Walsh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.