Ustaw tylko do odczytu / etc do zapisu


11

Mam do czynienia z urządzeniem osadzonym z systemem Linux. Producenci tego urządzenia skonfigurowali go tak, aby ładował główny system plików tylko do odczytu.

Z / etc / mtab:

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

Oznacza to, że nie jestem w stanie zmodyfikować żadnych plików w / etc, takich jak dodanie nowego użytkownika.

Próbowałem ponownie zamontować katalog główny:

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

ale dostaję błąd

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

Sprawdziłem ten błąd i ludzie mówili, aby użyć blockdev. System nie ma zainstalowanego blockdev, więc skompilowałem go i skopiowałem. Potem pobiegłem

blockdev --setrw rootfs

ale znowu mam błąd:

blockdev: cannot open rootfs: No such file or directory

Czy jest możliwe, aby plik / etc był zapisywalny, jeśli jeszcze nie jest? Mam dostęp do systemu root, ale nie mogę uzyskać dostępu do systemu plików „offline”, wszystkie zmiany muszą być wykonane za pomocą poleceń Bash.

Odpowiedzi:


19

squashfsto skompresowany system plików tylko do odczytu. Po utworzeniu nie można go modyfikować. Nie można więc do niego pisać, nawet jeśli leżące u jego podstaw urządzenie blokowe może zostać zapisane. Będziesz musiał stworzyć nowy obraz squashfs całego systemu plików wraz ze swoimi modyfikacjami i wypalić go na urządzeniu pamięci masowej, w którym ten system plików jest przechowywany, co byłoby problematyczne z poziomu systemu na żywo.

Inną opcją jest zamontowanie innego systemu plików /etc. Może to odbywać się przez podłączenie unii, jeśli jest obsługiwane przez jądro, które łączy dwa systemy plików razem, zwykle z jednym systemem plików, rejestrującym tylko zmiany w podstawowym systemie plików tylko do odczytu.

Sprawdź wsparcie dla AUFS_FS lub OVERLAY_FS w konfiguracji jądra.

Na przykład, aby zamontować związek w katalogu /tmp(mam nadzieję, że można go zapisać tmpfsw pamięci, ale być może jest w pamięci (więc nie jest trwały po ponownym uruchomieniu) w twoim przypadku, jeśli system nie ma stałej pamięci do zapisu)

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

Wtedy /etcbędzie można zapisać, a modyfikacje, które wprowadzisz, zostaną faktycznie zapisane /tmp/etc/upper.

Alternatywnie, jeśli jest to tylko kilka plików, które chcesz zmodyfikować, możesz podłączyć je bindem (tak, możesz zamontować na dowolnym pliku, nie tylko katalogach) z wersji zapisanej w zapisywalnych systemach plików:

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

Wtedy /etc/passwdbyłby zapisywalny. Oczywiście możesz to zrobić dla całości /etczamiast tego. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).


Niektóre systemy osadzone mogą nadpisywać pliki /etcpodczas uruchamiania w oparciu o określone ustawienia w nvram. Tak więc, aby zmienić plik /etc, należy ustawić „magiczną” zmienną systemową, zatwierdzić ją w nvram, a następnie ponownie załadować konfigurację lub uruchomić ponownie. Zdecydowana większość domowych routerów działa w ten sposób. Ale dokładne mechanizmy i polecenia są specyficzne dla systemu.
Satō Katsura,

Doskonały! Urządzenie nie obsługuje montowania nakładek, ale wiązanie niestandardowych plików nad plikami w / etc działało bardzo dobrze! Dzięki za pomoc.
Joshua Walsh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.