Jawaban baru (2015-03-22)
( Catatan: Jawaban ini lebih sederhana dari sebelumnya, tetapi tidak lebih aman. Jawaban pertama saya lebih kuat karena Anda dapat menyimpan file hanya-baca oleh opsi pemasangan fs sebelum flag izin. Jadi memaksa untuk menulis file tanpa izin untuk menulis tidak akan berfungsi sama sekali.)
Ya, di bawah Debian , ada paket: fsprotect ( beranda ).
Ini menggunakan aufs
(secara default, tetapi bisa menggunakan unionfs
alat lain ) untuk mengizinkan perubahan sesi langsung tetapi dalam RAM secara default, jadi semuanya dilupakan saat reboot.
Anda dapat menginstalnya dengan menjalankan:
apt-get install fsprotect
Setelah selesai, dari dokumen online:
Setelah itu:
- Edit
/boot/grub/menu.lst
atau /etc/default/grub2
atau /etc/lilo.conf
dan tambahkan " fsprotect=1G
" ke parameter kernel.
- Ubah 1G sesuai kebutuhan.
- Terapkan perubahan (mis. Jalankan
update-grub
)
- Edit
/etc/default/fsprotect
jika Anda ingin melindungi filesystem selain /
.
- reboot
Anda mungkin juga ingin melindungi kata sandi bootloader grub atau melarang perubahan apa pun.
Dari sana, jika beberapa file dilindungi terhadap perubahan, untuk sampel oleh
chmod ugo-w myfile
jika Anda menggunakan untuk sampel vi myfile
dan mencoba untuk menulis di atasnya dengan perintah :w!
, ini akan berhasil dan Anda myfile
menjadi berubah. Anda dapat memulai ulang untuk mengambil yang belum dimodifikasi myfile
.
Itu bahkan tidak mungkin dengan solusi pertama saya berikut:
Jawaban lama (pertama):
Ya, ini adalah solusi yang kuat, tetapi kuat!
Membuat r / o bisa digunakan
Anda harus memasang beberapa direktori di rw , like /var
, /etc
dan mungkin /home
. Ini bisa dilakukan dengan menggunakan aufs atau unionfs . Saya suka ini dengan cara lain , menggunakan /dev/shm
dan mount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Anda bisa sebelumnya, pindahkan semua direktori yang tidak harus berubah dalam operasi normal di static-var
, daripada membuat symlink di / 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
Jadi ketika remounting di ro, menyalin /var
di /dev/shm
tidak akan memakan banyak ruang karena sebagian besar file dipindahkan ke /static-var
dan hanya symlink yang akan disalin dalam ram.
Cara yang lebih baik untuk melakukan ini dengan baik adalah membuat siklus daya penuh, satu hari kerja penuh dan menjalankan perintah seperti:
find / -type f -o -type f -mtime -1
Jadi Anda akan melihat file mana yang perlu ditempatkan di partisi baca-tulis.
Penebangan
Karena di host ini tidak ada memori statis yang dapat ditulisi, untuk menyimpan histori dan log lainnya, Anda harus mengkonfigurasi syslog
server jarak jauh .
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
Dengan cara ini, jika sistem Anda rusak karena alasan apa pun, semua yang sebelumnya dicatat.
Perbaikan
Ketika menjalankan dengan beberapa yang mount --bind
sedang digunakan, untuk melakukan upgrade seperti itu ketika sistem sedang digunakan (tanpa perlu menjalankan init 1
, untuk mengurangi down-time), cara sederhana adalah dengan membangun kembali root bersih , dapat melakukan upgrade:
Setelah mengount ulang '/' dalam mode baca-tulis :
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 /
Dan sekarang:
shutdown -r now
Saya hanya punya pengalaman menggunakan buildroot yang lebih baru (2014-02). Dalam versi itu Anda dapat menonaktifkan 'remount root filesystem boot baca-tulis duing' dalam file konfigurasi dengan:
BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW tidak disetel
Saya berhasil membuat gambar yang hanya menggunakan ext4 / partisi sebagai hanya membaca sehingga mencabut kekuatan sistem tidak ada salahnya sama sekali. Ini berfungsi dengan baik, jadi jika Anda tidak perlu menulis ke sistem file Anda, mungkin ini adalah solusi yang jauh lebih sederhana daripada yang disebutkan di atas (yang tampaknya lebih atau kurang berlaku untuk sistem Debian karena mengacu pada apt-get).
sumber
/etc/inittab
apakah remounting/
terjadi di sana. Jika demikian, ubah sesuai kebutuhan Anda.