Suppression des privilèges dans Go (v1.7)
La tâche de création d'un serveur Web personnalisé dans Golang rencontre souvent le besoin de se lier à ports privilégiés comme le port 80. Pour garantir la sécurité, il est crucial de supprimer les privilèges root après la liaison à ces ports. Cet article explore le problème de la suppression des privilèges dans Go et propose une solution.
Dans les versions antérieures de Go, l'utilisation de syscall.SetUid() pour supprimer les privilèges renvoyait « Non pris en charge ». Comme alternative, on pourrait rediriger le port 80 vers un port non privilégié en utilisant iptables. Cependant, cette solution ouvre des failles de sécurité en permettant à des processus non root d'usurper l'identité du serveur Web.
La solution réside dans l'utilisation d'une combinaison des capacités de mise en réseau et d'appel système de Go. Après avoir ouvert le port privilégié et déterminé l'UID, nous pouvons identifier l'utilisateur souhaité, obtenir son UID et définir à la fois l'UID et le GID à l'aide des fonctions glibc setgid() et setuid(). Il est important d'exécuter ce code immédiatement après avoir lié le port, mais avant d'appeler http.Serve.
L'extrait de code fourni démontre cette approche. Il charge d'abord les certificats TLS nécessaires et écoute sur un port privilégié. Si l'application s'exécute en tant que root, elle passe à un utilisateur spécifié en définissant l'UID et le GID à l'aide d'appels glibc. Par la suite, il écoute les demandes entrantes et sert le contenu Web.
Cette solution répond efficacement au besoin de suppression des privilèges dans les applications Go. Il permet la création de serveurs Web personnalisés sécurisés et robustes sans compromettre la sécurité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!