Est-ce une bonne pratique d'exécuter un démon sous un compte utilisateur non root?

13

J'ai développé une application qui utilise NTP pour changer l'heure du réseau, pour synchroniser deux de mes ordinateurs. Il fonctionne comme root, puisque seul ce dernier est autorisé à changer l'heure et la date sur Linux (je suppose).

Maintenant, je veux l'exécuter en tant qu'utilisateur. Mais, je dois accéder à l'heure.

  • Est-ce une bonne pratique d'exécuter un démon sous un compte utilisateur non root?
  • Dois-je donner à mon application une capacité telle que CAP_SYS_TIME?
  • N'introduit-il pas une faille de sécurité?
  • Y a-t-il une meilleure façon?
Anonyme12223
la source
Normalement, le démon NTP est censé s'exécuter en tant que ntpcompte d'utilisateur (au moins sur les systèmes Linux), vous ne devriez donc pas être obligé d'effectuer cette modification. Quel package NTP avez-vous installé?
6
L'exécution d'un démon sous un compte non root est appelée «suppression des privilèges root» et est une bonne pratique connue car elle limite les dommages potentiels des vulnérabilités de sécurité dans le démon.
1
Voir wikipedia pour " Séparation des privilèges ".
Kusalananda
J'ai compilé NTP à partir des sources. Je n'ai pas de groupe NTP
Anonymous12223
@xhaltar Vous pouvez créer le groupe et l'utilisateur NTP. Pour configurer le démarrage d'un service (utilisateur, groupe, etc.), vous pouvez soit créer / éditer le script d'initialisation du service, soit créer / configurer une unité systemd.
Pl4nk

Réponses:

15

Est-ce une bonne pratique d'exécuter un démon sous un compte utilisateur non root?

Oui, et c'est courant. Par exemple, Apache démarre en tant que root, puis lance un nouveau processus en tant que www-data (par défaut).
Comme dit précédemment, si votre programme est piraté (ex: injection de code), l'attaquant n'obtiendra pas un accès root, mais sera limité aux privilèges que vous avez accordés à cet utilisateur spécifique.

Dois-je donner une "capacité" telle que "CAP_SYS_TIME"?

C'est une bonne idée car vous évitez d'utiliser setuid et limitez les autorisations à cette capacité très spécifique.

Dois-je utiliser une autre façon de procéder qui serait considérée comme une "bonne pratique"?

Vous pouvez augmenter la sécurité, par exemple:

  • Exécutez le service en tant qu'utilisateur non privilégié, sans shell.
  • Utilisez chroot pour verrouiller l'utilisateur dans son répertoire personnel.
Pl4nk
la source
NB: Chroot n'offre aucune sécurité si vous êtes root et exécutez sous Linux. L'utilisateur root peut créer un répertoire dans le chroot, ouvrir le répertoire racine du chroot, chroot dans le nouveau répertoire, chdir pour remonter à la racine réelle, puis chroot à la racine réelle. BSD corrige cela en interdisant de prendre les répertoires fd dans un chroot.
Kevin
@Kevin Si vous êtes root, vous pouvez également ptracer des processus en dehors du chroot, et il existe de nombreuses autres façons de le contourner. Un simple chroot ne peut pas s'enraciner.
Gilles 'SO- arrête d'être méchant'
//, emp.jar.st crée en fait un utilisateur pour lui-même pour des raisons de sécurité. Très bonne pratique.
Nathan Basanese
Attendez, si je suis UTILISATEUR, puis-je verrouiller l'UTILISATEUR dans un répertoire spécifique? Tels que "/ opt" (par exemple)?
Anonymous12223
@xhaltar Pour verrouiller un processus exécuté par USERdans un répertoire, utilisez chroot(exécutez-le en tant qu'utilisateur root). Cependant, vous devez créer et initialiser une prison (répertoire) avant. En bref, vous devez placer les bibliothèques et les fichiers binaires dont votre processus a besoin dans cette prison, puis appeler chroot <path/to/jail> <command>. Un bon tutoriel avec quelques exemples dont vous avez besoin est disponible ici
Pl4nk
13
  • Dois-je utiliser une autre façon de procéder qui serait considérée comme une "bonne pratique"?

Sauf si vous avez des raisons solides et irréfutables, vous devez simplement utiliser le package NTP fourni avec votre distribution GNU / Linux. Le démon NTP standard a mis des années à mûrir et est doté de fonctionnalités sophistiquées telles que le ralentissement ou l'accélération de l'horloge de votre système pour le synchroniser avec un réseau ou une horloge GPS. Il a été conçu pour synchroniser les horloges, il est donc probablement le meilleur outil disponible à cet effet.

ntpdest toujours maintenu, à en juger par les récentes mises à jour (au moment de la rédaction de cet article). Si vous avez besoin de plus de fonctionnalités, je vous suggère de contacter directement les développeurs, faites confiance à ce qu'ils ont à dire à ce sujet.


la source
5

Si vous avez un programme qui doit être capable de faire la fonction X (par exemple, manipuler l'horloge), et que vous pouvez lui donner le privilège / le pouvoir de faire la fonction X et rien d'autre, c'est mieux que de lui donner toute la boîte d'alphabet soupe. C'est ce que l'on appelle le principe du moindre privilège . Considérez ce que si votre programme a un bogue - soit une erreur de programmation ordinaire ou une vulnérabilité de sécurité exploitable. S'il s'exécute en tant que "root", il pourrait supprimer les fichiers de tout le monde - ou les envoyer à un attaquant. Si la seule chose que le programme est capable de faire est de manipuler l'horloge (et les fonctions non privilégiées, comme la manipulation de fichiers dans un répertoire verrouillé), alors c'est le pire qui puisse arriver si le programme devient voyou.

G-Man dit «Réintègre Monica»
la source