具有非全局Zone的系统将为所有Zone(全局Zone以及所有已配置的非全局Zone)共享一个内核。
因此,整个设置中只有一个日期/时间,并且该时间通常仅由全局Zone控制。
默认情况下,更改日期和时间的权限在非全局Zone内不可用,因此 NTP 服务将无法调整时间。
非全局Zone的默认配置假定时间同步是在全局Zone中完成的,并且不需要从非全局Zone内部调整系统时间。
如果非全局Zone的管理员能够更改系统时间,那么这些更改将影响所有正在运行的Zone(包括全局Zone),这可能会被视为安全风险。
如果需要,可以将时间同步委托给非全局Zone。
请记住,来自不同来源的多次时间调整可能会导致问题,并且只有一个Zone应该运行 NTP 服务。
如果要将 NTP 同步委托给非全局Zone,则建议禁用全局Zone中的 NTP 服务。
如上所述,调整时间的能力由 Solaris 权限控制。
此权限的名称称为 sys_time,可以使用 ppriv 命令查看此权限的信息:
# ppriv -lv sys_time sys_time Allows a process to manipulate system time using any of the appropriate system calls: stime, adjtime, ntp_adjtime and the IA specific RTC calls.
如果我们不确定当前是否可以使用 sys_time 权限,那么我们可以使用以下命令(以 root 身份)来检查该权限是否可用:
# ppriv -v $$ | grep sys_time
默认情况下,该命令只会在全局Zone中显示输出,而不会在任何非全局Zone中显示。
默认情况下,sys_time 权限未分配给非全局Zone。
从 Solaris 10 Update 3 (11/06) 开始,可以使用 zonecfg 命令的 limitpriv 选项更改非全局Zone的可用权限。
在默认配置中,limitpriv 设置将为空:
global-zone# zonecfg -z zonename info limitpriv limitpriv:
如果要将 sys_time 权限添加到Zone,则可以使用 zonecfg 命令修改属性并重新启动Zone以激活更改:
global-zone# zonecfg -z zonename set limitpriv="default,sys_time" global-zone# zoneadm -z zonename reboot
一旦非全局Zone中的 sys_time 权限可用,我们可以继续照常设置 NTP,例如:配置 /etc/ntp.conf 文件并启用 ntp 服务。