是否可以在 Linux 中仅更改特定用户(非 root)的日期?
如果可以的话,该怎么做?
如果有人能指出这样做的影响,那就太好了。
编辑
换句话说,我的问题是这样的。
我想在没有 root 权限的情况下将 Linux 中的日期和时间从现在更改为另一天和时间。我怎样才能实现这一点?
答案1
日期是一个系统范围的参数,对系统(而不是用户)至关重要。它出现在文件系统时间戳、日志记录、守护进程操作、调度等方面。如果日期不准确,许多程序会破坏甚至可能损坏您的系统。因此,从这个意义上说,时间必须不断增加和纠正,不仅在本地,而且如果完成了任何非 www 网络,也在全球范围内。如果客户端和服务器之间的时间差太大,甚至证书也会停止工作。
因此从这个意义上说,系统日期/时间只是一个 - 实际日期/时间(最好是 UTC,否则当您切换时区时,您的笔记本电脑的文件系统可能会损坏)。
另一方面,时区设置只是从 UTC 到呈现给用户的日期时间的转换层。这是可以改变的(参见 X Tian 的评论)。但我不知道这是否是你想要的 - 它只能设置一个整数(有时是整数的分数)小时数,永远不会超过一天。从技术上讲,构建自定义时区来引发任意延迟是可行的,但这是一个丑陋的黑客行为。
所有基本的时间操作仍然涉及 unix 时间(从 1970 年 1 月 1 日开始统一计时的整数),因此区域设置(时区和其他内容)通常仅用于时间的可视显示,或脚本中的一些非常特定的用途依赖此功能。例如,date
调用clock_gettime
函数检索系统时间,然后调用localtime
转换为当前区域设置。内部表示始终是系统时间。
可能有特殊的内核模块可以做到这一点 - 或替换库。您可以创建一个具有改编clock_gettime
功能的损坏库,并使其对一个用户可见。我不知道这会如何影响您的系统。文件系统操作和类似的事情仍然由内核处理,因此基本功能可以工作。但是,调度、备份设施和 makefile 可能无法正常工作。
编辑:也许您想要的是虚拟机。那会更加孤立,如果你想改变时间,你可以。有时,它对于规避时间触发的软件故障很有用。
答案2
您可以在其配置文件中或专门针对这些用户的通用配置文件中设置他们的 TZ 环境变量。
$ date
Fri Mar 21 10:11:15 GMT 2014
$ export TZ="PST+8"
$ date
Fri Mar 21 02:11:53 PST 2014
TZ 的最大值为 24 小时
答案3
只有少数系统调用获取日期/时间,因此您可以放置一个预加载库来根据您想要执行的操作更改从这些调用返回的值(从问题中仍然有些不清楚) 。当千年虫测试达到顶峰时,这是一个常见的伎俩。
好像https://github.com/wolfcw/libfaketime可能会做你想做的事,但如果没有,你自己做也很简单。