supprimer les privilèges dans go (v1.7)
La tâche de créer un serveur Web personnalisé dans Golang rencontre souvent un besoin de lier à des ports privilégiés comme le port 80. Pour s'assurer que la sécurité, il est crucial de supprimer les privilèges racinaires après la liaison à de tels ports. Cet article explore le problème de la suppression des privilèges dans GO et fournit une solution.
Dans les versions antérieures de Go, en utilisant SyScall.SetUid () pour supprimer les privilèges renverraient «non pris en charge». Comme alternative, on pourrait rediriger le port 80 vers un port non privilégié à l'aide d'iPtables. Cependant, cette solution ouvre des vulnérabilités de sécurité en permettant aux processus non-ROOT de se faire passer pour le serveur Web.
La solution réside dans l'utilisation d'une combinaison des capacités de réseautage 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 leur 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 la liaison du 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 est en cours d'exécution, il rétrograde à 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 à la nécessité de supprimer les 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é.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3