Нова відповідь (22.03.2015)
( Примітка. Ця відповідь простіша за попередню, але не більш безпечна. Перша моя відповідь сильніша, тому що ви можете тримати файли, доступні лише для читання, за допомогою параметрів монтажу fs перед прапорцями дозволу. Тому змушувати писати файли без дозволу на запис не вийде. зовсім.)
Так, під Debian є пакет: fsprotect ( домашня сторінка ).
Він використовує aufs(за замовчуванням, але може використовувати інший unionfsінструмент) для дозволу змін в прямому сеансі, але в оперативній пам’яті за замовчуванням, тому все забувається при перезавантаженні.
Ви можете встановити їх, запустивши просто:
apt-get install fsprotect
Після закінчення роботи з веб-документа:
Після того:
- Відредагуйте
/boot/grub/menu.lstабо /etc/default/grub2або /etc/lilo.confдодайте " fsprotect=1G" параметри ядра.
- Змініть 1G за потребою.
- Застосувати зміни (тобто виконати
update-grub)
- Відредагуйте,
/etc/default/fsprotectякщо ви хочете захистити інші файлові системи /.
- перезавантажити
Ви також можете захистити паролем завантажувач завантаження паролем або заборонити будь-які його зміни.
Звідти, якщо якийсь файл захищений від змін, зразок від
chmod ugo-w myfile
якщо ви використовуєте для зразка vi myfileі намагаєтеся написати на ньому команду :w!, це буде працювати, і ваш myfileзмінився. Ви можете перезавантажити, щоб отримати немодифіковані myfile.
Це неможливо навіть із моїм наступним рішенням:
Стара (перша) відповідь:
Так, це сильне рішення, але потужне!
Робимо корисність
Ви повинні монтувати деякі каталоги в rw , як /var, /etcа може , і /home. Це можна зробити за допомогою aufs або unionfs . Мені подобається інший спосіб , використовуючи /dev/shmта mount --bind:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
Ви могли раніше перенести всі каталоги, які не повинні змінювати нормальну роботу в a static-var, ніж створювати посилання в / 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
Таким чином, при повторному перезавантаженні в ро, копіювання /varв /dev/shmне займе занадто багато місця, оскільки більшість файлів переміщені, /static-varа в оперативні пам’яті потрібно копіювати лише символьні посилання.
Кращий спосіб зробити це тонко - це зробити повний цикл живлення, один день повного робочого дня і тонко виконати команду на зразок:
find / -type f -o -type f -mtime -1
Так ви побачите, які файли потрібно розмістити на розділі для читання-запису.
Ведення журналів
Оскільки в цьому хості немає статичної пам’яті, що записується, для того, щоб зберігати історію та інші журнали, ви повинні налаштувати віддалений syslogсервер.
echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain'
Таким чином, якщо ваша система зламається з будь-якої причини, все раніше реєструється.
Модернізація
Під час запуску тих, хто mount --bindвикористовується, для такого оновлення під час використання системи (без необхідності запуску init 1, скорочення часу роботи), більш простим способом є відновлення чистого кореня , здатного здійснити оновлення:
Після повторної перестановки "/" у режимі читання-запису :
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 /
І зараз:
shutdown -r now