新答案(2015-03-22)
(注意:这个答案比以前的答案更简单,但并不安全。我的第一个答案更强,因为您可以在权限标志之前通过fs挂载选项将文件保持只读状态。因此,强制进行未经许可的文件写入将不起作用完全没有。)
是的,在Debian下,有一个软件包:fsprotect(homepage)。
它使用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
如果要保护以外的文件系统,请进行编辑/
。
- 重启
您可能还想用密码保护grub引导加载程序或禁止对其进行任何更改。
从那里开始,如果某些文件受到保护以防更改,请通过以下方式进行采样
chmod ugo-w myfile
如果您使用示例vi myfile
并尝试使用command编写示例,那么: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
,而不是在/ 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
因此,在RO重新安装时,复制/var
在/dev/shm
大多数文件移动到不会占用太多空间/static-var
,只有符号连接在RAM中被复制。
更好地执行此操作的更好方法是执行一个完整的电源循环,一天完成全部工作,并精细地运行以下命令:
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