我已经了解 faketime 和 datefudge,但是有没有办法为以特定用户(由特定 UID 标识)运行的任何进程透明地设置它们?
答案1
由于您拥有 Linux 的完整源代码,因此能按照你的需要进行设置,但你必须修改系统内核并重建它才能实现这一点。简单的根据 UID 进行设置。
如果您只想让登录用户在执行大多数命令时都具有此属性,请为他们提供一个登录 shell,用于faketime
设置环境变量,然后调用他们的真实 shell。您可以通过交互方式来体验一下这种做法:
$ date
Mon Oct 14 14:02:05 EDT 2013
$ faketime yesterday bash
$ date
Sun Oct 13 14:02:10 EDT 2013
$ exit
$ date
Mon Oct 14 14:02:15 EDT 2013
特殊的登录 shell 也应该适用于cron
使用用户登录 shell 的作业。
当然,对于任何设置或忽略其自身$LD_PRELOAD
信息的程序来说,这种伪造都会失败:
$ faketime yesterday bash
$ date
Sun Oct 13 14:02:20 EDT 2013
$ env -i /bin/date
Mon Oct 14 14:02:25 EDT 2013