如何在 CentOS 和 Ubuntu 上安装和配置 NTP

介绍

在本文中,我们将了解网络时间协议 (NTP) 是什么以及如何在 Liquid Web 服务器上最常用的两个 Linux 发行版上安装它。 我们将专注于使用 CentOS 7 和 Ubuntu 18.04 服务器,但该过程在每个的其他最新版本上基本相同。 在我们开始之前,请确保我们熟悉使用 SSH(安全外壳),因为我们需要它来连接到服务器。 如果您不熟悉 SSH 的用法,请访问我们其中一篇关于 SSH 基础知识的文章的链接。

我们将以 root 用户身份连接到服务器以简化事情。 如果您对终端不满意,您可能需要使用具有以下功能的用户帐户 sudo 特权。 我们将执行的命令是相同的,但您需要在命令前加上 sudo 命令。 如果您打算修改配置文件,您可能还需要熟悉基于命令行的文本编辑器,例如 nano 或 vim。 这里有一篇文章可以更详细地解释这一点。

警告:在修改文件之前,请务必对其进行备份。

我们将更详细地介绍 CentOS 安装,并在此过程中解释一些概念,然后在 Ubuntu 上展示类似的安装。

什么是NTP?

它的名字不言自明——网络时间协议是一种用于同步网络中计算机内部时钟时间的协议。 这适用于与 Internet 上的服务器同步时钟时间,以及同步本地网络上的机器。 它通常用于客户端-服务器配置,但也支持点对点时间同步。 NTP 用于同步到协调世界时 (UTC),而时区管理由操作系统处理。 保持正确的时间对于日志记录、网络连接尤其重要,对于集群和分布式计算机系统更是如此。

现在,我们无法真正安装协议,但我们实际要安装的是 NTP 守护进程或 ntpd。 守护进程是在后台运行而无需任何干预的操作系统程序。 虽然计算机非常智能,但它们仍然只是受电子元件微小波动影响的机器。 这会导致时间漂移。 时间漂移是计时中的一个小不一致。 NTP 守护程序将通过定期查询 NTP 服务器以更正这些差异来自动处理时钟时间同步。

在 CentOS 7 上安装和配置 NTP

CentOS 附带了一种开箱即用的网络时间协议的替代实现,称为 chrony。 它在某种程度上扩展了 ntpd 的功能,但在某些情况下仍可能首选 ntpd。

禁用 Chrony

为了设置 ntpd,(网络协议时间守护进程),我们首先需要禁用 chrony 守护进程。 这是必需的,因为两个守护进程使用相同的协议和端口,因此它们不能一起工作。 我们将使用以下命令执行此操作:systemctl stop chronyd 和 systemctl disable chrony 命令:

[[email protected] ~]# systemctl stop chronyd [[email protected] ~]# systemctl disable chronyd Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.

请记住,如果我们不是以 root 用户身份登录,我们将需要以具有以下权限的用户身份运行这些命令 sudo 特权。 例如,我们将在以替代用户身份登录时检查 chronyd 服务状态 sudo 特权。

[[email protected] ~]$ sudo systemctl status chronyd ● chronyd.service - NTP client/server    Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)    Active: inactive (dead)  	Docs: man:chronyd(8)        	man:chrony.conf(5) [...]

安装ntpd

CentOS 和其他基于 RedHat 的发行版上的安装通常最好使用 yum 工具处理。 我们将使用 yum install -y 命令。 -y 标志用于在任何提示时自动确认。

[[email protected] ~]# yum install -y ntp

Yum 会自动为我们处理依赖项,因此也会安装 ntpd 需要运行的任何缺失包。 我们应该在命令输出的末尾看到类似的内容。

Installed:   ntp.x86_64 0:4.2.6p5-29.el7.centos  Dependency Installed:   autogen-libopts.x86_64 0:5.18-5.el7           	    ntpdate.x86_64 0:4.2.6p5-29.el7.centos  Complete!

如果它没有安装任何依赖项,请不要担心,因为这仅意味着我们已经安装了所有先决条件。

配置ntpd并检查防火墙

我们可以保持 ntpd 配置不变,或者我们可以更改我们的 ntpd 服务将查询的时间服务器。 通常我们会想要使用一个时间服务器 close 到我们的位置或服务器的位置。 这 ntp池项目 是开始了解有关此主题的更多信息的好地方。

要进行更改,我们需要使用首选的 CLI 文本编辑器(Nano 或 Vim)打开 /etc/ntpd.conf 文件并编辑以下行。

server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst

出于本文的目的,我们将使用上面提到的默认时间服务器。

