É uma boa prática rodar um daemon sob uma conta de usuário não-root?

12

Eu desenvolvi um aplicativo que usa o NTP para alterar o horário da rede, para sincronizar dois dos meus computadores. Ele é executado como root , já que somente este último pode alterar a data e a hora no Linux (eu acho).

Agora, quero executá-lo como usuário. Mas preciso acessar o horário.

  • É uma boa prática executar um daemon em uma conta de usuário não raiz?
  • Darei ao meu aplicativo uma capacidade como CAP_SYS_TIME ?
  • Isso não introduz uma vulnerabilidade de segurança?
  • Existe uma maneira melhor?
por xhaltar 01.06.2015 / 10:17

3 respostas

15

Is it a good practice to run a daemon under a non-root user account?

Sim, e isso é comum. Por exemplo, o Apache inicia como root e, em seguida, cria um novo processo como www-data (por padrão).
Como dito anteriormente, se o seu programa for invadido (ex: injeção de código), o invasor não terá acesso root, mas ficará limitado aos privilégios que você deu a esse usuário específico.

Shall I give a "Capability" such as "CAP_SYS_TIME"?

É uma boa ideia, já que você evita usar setuid e limitar as permissões a esse recurso específico.

Shall I use another way to do so that would be considered "Good Practice"?

Você pode aumentar a segurança, por exemplo:

  • Execute o serviço como usuário sem privilégios, sem shell.
  • Use chroot para bloquear o usuário em seu diretório inicial.
por 01.06.2015 / 12:11
13
  • Shall I use another way to do so that would be considered "Good Practice"?

A menos que você tenha razões strongs e irrefutáveis, você deve usar o pacote NTP que acompanha sua distribuição GNU / Linux. O daemon NTP padrão levou anos para amadurecer e vem com recursos sofisticados, como desacelerar ou acelerar o relógio do seu sistema para sincronizá-lo com uma rede ou um relógio GPS. Ele foi feito sob medida para sincronizar os relógios, então provavelmente é a melhor ferramenta para essa finalidade.

ntpd ainda é mantido, a julgar pelas atualizações recentes (a partir da redação deste post). Se você precisar de mais recursos, sugiro que você tenha contatado diretamente os desenvolvedores e confie no que eles têm a dizer sobre isso.

    
por 01.06.2015 / 11:23
5

Se você tem um programa que precisa ser capaz de fazer a função X (por exemplo, manipular o relógio) e você pode dar o privilégio / poder de fazer a função X e nada mais, isso é melhor que dar a lata inteira de sopa de letrinhas. Isso é conhecido como o princípio do menor privilégio . Considere, e se o seu programa tiver um bug - um erro de programação comum ou uma vulnerabilidade de segurança explorável. Se estiver rodando como "root", ele pode remover os arquivos de todos - ou enviá-los para um atacante. Se a única coisa que o programa é capaz de fazer é manipular o relógio (e funções não privilegiadas, como manipular arquivos em um diretório bloqueado), então é o pior que pode acontecer se o programa for desonesto.

    
por 01.06.2015 / 11:56