Como executar o ntpd apenas como servidor, sem ajustar o horário local da máquina, sob LXC

1

Eu tenho uma necessidade de apontar dispositivos para sincronizar seus relógios para o meu servidor CentOS-7 rodando dentro do LXC. No servidor, estou tentando usar ntpd de ntp package, mas aberto a outros produtos. Esta questão é sobre a configuração do ntpd ou equivalente no servidor.

Até agora eu tentei isso em /etc/ntp.conf

driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery

restrict 127.0.0.1
restrict ::1

server 127.127.1.1 iburst
fudge  127.127.1.1 stratum 8

disable monitor

Existem DOIS problemas aqui.

  1. ntpd termina depois de registrar cap_set_proc() failed to drop root privileges: Operation not permitted
  2. ntpd está tentando ajustar a hora local. Ele falha, mas tenta. Se este fosse o único problema e eu tivesse uma mensagem de erro no log, eu poderia aceitar isso.

A saída completa de /var/log/messages causada pela tentativa de iniciar o ntpd:

systemd: Starting Network Time Service...
ntpd[20154]: ntpd [email protected] Wed Apr 12 21:24:06 UTC 2017 (1)
ntpd[20155]: proto: precision = 0.120 usec
ntpd[20155]: ntp_adjtime() failed: Operation not permitted
systemd: Started Network Time Service.
ntpd[20155]: 0.0.0.0 c01d 0d kern kernel time sync enabled
ntpd[20155]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
ntpd[20155]: Listen and drop on 1 v6wildcard :: UDP 123
ntpd[20155]: Listen normally on 2 lo 127.0.0.1 UDP 123
ntpd[20155]: Listen normally on 3 eth0 hidden:A.B.C.D UDP 123
ntpd[20155]: Listen normally on 4 tun0 hidden:E.F.G.H UDP 123
ntpd[20155]: Listening on routing socket on fd #21 for interface updates
ntpd[20155]: 0.0.0.0 c016 06 restart
ntpd[20155]: ntp_adjtime() failed: Operation not permitted
ntpd[20155]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
ntpd[20155]: 0.0.0.0 c011 01 freq_not_set
ntpd[20155]: cap_set_proc() failed to drop root privileges: Operation not permitted
systemd: ntpd.service: main process exited, code=exited, status=255/n/a
systemd: Unit ntpd.service entered failed state.
systemd: ntpd.service failed.
    
por AndrDevEK 11.09.2018 / 17:18

1 resposta

0

Encontrei uma maneira de fazê-lo funcionar, mas não estou feliz com minha solução, então ainda estou procurando uma resposta melhor.

Parte 1. Evitei que ntpd tentasse eliminar os privilégios de root.

Em /usr/lib/systemd/system/ntpd.service , por padrão:

[Service]
EnvironmentFile=-/etc/sysconfig/ntpd
ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS

, então eu removo ' -u ntp:ntp colocando /etc/systemd/system/ntpd.service.d/local.conf

[Service]
ExecStart=
ExecStart=/usr/sbin/ntpd $OPTIONS

Que permite que ntpd continue sendo executado como root. Funciona, mas não estou feliz com essa abordagem.

Parte 2. A parte de tempo local não atualizando

A adição de /etc/ntp.conf line disable kernel faz com que ntpd no início do serviço registre o erro ntp_adjtime() failed: Operation not permitted apenas uma vez, em oposição a 3 vezes sem a configuração. Desde que não pode mudar o relógio isso é aceitável. O ideal seria nem tentar mudar o relógio.

    
por 11.09.2018 / 17:18

Tags