如何在 Solaris 中将 NTP 服务委托给非全局Zone

具有非全局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 服务。

日期:2020-09-17 00:15:08 来源:oir作者:oir