Vous ne pourrez pas ouvrir un serveur sur le port 80 sans les privilèges Root, il s'agit d'une restriction au niveau du système d'exploitation. La seule solution est donc de supprimer les privilèges Root après avoir ouvert le port.
Voici une solution possible pour supprimer les privilèges Root dans Python : Suppression de privilèges en Python . C'est une bonne solution en général, mais vous devrez également ajouter os.setgroups([])
à la fonction pour s'assurer que l'appartenance au groupe de l'utilisateur racine n'est pas conservée.
J'ai copié et nettoyé un peu le code, et j'ai supprimé la journalisation et les gestionnaires d'exception pour vous laisser le soin de les gérer. OSError
correctement (elle sera levée si le processus n'est pas autorisé à changer son UID ou GID effectif) :
import os, pwd, grp
def drop_privileges(uid_name='nobody', gid_name='nogroup'):
if os.getuid() != 0:
# We're not root so, like, whatever dude
return
# Get the uid/gid from the name
running_uid = pwd.getpwnam(uid_name).pw_uid
running_gid = grp.getgrnam(gid_name).gr_gid
# Remove group privileges
os.setgroups([])
# Try setting the new uid/gid
os.setgid(running_gid)
os.setuid(running_uid)
# Ensure a very conservative umask
old_umask = os.umask(077)
3 votes
stackoverflow.com/questions/413807/
4 votes
Sous Linux moderne, vous n'avez besoin que de la capacité CAP_NET_BIND_SERVICE pour vous lier au port 80, vous n'avez PAS besoin d'être Root, pas même au démarrage de l'application. Les capacités sont une norme POSIX, 1003.1e, qui consiste à diviser le tout puissant privilège Root en un ensemble de privilèges distincts. Voir : python-cap-ng Et /sbin/setcap, /sbin/getcap (équivalents à chmod setuid, et ls -l)
0 votes
Pour Python2 et peut-être d'autres interprètes, l'acquisition de capacités est la partie avec laquelle il faut être prudent -- libcap-ng peut supprimer des caps mais ne les accorde pas. Cette réponse à la question posée par Ian est un moyen relativement sûr de distribuer un cap à la fois pour des projets spécifiques : stackoverflow.com/a/21895123/1724577