为了让ntpd能够有效地同步时间,它需要能够与外部网络资源进行通信,以便与权威的NTP服务器同步。 这意味着我们必须确保端口 123 对出站 UDP 流量开放。 如果我们的服务器将被配置为时间服务器,则该端口只需要为入站流量打开。

我们的大多数 CentOS cPanel 和 Plesk 服务器都带有 csf 防火墙。 还有其他防火墙正在使用中,因此这些步骤可能会有所不同,具体取决于我们系统上安装的防火墙。 要检查端口 123 是否打开,我们可以运行以下命令。

[[email protected] ~]# grep UDP_ /etc/csf/csf.conf UDP_IN = “20,21,53” UDP_OUT = “20,21,53,113,123,873,6277”

或者,如果 firewalld 正在运行,我们可以使用此命令。

[[email protected] ~]# firewall-cmd --list-ports | grep -i udp 20/udp 21/udp 123/udp [[email protected] ~]#

每个人的输出可能都不一样,但只要端口 123 列在 UDP_OUT 部分中,我们应该没问题。 如果端口丢失,我们需要使用文本编辑器或通过 WHM 在 csf.conf 文件中添加端口,然后使用 csf -r 命令重新加载防火墙规则。 另外,如果使用firewalld并且端口没有打开,我们也可以运行这个命令来打开端口。

 [[email protected] ~]# firewall-cmd --zone=public --add-port=123/udp --permanent

我们快准备好了! 我们需要做的最后一件事是选择一个时区。 正如我们之前了解到的,ntpd 实际上并不跟踪我们的本地时间,它只与 UTC 同步。 操作系统的时钟需要配置为使用所需的时区。 我们可以使用 timedatectl 命令检查当前时间、日期和时区。

[[email protected] ~]# timedatectl       Local time: Thu 2020-03-12 15:43:55 EDT   Universal time: Thu 2020-03-12 19:43:55 UTC         RTC time: Thu 2020-03-12 19:43:56        Time zone: America/New_York (EDT, -0400)      NTP enabled: no NTP synchronized: no  RTC in local TZ: no       DST active: yes  Last DST change: DST began at                   Sun 2020-03-08 01:59:59 EST                   Sun 2020-03-08 03:00:00 EDT  Next DST change: DST ends (the clock jumps one hour backwards) at                   Sun 2020-11-01 01:59:59 EDT                   Sun 2020-11-01 01:00:00 EST [[email protected] ~]#

让我们寻找我们的时区。 可用的列表很大,因此最好使用以下命令搜索我们时区的主要城市。 只需复制命令并替换城市名称,它就会为我们提供时区名称。

[[email protected] ~]# timedatectl list-timezones | grep Detroit America/Detroit [[email protected] ~]#

要设置列出的时区,我们需要发出此命令。

[[email protected] ~]# timedatectl set-timezone America/Detroit [[email protected] ~]#

当然,我们应该使用从上一个命令的输出中收到的时区名称用于我们的服务器。

激活ntpd

现在我们已经完成了所有的准备工作,让我们继续激活 ntpd 服务。 systemctl start ntpd 命令将为此会话启动 ntp 守护进程。 systemctl enable ntpd 命令告诉操作系统在每次计算机启动时启动它。

[[email protected] ~]# systemctl start ntpd [[email protected] ~]# systemctl enable ntpd Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

我们可以使用 systemctl status ntpd 命令确认服务正在运行。

 [[email protected] ~]# systemctl status ntpd ● ntpd.service - Network Time Service    Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)    Active: active (running) since Mon 2020-03-12 19:03:45 EDT; 2min 49s ago  Main PID: 23029 (ntpd)    CGroup: /system.slice/ntpd.service        	└─23029 /usr/sbin/ntpd -u ntp:ntp -g  [...]

就是这样,我们开始运行了! 由于 NTP 的运作方式,它需要一些时间才能完全同步,但不需要进一步的操作。

在 Ubuntu 上安装和配置 NTP

在 Ubuntu 上安装和配置 NTP 与在 CentOS 上安装非常相似。 如果您只是为了本节而阅读本文,但发现有不清楚的地方,请查看上面的上一节,因为那里可能有更详细的解释。

Ubuntu 也有一个以 systemd-timesyncd 模块形式出现的 NTP 替代实现。 这不是 Ubuntu 独有的,但默认情况下它通常在 Ubuntu 上启用。

禁用时间同步

首先,我们将使用 timedatectl 命令检查 timesyncd 是否处于活动状态。

[[email protected] ~]# timedatectl                   	Local time: Mon 2020-03-09 23:44:50 UTC               	Universal time: Mon 2020-03-09 23:44:50 UTC                     	RTC time: Mon 2020-03-09 23:44:50                    	Time zone: UTC (UTC, +0000)    	System clock synchronized: yes systemd-timesyncd.service active: yes              	RTC in local TZ: no [email protected]:~#

