我正在尝试为内部网络上的主机设置 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
我尝试改变配置以指向实际文件而不是符号链接。
有人能帮我找出系统日志中的错误含义以及如何解决这个问题吗?
编辑:看看来源看起来错误中的“权限被拒绝”部分来自操作系统。
答案1
如果密钥文件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
检查。
答案2
我启动了一个 Ubuntu 14.04 实例,并注意到在日志中相同的“权限被拒绝”消息之后出现了一个应用程序保护消息。
禁用 apparmor 的 ntp 配置文件可解决该问题。