Nowa odpowiedź (2015-03-22)
( Uwaga: ta odpowiedź jest prostsza niż poprzednia, ale nie jest bezpieczniejsza. Moja pierwsza odpowiedź jest silniejsza, ponieważ można zachować pliki tylko do odczytu za pomocą opcji montowania fs przed flagami uprawnień. Więc zmuszanie do pisania plików bez uprawnień do zapisu nie będzie działać) w ogóle.)
Tak, pod Debianem znajduje się pakiet: fsprotect ( strona główna ).
Używa aufs
(domyślnie, ale może użyć innego unionfs
narzędzia), aby zezwolić na zmiany sesji na żywo, ale domyślnie w pamięci RAM, więc wszystko zostaje zapomniane przy ponownym uruchomieniu.
Możesz je zainstalować, uruchamiając po prostu:
apt-get install fsprotect
Po zakończeniu z dokumentu online:
Po tym:
- Edytuj
/boot/grub/menu.lst
lub /etc/default/grub2
lub /etc/lilo.conf
dodaj „ fsprotect=1G
” do parametrów jądra.
- Zmodyfikuj 1G zgodnie z potrzebami.
- Zastosuj zmiany (tj. Uruchom
update-grub
)
- Edytuj,
/etc/default/fsprotect
jeśli chcesz chronić systemy plików inne niż /
.
- restart
Możesz także zabezpieczyć hasłem program ładujący gruba lub zabronić jakichkolwiek zmian w nim.
Stamtąd, jeśli jakiś plik jest chroniony przed zmianami, na przykład przez
chmod ugo-w myfile
jeśli użyjesz próbki vi myfile
i spróbujesz napisać na niej za pomocą komendy :w!
, to zadziała i twoja myfile
zmieniona. Możesz uruchomić ponownie, aby odzyskać niezmodyfikowane myfile
.
Nie jest to nawet możliwe w przypadku mojego pierwszego pierwszego rozwiązania:
Stara (pierwsza) odpowiedź:
Tak, to silne rozwiązanie, ale potężne!
Uczynienie r / o użytecznym
Trzeba zamontować kilka katalogów w RW , jak /var
, /etc
a może /home
. Można to zrobić za pomocą aufs lub unionfs . Podoba mi się to w inny sposób , używając /dev/shm
i mount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Możesz wcześniej przenieść wszystkie katalogi, które nie muszą zmieniać się podczas normalnego działania static-var
, niż tworzyć dowiązania symboliczne w / var:
mkdir /static-var
mkdir /static-var/cache
mkdir /static-var/lib
mv /var/lib/dpkg /static-var/lib/dpkg
ln -s /static-var/lib/dpkg /var/lib/dpkg
mv /var/cache/apt /static-var/cache/apt
ln -s /static-var/cache/apt /var/cache/apt
... # an so on
Więc kiedy zamontowaniem w ro, kopiując /var
na /dev/shm
nie zajmie zbyt wiele miejsca, ponieważ większość pliki są przenoszone do /static-var
i tylko dowiązania mają być kopiowane do pamięci RAM.
Lepszym sposobem na zrobienie tego drobiazgowo jest wykonanie pełnego cyklu zasilania, jeden dzień pełnej pracy i dokładne wykonanie polecenia takiego jak:
find / -type f -o -type f -mtime -1
Zobaczysz więc, które pliki muszą znajdować się na partycji do odczytu i zapisu.
Logowanie
Ponieważ na tym hoście nie ma zapisywalnej pamięci statycznej, w celu przechowywania historii i innych dzienników należy skonfigurować zdalny syslog
serwer.
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
W ten sposób, jeśli system z jakiegoś powodu ulegnie awarii, wszystko przedtem jest rejestrowane.
Aktualizacja
Podczas uruchamiania z niektórymi mount --bind
w użyciu, w celu przeprowadzenia takiej aktualizacji, gdy system jest w użyciu (bez potrzeby uruchamiania init 1
, w celu skrócenia przestojów), najprostszym sposobem jest przebudowanie czystego katalogu głównego , który może wykonać aktualizację:
Po ponownym zamontowaniu „/” w trybie do odczytu i zapisu :
mount -o remount,rw /
for mpnt in /{,proc,sys,dev{,/pts}};do
mount --bind $mnpt /$mnt$mpnt;
done
chroot /mnt
apt-get update && apt-get dist-upgrade
exit
umount /mnt/{dev{/pts,},proc,sys,}
sync
mount -o remount,ro /
I teraz:
shutdown -r now
Mam tylko doświadczenie w korzystaniu z nowszej wersji (2014-02). W tej wersji możesz wyłączyć opcję „ponownie podłącz główny system plików do odczytu i zapisu duing boot” w pliku konfiguracyjnym za pomocą:
BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW nie jest ustawiony
Udało mi się stworzyć obraz, który po prostu używa swojej partycji ext4 / tylko do odczytu, więc odłączenie zasilania systemu w ogóle nie szkodzi. Działa świetnie, więc jeśli nie musisz pisać do systemu plików, być może jest to znacznie prostsze rozwiązanie niż wspomniane powyżej (które wydaje się mniej lub bardziej odpowiednie dla systemu Debian w odniesieniu do apt-get).
źródło
/etc/inittab
czy ma miejsce ponowny montaż/
. Jeśli tak, zmień to na swoje potrzeby.