如果我们看到系统时钟已同步并且 systemd-timesyncd.service 活动行返回“是”,则表示系统当前正在使用 timesyncd 同步到时间服务器。 正如 ntpd 不能在 CentOS 上与 chrony 一起运行一样,它也无法在 Ubuntu 上与 timesyncd 一起运行。 我们将使用以下命令禁用 timesyncd。

[[email protected] ~]# timedatectl set-ntp no

如果我们再次运行 timedatectl,我们会在输出的底部看到不同之处。

       System clock synchronized: yes systemd-timesyncd.service active: no              	 RTC in local TZ: no

Systemd-timesyncd.service active 现在返回“no”,这意味着 timesyncd 已被禁用。

防火墙设置

在 Ubuntu 上,我们通常不需要检查防火墙设置,因为它的防火墙默认允许出站连接。 如果 timesyncd 已经正常工作,则尤其如此。 但是,如果未启用,我们可以轻松地允许 ntpd 与权威时间服务器进行通信。 运行此命令会将其设置为与先前安装相同的行为。

[[email protected] ~]# ufw allow out 123/udp

如果我们的服务器将用作时间服务器,我们将需要允许入站和出站连接到端口 123,这与上面的命令非常相似。

[[email protected] ~]# ufw allow 123/udp

安装ntpd

Ubuntu 和其他基于 Debian 的 Linux 发行版主要使用 apt(或 apt-get)工具来安装和管理软件包。 因此,我们需要做的第一件事是使用 apt update 命令更新我们的软件包列表。 这可确保我们获得要安装的软件的最新版本。

[[email protected] ~]# apt update [...] Reading package lists... Done Building dependency tree Reading state information... Done 88 packages can be upgraded. Run 'apt list --upgradable' to see them.

现在我们可以安装 ntp 包了。 我们将再次使用 -y 标志来自动确认任何交互式提示。 我们将看到 apt 像 yum 一样自动管理安装依赖项。

[[email protected] ~]# apt install -y ntp Reading package lists... Done Building dependency tree Reading state information... Done [...] The following additional packages will be installed:   libopts25 sntp Suggested packages:   ntp-doc The following NEW packages will be installed:   libopts25 ntp sntp [...]

激活ntpd

一个细微的区别是 apt 会在安装后立即启动并启用 ntpd 服务。

[[email protected] ~]# systemctl status ntp ● ntp.service - Network Time Service    Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled)    Active: active (running) since Tue 2020-03-10 00:29:09 UTC; 3min 56s ago  	Docs: man:ntpd(8)  Main PID: 15183 (ntpd) 	Tasks: 2 (limit: 2317)    CGroup: /system.slice/ntp.service        	└─15183 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:118  [...]

ntp 设置并激活后,我们可以使用 ntpq -p 命令检查 ntpd 与其他时间服务器的连接。

[[email protected] ~]# ntpq -p  	remote       refid  	st t when poll reach   delay  offset jitter ========================================================================  0.ubuntu.pool.n .POOL.      	16 p	-   64	0	0.000	0.000   0.000  1.ubuntu.pool.n .POOL.      	16 p	-   64	0	0.000	0.000   0.000  2.ubuntu.pool.n .POOL.      	16 p	-   64	0	0.000	0.000   0.000  3.ubuntu.pool.n .POOL.      	16 p	-   64	0	0.000	0.000   0.000  ntp.ubuntu.com  .POOL.      	16 p	-   64	0	0.000	0.000   0.000  [...]

我们可以按照上面 CentOS 部分中描述的相同方式更改 ntp 服务器并更改我们服务器的时区,不同之处在于 ntp 配置文件位于 Ubuntu 上的 /etc/ntp.conf。

在这两个发行版上,请确保重新加载 ntpd 服务,因为在服务运行时对配置文件的任何更改都需要保存,否则设置将不会生效。 我们还可以使用 systemctl reload ntp 命令重新加载服务。

手动同步

如果我们需要手动初始化 ntp 同步,我们可以通过三个简单的步骤来完成。 这适用于两种发行版。

步骤 1. 停止 ntpd 服务。

[[email protected] ~]# systemctl stop ntpd

步骤 2. 运行 ntpd -gq 命令以强制手动时间同步。

[[email protected] ~]# ntpd -gq ntpd: time slew +0.001347s

步骤 3. 重启 ntpd 服务。

[[email protected] ~]# systemctl start ntpd

如果您遇到任何问题或对此主题有任何疑问,请立即拨打我们的电话 800.580.4985,或打开 聊天 或与我们联系,与我们知识渊博的系统管理员之一交谈!