คำตอบใหม่ (2015-03-22)
( หมายเหตุ:คำตอบนี้ง่ายกว่าก่อนหน้า แต่ไม่ปลอดภัยกว่าคำตอบแรกของฉันแข็งแกร่งเพราะคุณสามารถเก็บไฟล์แบบอ่านอย่างเดียวโดยตัวเลือกการเมานท์ fs ก่อนการตั้งค่าสถานะการอนุญาตดังนั้นการบังคับให้เขียนไฟล์โดยไม่ได้รับอนุญาต เลย)
ใช่ภายใต้Debianมีแพ็คเกจ: fsprotect ( โฮมเพจ )
มันใช้ aufs
(โดยค่าเริ่มต้น แต่สามารถใช้unionfs
เครื่องมืออื่น) เพื่ออนุญาตการเปลี่ยนแปลงเซสชันสดแต่ใน RAM โดยค่าเริ่มต้นดังนั้นทุกอย่างจะถูกลืมเมื่อรีบูต
คุณสามารถติดตั้งได้โดยการเรียกใช้เพียง:
apt-get install fsprotect
เมื่อเสร็จแล้วจากเอกสารออนไลน์:
หลังจากนั้น:
- แก้ไข
/boot/grub/menu.lst
หรือ/etc/default/grub2
หรือ/etc/lilo.conf
และเพิ่ม "fsprotect=1G
" ในพารามิเตอร์เคอร์เนล
- แก้ไข 1G ตามต้องการ
- ใช้การเปลี่ยนแปลง (เช่นเรียกใช้
update-grub
)
- แก้ไข
/etc/default/fsprotect
หากคุณต้องการปกป้องระบบไฟล์อื่นที่ไม่ใช่/
กว่า
- รีบูต
คุณอาจต้องการรหัสผ่านเพื่อป้องกัน bootloader grub หรือห้ามการเปลี่ยนแปลงใด ๆ
จากตรงนั้นหากไฟล์บางไฟล์ได้รับการปกป้องจากการเปลี่ยนแปลงตัวอย่างโดย
chmod ugo-w myfile
ถ้าคุณใช้สำหรับตัวอย่างvi myfile
และลองเขียนมันด้วยคำสั่ง:w!
สิ่งนี้จะได้ผลและคุณ myfile
ก็เปลี่ยนไป myfile
คุณอาจจะเริ่มต้นใหม่เพื่อดึงข้อมูลยังไม่แปร
นั่นเป็นไปไม่ได้ด้วยวิธีแก้ปัญหาแรกของฉันต่อไปนี้:
คำตอบเก่า (แรก):
ใช่มันเป็นทางออกที่แข็งแกร่ง แต่ทรงพลัง!
ทำให้ r / o ใช้ได้
คุณจะต้องติดบางไดเรกทอรีในRWเช่น/var
, และอาจจะ/etc
/home
ซึ่งอาจทำได้โดยใช้aufsหรือunionfs ฉันชอบวิธีนี้อีกวิธีหนึ่งโดยใช้/dev/shm
และmount --bind
:
cp -a /var /dev/shm/
mount --bind /dev/shm/var /var
ก่อนหน้านี้คุณสามารถย้ายไดเรกทอรีทั้งหมดที่ไม่มีการเปลี่ยนแปลงในการดำเนินการปกติในstatic-var
กว่าสร้าง symlink ใน / 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
ดังนั้นเมื่อ remounting ใน RO, การคัดลอก/var
ใน/dev/shm
จะไม่ใช้พื้นที่มากเกินไปเป็นไฟล์ส่วนใหญ่จะย้ายไป/static-var
และมีเพียง symlinks จะได้รับการคัดลอกในแกะ
วิธีที่ดีกว่าในการทำสิ่งนี้อย่างประณีตคือการสร้างวงจรพลังงานเต็มวันหนึ่งของการทำงานเต็มรูปแบบและเรียกใช้คำสั่งอย่างประณีต:
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