我正在尝试为我的内部网络上的主机设置一个 NTP 时间服务器以与之同步。
我需要使用授权才能符合 PCI 标准。
我使用 ntp-keygen -M 创建了一组密钥,并将以下代码段添加到服务器上的 /etc/ntp.conf 文件中。
enable auth
keys /etc/ntp.keys
trustedkey 1 7 17
我无法从客户端连接到服务器。当我在客户端上运行“ntpq -c as”时,我可以看到身份验证对我的服务器来说是“坏的”。我已将服务器上生成的密钥文件复制到客户端,并将受信任的密钥行也添加到客户端,如下所示:
server timeserver key 17
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
keys /etc/ntp.keys
trustedkey 1 7 17
查看服务器日志,我可以看到在尝试读取文件时出现权限被拒绝错误,如下所示。
Jan 30 12:38:01 ip-10-0-1-103 systemd[1]: Starting LSB: Start NTP daemon...
Jan 30 12:38:01 ip-10-0-1-103 ntp[28084]: * Starting NTP server ntpd
Jan 30 12:38:01 ip-10-0-1-103 ntpd[28094]: ntpd [email protected] Wed Oct 5 12:34:45 UTC 2016 (1): Starting
Jan 30 12:38:01 ip-10-0-1-103 ntpd[28094]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 112:116
Jan 30 12:38:01 ip-10-0-1-103 ntp[28084]: ...done.
Jan 30 12:38:01 ip-10-0-1-103 systemd[1]: Started LSB: Start NTP daemon.
Jan 30 12:38:01 ip-10-0-1-103 ntpd[28096]: proto: precision = 0.182 usec (-22)
Jan 30 12:38:01 ip-10-0-1-103 ntpd[28096]: authreadkeys: file /etc/ntp.keys: Permission denied
我已经使用客户端机器上的 ntpdate 来设置服务器的日期,所以我非常有信心网络已经启动并正在运行。当我忙于设置它时,我实际上已经在两台服务器上禁用了 iptables。
服务器上的密钥文件是 600,如下所示:
-rw------- 1 root root 1066 Jan 30 12:29 ntpkey_MD5key_timeserver.3694768152
lrwxrwxrwx 1 root root 35 Jan 30 12:33 ntp.keys -> ntpkey_MD5key_timeserver.3694768152
我尝试将配置更改为指向实际文件而不是符号链接。
谁能帮我弄清楚系统日志中的错误是什么意思以及如何解决这个问题?
编辑:查看源代码,错误的“权限被拒绝”部分似乎来自操作系统。
如果密钥文件
root
只能由非 root 用户读取,但ntpd
以非 root 用户身份运行,例如使用-u ntp:ntp
,请确保有效用户可以读取密钥文件。例如,您可以使用
chmod u=rw,g=r,o= keyfile
密钥文件来允许组读取,然后chgrp ntp keyfile
将组分配ntp
给文件,从而有效地允许组ntp
访问文件(但您已经知道了,对吧?)。仍然值得检查 apparmor 或 selinux 施加的其他限制。对于前者,您可以尝试
aa-status | grep ntpd
检查。我启动了一个 Ubuntu 14.04 实例,并注意到在相同的“权限被拒绝”消息之后日志中的应用程序装甲消息。
禁用 apparmor 的 ntp 配置文件解决了该问题。