Question
J'écris un serveur Web en Python en tant que projet amateur. Le code est destiné aux machines * NIX. Je suis novice dans le développement sur Linux et encore plus récent dans Python lui-même.
Je crains que des personnes ne sortent du dossier que j'utilise pour servir le site Web. La méthode la plus simple consiste à filtrer les demandes de documents tels que /../../etc/passwd. Cependant, je crains qu'il n'y ait des moyens intelligents de remonter dans l'arborescence de répertoires dont je ne suis pas au courant et que, par conséquent, mon filtre ne soit pas intercepté.
J'envisage d'utiliser l'option os.chroot pour que le répertoire racine soit le site Web lui-même. Est-ce un moyen sûr de se protéger contre ces attaques en prison? Y at-il des pièges potentiels à faire cela qui me feront mal plus tard?
La solution
Oui, il y a des pièges. Sécurité:
- Si vous exécutez en tant que root, il y a toujours moyen de sortir. Commencez donc par chroot (), puis supprimez définitivement les privilèges d’un autre utilisateur.
- Ne rien mettre qui ne soit pas absolument nécessaire dans l'arbre à chroot. Surtout pas de fichiers suid / sgid, de tubes nommés, de sockets de domaine unix et de nœuds de périphériques.
Python, tout votre chargement de module est gâché. Python n'est tout simplement pas fait pour de tels scénarios. Si votre application est moyennement complexe, vous rencontrez des problèmes de chargement de module.
Je pense qu'il est bien plus important que le chroote de fonctionner en tant qu'utilisateur non privilégié et d'utiliser simplement les autorisations du système de fichiers pour empêcher cet utilisateur de lire des informations importantes.
Autres conseils
Découvrez Twisted . twistd
prend en charge l’élimination de privilèges et l’opération chroot prêtes à l’emploi. De plus, il dispose de tout un cadre pour écrire des services réseau, des démons et à peu près tout.