Le 10 janv. 2013 à 23:10, Emmanuel Thierry a écrit :
De la même manière que la majorité des gens je suggérerais un chroot ssh (à l'intérieur desquels tu bindes les dossiers nécessaires à la bonne exécution de leurs applis (/usr, /bin, /sbin, ...).
Bonjour,
J'ai lu pas mal de choses qui m'ont fait sursauter, d'un point de vue sécurité lors de cet échange. Alors traitez moi de parano :)
Pour autant, je réagis sur celui-ci qui est un fantôme bien connu, et commun : si vous bindez des répertoires (bind comme dans mount --bind), à fortiori des binaires, de l'extérieur d'un chroot à l'intérieur de celui-ci, vous créez un super tremplin pour l'évasion dudit chroot : une élévation de privilège à l'intérieur du chroot permettra de réécrire les binaires, qui seront tout autant affectés à l'extérieur du chroot... et plouf, le beau reverse-shell :)
Concernant le problème plus général : compte tenu de la complexité de sécuriser un accès SSH, et à fortiori shell (penser à toutes les options de ssh, et de tous les programmes que l'utilisateur pourra lancer, loguer toutes les commandes sans que ce soit aisément contournable...) , je dirai que c'est une mauvaise idée d'en ouvrir un, tout court. Si je devais faire cela, je référencerai de manière exhaustive les besoins des clients (qui ne doivent pas être très nombreux, finalement...), et je ferai un "menu" web (accessible uniquement après une authentification forte, sur le backoffice de l'utilisateur) avec des commandes pré-générées et dont les arguments ont été correctement échappés/encodés pour éviter l'injection de commandes OS. Ces commandes seraient alors exécutées avec le droit de l'utilisateur en question (plusieurs techniques possibles...). Dans le doute, je m'inspirerai de ce qu'ont fait les "grands" du mutualisé, qui s'en tirent pas mal, sans donner d'accès shell.
Un dernier point : il ne faut pas donner aux utilisateurs juste un répertoire qui est directement le docroot, lors des accès FTP. C'est pourri, en terme de sécurité. Toutes les bonnes pratiques conseillent de ne mettre dans le docroot que ce qui a réellement besoin d'être accessible par les internautes (oui, je sais, bcp de framework PHP eux mêmes ne le font pas... don't get me started on this, PHP, sécurité, vendredi, tout ça...). Les astuces à base de .htaccess (valable uniquement pour Apache, et je pourrais citer bon nombre de techniques permettant de prendre la main sur un serveur À CAUSE des htaccess ; d'une manière général : désactivez ces saloperies), ou de petites lignes en haut de chaque fichier PHP (oubli très facile...) sont en général super pourries.
Au moins un niveau en dessous est souhaitable. Pour prévenir l'effacement du répertoire docroot qui vous ferait une erreur lors du redémarrage du serveur web, utilisez une astuce sur les droits systèmes avec le sticky bit ;)
Bon courage,
Florian Maury