Machen Sie schreibgeschützt / etc beschreibbar

11

Ich habe es mit einem eingebetteten Gerät zu tun, auf dem Linux ausgeführt wird. 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, z. B. um einen neuen Benutzer hinzuzufügen.

Ich habe versucht, das Stammverzeichnis erneut bereitzustellen:

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

aber ich bekomme nur einen Fehler

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

Ich habe diesen Fehler nachgeschlagen und die Leute sagten, sie sollten blockdev verwenden. Auf dem System ist blockdev nicht installiert, daher habe ich es übergreifend kompiliert und kopiert. Dann rannte ich

blockdev --setrw rootfs

aber wieder habe ich einen Fehler bekommen:

blockdev: cannot open rootfs: No such file or directory

Ist es möglich, / etc beschreibbar zu machen, wenn es nicht bereits geschehen 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.

Joshua Walsh
quelle

Antworten:

19

squashfsist ein schreibgeschütztes komprimiertes Dateisystem. Es ist nicht vorgesehen, Ä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 mit Ihren Änderungen ein neues Squashfs-Image des gesamten Dateisystems erstellen und es auf das Speichergerät brennen , auf dem das Dateisystem gespeichert ist, was vom Live-System aus problematisch wäre.

Eine andere Möglichkeit besteht darin, ein anderes Dateisystem zu mounten /etc. Dies kann über einen Union Mount erfolgen, wenn dies vom Kernel unterstützt wird, der zwei Dateisysteme zusammenführt, normalerweise mit einem Dateisystem, das nur die Änderungen an einem schreibgeschützten Basisdateisystem aufzeichnet .

Überprüfen Sie die Kernelkonfiguration auf Unterstützung für AUFS_FS oder OVERLAY_FS.

Zum Beispiel, um ein Verzeichnis in Union zu mounten /tmp(hoffentlich beschreibbar, aber möglicherweise tmpfsim Speicher (also nicht dauerhaft bei 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 Änderungen, die Sie daran vornehmen, werden tatsächlich in gespeichert /tmp/etc/upper.

Wenn Sie nur einige wenige Dateien ändern möchten, können Sie sie alternativ aus einer in einem beschreibbaren Dateisystem gespeicherten Version binden und bereitstellen (ja, Sie können sie in jede Datei einbinden, nicht nur in Verzeichnisse):

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

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

Stéphane Chazelas
quelle
Einige eingebettete Systeme können Dateien /etcbeim Booten basierend auf bestimmten Einstellungen in nvram überschreiben. /etcUm eine Datei in zu ändern, müssen Sie eine "magische" Systemvariable festlegen, diese in nvram festschreiben und dann die Konfiguration neu laden oder neu starten. Die überwiegende Mehrheit der Heimrouter funktioniert so. Die genauen Mechanismen und Befehle sind jedoch systemspezifisch.
Satō Katsura
Perfekt! Das Gerät unterstützt keine Overlay-Mounts, aber das Binden von benutzerdefinierten Dateien über Dateien in / etc hat sehr gut funktioniert! Danke für Ihre Hilfe.
Joshua Walsh