我正在考虑使用git将我的整个linux服务器置于版本控制下。其背后的原因是,这可能是检测恶意修改/ rootkit的最简单方法。我天真的认为检查系统完整性是必要的:每周大约使用救援系统挂载linux分区,检查git存储库是否仍未调温,然后发出git status来检测对系统所做的任何更改。
除了明显浪费磁盘空间外,还有其他负面影响吗?
这是一个完全疯狂的主意吗?
因为我最有可能必须至少排除/ dev和/ proc,所以它甚至是一种安全的检查rootkit的方法吗?
我正在考虑使用git将我的整个linux服务器置于版本控制下。其背后的原因是,这可能是检测恶意修改/ rootkit的最简单方法。我天真的认为检查系统完整性是必要的:每周大约使用救援系统挂载linux分区,检查git存储库是否仍未调温,然后发出git status来检测对系统所做的任何更改。
除了明显浪费磁盘空间外,还有其他负面影响吗?
这是一个完全疯狂的主意吗?
因为我最有可能必须至少排除/ dev和/ proc,所以它甚至是一种安全的检查rootkit的方法吗?
Answers:
那是一个“坏主意”(tm)。除了其他方面,您的存储库将运行缓慢,并且由于保留每个修订版本而变得更糟。
尝试使用集中管理,例如puppet / cfengine / chef。这样可以保持您的预期,并还原意外的更改。
将其与iwatch之类的东西结合使用,以获取未经授权的文件更改的电子邮件。
如果需要推出自定义应用程序,可将其与rpm / deb文件进一步结合。
时不时投掷rkhunter或chkrootkit之类的东西,然后踢,你应该很好。
任务完成。
另一种选择是设置tripwire,这是GPL的软件,它可以遍历系统上的所有重要文件,并确定哪些已按照您认为不可接受的方式进行了更改。可以将更改定义为简单的mtime,即通过inode编号一直到加密强度高的校验和。
如果您不想每晚都收到大量有关中的已更改文件/var/run
,DHCP客户端文件中的更改的报告,则需要进行一些设置和调整。/etc
,但是如果您遇到麻烦,可能是确实非常有帮助。
文件属性数据库使用机器不知道的密钥签名,这有助于您确定没有工具恶意更改数据库或Tripwire二进制文件。为了完全确定,您可以将Tripwire工具和数据库的副本刻录到只读介质上,该介质可以安装在服务器上并用于验证自光盘刻录以来的所有更改(如果需要进行完整的法医分析)。
如果要执行此操作,则在将机器部署到生产环境中之前,请先设置并运行tripwire,这一点非常重要,否则,您将无法完全确定某些恶意用户没有机会在感染机器之前对其进行感染被绊倒了。
我认为这不太可能,但是作为一个实验,我想看看如果只使用/ etc文件夹会发生什么。那就是保存大多数配置信息的地方。
@Sirex已经提供了一个很好的答案,但是如果您想进一步提高安全性,最好的解决方法是先预防再检测。
尝试将系统安装为/ filesystem只读。使/ tmp成为带有noexec,nodev选项安装的单独ramfs。为了使系统正常工作,您实际上只需要以读写方式挂载/ var。因此,在/ var下使用rw,noexec,nodev挂载一个fs并删除对/ var / tmp的写许可权(afaik,守护程序很少需要它,并且它应该是可配置的)。还可以为内核使用一个安全补丁,以进一步限制用户对资源的访问,例如,尝试使用grsec。使用具有最严格限制规则的防火墙。
一些发行版提供了有关系统加固的大量文档。例如:
对于只想让整个文件系统中的某些文件夹受版本控制感兴趣的情况,以下方法可能会起作用:
首先,在该/
级别创建一个Git存储库:
$ cd /
# git init
然后创建一个/.gitignore
仅将某些文件夹列入白名单的,例如,仅将其列入白名单/path/to/versioned/config/folder/
(基于/programming//a/11018557/320594):
/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore
然后创建第一个提交:
# git add -A
# git commit -m "Initial commit"
然后,根据需要在版本控制下添加所需的其他文件夹。
PS:
除了先前的方法外,如果您需要将/ etc /置于版本控制之下,则您可能更喜欢使用etckeeper
(https://etckeeper.branchable.com/)对该特定文件夹进行版本控制,因为它专门用于该目的(例如,它会在安装软件包后自动提交)。