如何禁止非 root 用户更改文件修改时间

如何禁止非 root 用户更改文件修改时间

我不希望任何人创建文件然后将创建日期更改为向后日期(例如使用触摸或系统调用)。

在我的 Ubuntu 托管帐户中,我收到了许多被黑客入侵的 php 代码。

禁止他们在文件落地时更改文件时间将帮助我轻松找到新文件。

有什么方法可以实现呢?我在任何地方都找不到答案!

答案1

据我所知,没有办法限制用户更改文件的修改时间。更改修改时间是一项正常功能,例如从存档中提取文件或从另一台计算机复制文件时使用。

不要查看修改时间,而是查看 inode 更改时间(ctime)。传递选项-cls列出 ctime 而不是 mtime。

列出 ctime 可让您检测最近修改或移动了哪些文件。当然,它可能会出现误报。如果攻击者拥有 root 访问权限,则所有赌注都会失败。

这对于取证比修复更有用。只有最基本的攻击可以通过简单的修复来应对,例如删除明显受感染的文件:通常有比您能找到的更多的东西。如果您检测到攻击:

  1. 使系统脱机。复印一份。
  2. 重新安装整个系统已知的良好来源。不要重复使用受感染系统中的任何内容:你不能信任它。确保安装所有软件的最新版本,没有已知的安全漏洞。
  3. 从以下位置恢复您的数据已知良好的备份。同样,您不能信任受感染系统生成的数据。
  4. 研究受感染系统的副本,找出攻击者是如何进入的。请注意,攻击者进入的方式(漏洞)与攻击者后来所做的(有效负载)有很大不同。您需要找出根本原因,而不是症状。这部分可能需要专业人员。
  5. 一旦确定根本原因不再存在(错误配置或安全错误已修复),即可使新系统上线。

答案2

您可以通过使用配置文件中的选项mtime禁用这些 PHP 函数(例如touch),防止黑客使用 PHP 代码更改 Web 服务器可写文件的修改时间 ( )。[disable_functions][1]php.ini

然而,跟踪修改时间并不是正确的方法,因为文件的修改时间在上传到您的服务器时不会改变(即这个时间可能比您的系统被破坏的时间早得多)。更好的方法是跟踪ctimeinode 文件的状态更改时间 ( )。为了证明我的意思:

$ touch test.txt
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-28 05:51:10.329081380 +0000
Modify: 2014-10-28 05:51:10.329081380 +0000
Change: 2014-10-28 05:51:10.329081380 +0000

$ touch -t 10011234 test.txt 
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-01 12:34:00.000000000 +0000
Modify: 2014-10-01 12:34:00.000000000 +0000
Change: 2014-10-28 05:52:57.669657564 +0000 <= unadulterated by touch

如果没有root权限,我认为修改是完全不可能的ctime

相关内容