所有服务器必须统一使用UTC时区,以消除时间歧义、保障审计可追溯性并满足等保/GDPR/PCI-DSS合规要求;需执行timedatectl set-timezone UTC、timedatectl set-local-rtc false,并验证timedatectl status中Time zone为UTC且RTC in local TZ为no。

所有服务器必须统一使用 UTC 作为系统基准时区,不是为了“显示方便”,而是为消除跨时区时间歧义、保障审计可追溯性、满足等保/GDPR/PCI-DSS 合规要求。
统一系统时钟基准:强制设为 UTC
- 运行
sudo timedatectl set-timezone UTC,避免软链接误配(如 /etc/localtime 指向 Asia/Shanghai) - 确认硬件时钟也按 UTC 解释:
sudo timedatectl set-local-rtc false(默认即为 false,但必须验证) - 执行
timedatectl status,检查输出中同时满足:
• Time zone: UTC
• RTC in local TZ: no
这样date、journalctl、auditd等所有原生日志均以 UTC 打戳,无需额外转换
认证日志(auth.log / secure / auditd)必须显式带时区标识
- auditd 默认记录内核时间(已为 UTC),但解析工具易误判为本地时间。关键动作是强制输出 ISO 8601 格式:
• 查询时用ausearch --format iso(自动附加+0000)
• 若接入 ELK/Splunk,应在采集层(如 Filebeat 或 rsyslog)添加时区字段,而非修改系统时钟 - 对于 rsyslog 管理的
/var/log/auth.log或/var/log/secure:
• 在/etc/rsyslog.d/50-default.conf中启用精确时间模板,例如:$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat→ 改为RSYSLOG_FileFormat(含微秒与 UTC 偏移)
• 或在日志规则中显式插入$!timestamp+0000字段
应用与数据库不参与时区决策,只做单向转换
- 后端 API、业务逻辑、定时任务一律使用 UTC 时间戳(如
"2026-05-06T18:22:00Z")传输和存储 - 禁止在 PHP/Python/Java 中调用
date_default_timezone_set("Asia/Shanghai")类硬编码时区设置 - 数据库层面:
• MySQL:用DATETIME存 UTC 值,连接层SET time_zone = '+00:00'
• PostgreSQL:用TIMESTAMP WITH TIME ZONE,并确保timezone = 'UTC'在 postgresql.conf 中生效
• SQL Server:event_time字段原生为 UTC,查询时勿用GETDATE()替代GETUTCDATE()
时间同步服务必须稳定且可监控
- 优先部署
chrony(非 ntpd),因其收敛快、适应虚拟化与间歇网络 - 配置国内可信源,例如:
server ntp.aliyun.com iburstserver time1.tencentyun.com iburst - 开放 UDP 123 端口,禁用 systemd-timesyncd(避免冲突)
- 定期检查:
chronyc tracking(关注 Offset 是否持续 < ±5ms)、chronyc sources -v(确认有效上游)
不复杂但容易忽略


















