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?

Était-ce utile?

La solution

Oui, il y a des pièges. Sécurité:

  1. 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.
  2. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top