将整个linux服务器置于源代码管理(git)下


17

我正在考虑使用git将我的整个linux服务器置于版本控制下。其背后的原因是,这可能是检测恶意修改/ rootkit的最简单方法。我天真的认为检查系统完整性是必要的:每周大约使用救援系统挂载linux分区,检查git存储库是否仍未调温,然后发出git status来检测对系统所做的任何更改。

除了明显浪费磁盘空间外,还有其他负面影响吗?

这是一个完全疯狂的主意吗?

因为我最有可能必须至少排除/ dev和/ proc,所以它甚至是一种安全的检查rootkit的方法吗?


5
我会投票赞成“一个完全疯狂的主意”,这有太多的含义。对文件的更改将始终存在,并且将使升级过程成为一场噩梦。
forcefsck

@forcefsck-为什么文件更改始终出现?它们不应该只是在系统升级期间发生吗?
Tobias Hertkorn 2011年

1
只是想一想,为什么不将苦恼或rsync之类的内容与--link-dest一起使用?如果您使用Dirvish进行备份,它将为每个备份提供一个不错的报告,其中显示了更改之处。您可以在--dry-run模式下进行rsync,以将当前状态与备份进行比较。如果您使用Dirvish,则将使用经过充分测试的工具作为备份系统。
Zoredache

Answers:


16

那是一个“坏主意”(tm)。除了其他方面,您的存储库将运行缓慢,并且由于保留每个修订版本而变得更糟。

尝试使用集中管理,例如puppet / cfengine / chef。这样可以保持您的预期,并还原意外的更改。

将其与iwatch之类的东西结合使用,以获取未经授权的文件更改的电子邮件。

如果需要推出自定义应用程序,可将其与rpm / deb文件进一步结合。

时不时投掷rkhunter或chkrootkit之类的东西,然后踢,你应该很好。

任务完成。


+1是坏主意-集中管理(puppet / cfengine / chef / radmind / etc。)将使您能够确保根据定义的要求配置系统,并且大多数情况下还可以用作“绊线”键入系统,告诉您什么时候不应该进行的更改。
voretaq7 2011年

我认为这确实是一个坏主意。好的,您可以看到哪些文件是新文件和已更改文件。但是,如果您运行git,则需要大量的CPU来解压缩并计算文件。如果对整个mashine进行此操作,则将花费大量时间。
勒内Höhle

1
我再把一个扔在那张桌子上。etckeeper将执行git repo,仅/ etc除外。
Shane Madden

像git这样的存储库速度非常快。而且我也不担心CPU或IO,因为我想到的服务器已安排了停机时间(因此可以使用救援系统进行安装)
Tobias Hertkorn 2011年

我不明白的是:集中管理系统如何确保没有误报-系统受到损害+用于检查系统的工具受到损害=误报
Tobias Hertkorn 2011年

5

另一种选择是设置tripwire,这是GPL的软件,它可以遍历系统上的所有重要文件,并确定哪些已按照您认为不可接受的方式进行了更改。可以将更改定义为简单的mtime,即通过inode编号一直到加密强度高的校验和。

如果您不想每晚都收到大量有关中的已更改文件/var/run,DHCP客户端文件中的更改的报告,则需要进行一些设置和调整。/etc,但是如果您遇到麻烦,可能是确实非常有帮助。

文件属性数据库使用机器知道的密钥签名,这有助于您确定没有工具恶意更改数据库或Tripwire二进制文件。为了完全确定,您可以将Tripwire工具和数据库的副本刻录到只读介质上,该介质可以安装在服务器上并用于验证自光盘刻录以来的所有更改(如果需要进行完整的法医分析)。

如果要执行此操作,则在将机器部署到生产环境中之前,请先设置并运行tripwire,这一点非常重要,否则,您将无法完全确定某些恶意用户没有机会在感染机器之前对其进行感染被绊倒了。



2

@Sirex已经提供了一个很好的答案,但是如果您想进一步提高安全性,最好的解决方法是先预防再检测。

尝试将系统安装为/ filesystem只读。使/ tmp成为带有noexec,nodev选项安装的单独ramfs。为了使系统正常工作,您实际上只需要以读写方式挂载/ var。因此,在/ var下使用rw,noexec,nodev挂载一个fs并删除对/ var / tmp的写许可权(afaik,守护程序很少需要它,并且它应该是可配置的)。还可以为内核使用一个安全补丁,以进一步限制用户对资源的访问,例如,尝试使用grsec。使用具有最严格限制规则的防火墙。

一些发行版提供了有关系统加固的大量文档。例如:


0

我认为分析工具在您的系统中所做的更改是一个好主意:

  1. 在VM中安装裸机Linux
  2. 初始化根git
  3. 安装您要分析的工具
  4. 查看系统中进行的所有更改

...删除虚拟机

您将不得不向.gitignore proc中添加很多文件夹,例如proc等。


0

对于只想让整个文件系统中的某些文件夹受版本控制感兴趣的情况,以下方法可能会起作用:

首先,在该/级别创建一个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 /置于版本控制之下,则您可能更喜欢使用etckeeperhttps://etckeeper.branchable.com/)对该特定文件夹进行版本控制,因为它专门用于该目的(例如,它会在安装软件包后自动提交)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.