Нова відповідь (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