/etc schreibgeschützt machen

/etc schreibgeschützt machen

Ich arbeite mit einem eingebetteten Gerät, auf dem Linux läuft. Die Hersteller dieses Geräts haben es so eingerichtet, dass es das Root-Dateisystem schreibgeschützt lädt.

Aus /etc/mtab:

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

Dies bedeutet, dass ich keine Dateien in /etc ändern kann, um beispielsweise einen neuen Benutzer hinzuzufügen.

Ich habe versucht, das Stammverzeichnis erneut einzubinden:

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

aber ich bekomme nur eine Fehlermeldung

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

Ich habe diesen Fehler nachgeschlagen und die Leute sagten, ich solle Blockdev verwenden. Auf dem System ist Blockdev nicht installiert, also habe ich es plattformübergreifend kompiliert und kopiert. Dann habe ich ausgeführt

blockdev --setrw rootfs

aber ich habe wieder eine Fehlermeldung bekommen:

blockdev: cannot open rootfs: No such file or directory

Ist es möglich, /etc beschreibbar zu machen, wenn es das noch nicht ist? Ich habe Root-Zugriff auf das System, kann aber nicht „offline“ auf das Dateisystem zugreifen. Alle Änderungen müssen über Bash-Befehle vorgenommen werden.

Antwort1

squashfsist ein schreibgeschütztes komprimiertes Dateisystem. Es gibt keine Möglichkeit, Änderungen daran vorzunehmen, sobald es erstellt wurde. Sie könnten also nicht darauf schreiben, selbst wenn das zugrunde liegende Blockgerät beschreibbar gemacht werden könnte. Sie müssten ein neues Squashfs-Image des gesamten Dateisystems mit Ihren Änderungen erstellen undbrennenes auf das Speichergerät, auf dem dieses Dateisystem gespeichert ist, was vom Live-System aus problematisch wäre.

Eine weitere Möglichkeit besteht darin, ein anderes Dateisystem zu mounten /etc. Dies kann über einen Union-Mount erfolgen, sofern dieser vom Kernel unterstützt wird. Dabei werden zwei Dateisysteme zusammengeführt, wobei in der Regel ein Dateisystem nur die Änderungen an einem anderen aufzeichnet.BaseNur-Lese-Dateisystem.

Überprüfen Sie in der Kernelkonfiguration, ob AUFS_FS oder OVERLAY_FS unterstützt wird.

Zum Beispiel, um ein Verzeichnis per Union-Mount zu mounten /tmp(hoffentlich beschreibbar, aber möglicherweise tmpfsim Speicher (also nicht persistent nach einem Neustart), in Ihrem Fall, wenn das System keinen permanenten beschreibbaren Speicher hat)

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

Dann /etcist es beschreibbar und die Änderungen, die Sie daran vornehmen, werden tatsächlich darin gespeichert /tmp/etc/upper.

Wenn Sie nur einige wenige Dateien ändern möchten, können Sie diese alternativ per Bind-Mount (ja, Sie können jede Datei mounten, nicht nur Verzeichnisse) von einer Version aus, die in einem beschreibbaren Dateisystem gespeichert ist:

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

Dann /etc/passwdwäre beschreibbar. Natürlich können Sie das auch /etcstattdessen für das gesamte tun. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).

verwandte Informationen