# OpenNTPD

O OpenNTPD é um daemon Unix que implementa o protocolo de sincronização de relógios de servidores NTP. Funciona tanto como cliente quanto como servidor, nas plataformas em que é suportado e integrado com clientes NTP compatíveis.
É desenvolvido primariamente pelo programador Henning Brauer como parte do projeto OpenBSD. Seus objetivos são ser seguro(não-exploitável) de fácil configuração, e preciso o suficiente para a maioria dos usos. Sua versão portátil (portable) como o OpenSSH, e é desenvolvido como um projeto a parte(mas subordinado) do OpenBSD, podendo manter a portabilidade de código e versões distintas do mesmo. A versão portátil é desenvolvida por Brent Cook. Os desenvolvedores do projeto recebem ajudas de custo da OpenBSD Foundation.

## História

O desenvolvimento do OpenNTPD foi motivado por uma combinação de problemas existentes das implementações atuais de daemons NTP: configuração difícil, alta complexidade para auditar códigos fonte, e licenciamento inadequado. O OpenNTPD foi projetado para resolver estes problemas e tornar a sincronização mais acessível para uma maior base de usuários. Após o período de desenvolvimento, o OpenNTPD apareceu na versão 3.6 do OpenBSD. A primeira versão foi anunciada em 02 de Novembro de 2004.

## Objetivos

O OpenNTP é uma tentativa do projeto OpenBSD de produzir um serviço de NTP que é seguro, simples de auditar, trivial de configurar e administrar, razoavelmente preciso e leve na utilização de recursos do sistema. Assim, estes são os objetivos do OpenNTP: seguro, fácil de usar e performático. A segurança no OpenNTPD é alcançada através de robustas validações nas entradas de rede, a utilização de operações buffer bounded através do strlcpy, a separação de privilégios para mitigar possíveis efeitos oriundos da exploração de bugs de segurança no daemon relacionados ao escalonamento de privilégios. Para simplificar o uso do NTP, o OpenNTPD implementa um grupo reduzido de funcionalidades se comparado com outros daemons NTP existentes, se comparado com o Projeto Network Time Protocol por exemplo. O objetivo é prover funcionalidades suficientes para satisfazer o uso regular da ferramenta, sem a necessidade de implementar funções "exóticas", utilizadas apenas por um nicho específico de usuários do protocolo NTP. O OpenNTPD é configurado através do arquivo de configuração ntp.conf. Um número mínimo de opções está disponível: Endereço IP ou nome ao qual o OpenNTP deve escutar, sensor timedelta a ser utilizado, e grupo de servidores a ser utilizado como fonte de sincronização. A precisão do OpenNTP é baseada no melhor esforço; o daemon tenta ser o mais preciso possível mas um grau específico de precisão não é garantido pelo serviço.

## Exemplo

O OpenNTPD ajusta gradualmente o relógio do sistema, como pode ser visto nesta saída de tela do OpenNTPD rodando em um sistema Linux:

## Criticismo

O OpenNTPD foi criticado por ser menos preciso que o daemon NTP produzido pelo Internet Software Consortium (ISC). Internamente, o OpenNTPD não mantem a mesma precisão que varia entre 50-200ms do tempo "real", por omitir alguns algoritmos que aumentam a precisão para manter a simplicidade em seu código-gonte. O projeto OpenNTPD acatou a crítica, mas avisou que a falta de uma precisão em milissegundos fazia parte do escopo do projeto, visto que era uma troca entre sacrificar a precisão em busca da simplicidade e segurança da ferramenta.
Um dos objetivos projetados para o OpenNTPD é "atender a uma precisão razoável" sem sacrificar "a segurança do projeto e deixar a precisão de nanosegundo se tornar um caso obscuro a se tratar".