2010-07-06 7 views
2

(Oui, je sais que les questions se rapportant à lighttpd mieux répartis sur le SF, mais je pensais qu'il était plus susceptible d'être posée ici car il est principalement à la politique de sécurité.)Sécurisation d'une configuration lighttpd partagée

Nous sommes Je prévois de mettre en place un petit serveur Web dans mon collège, afin que les gens puissent avoir de l'espace sur le Web pour mettre en place des pages Web et autres. Ils pourraient également télécharger des pages PHP. L'ensemble de l'installation s'exécute dans une prison chroot.

Nous envisageons d'utiliser la même infrastructure pour mettre en place d'autres services, par exemple un forum de discussion. Mon problème est, mettre le forum dans le même document racine (ou même, le même environnement chrooté) permet à peu près tout utilisateur de placer de petits scripts PHP dans leurs répertoires qui peuvent accéder aux fichiers de configuration du forum (par exemple file_get_contents) . C'est un risque de sécurité énorme! Existe-t-il un moyen de résoudre ce problème, à moins de désactiver PHP pour les comptes d'utilisateur, et de le garder activé pour le forum de discussion et autres, ou de servir le forum ailleurs et de le proxy en utilisant lighttpd? Je doute que la définition des propriétés/permissions puisse résoudre ce problème, puisque, de mon point de vue, le processus PHP FastCGI est engendré par le serveur web, et par conséquent, toute page accessible par le serveur (ils tout doit être, vu comment c'est le serveur qui doit finalement les servir) peut être consulté par les scripts PHP téléchargés par un utilisateur.

Toute aide serait appréciée!

+0

Cela devrait être sur serverfault. – rook

Répondre

2

Eh bien, quelques points. Tout d'abord, alors que Lighttpd est GRAND pour les besoins de hautes performances, il n'a pas été conçu pour être utilisé dans un paramètre d'hôte partagé. Apache serait probablement le meilleur choix pour cela, car il prend en charge des choses comme .htaccess ...

Deuxièmement, PHP n'a pas besoin d'être exécuté comme le même utilisateur que Lighttpd. Vous pouvez utiliser le programme spawn_fcgi pour lancer chaque écouteur de fastcgi en tant qu'utilisateur de ce site Web. Vous devez déclarer un backend fastcgi pour chaque hôte virtuel. Notez que vous ne pourrez probablement utiliser aucun des modules vhost intégrés (simple_vhost, etc). Il suffit d'utiliser la correspondance d'expression régulière:

Soit par IP et le port:

$SERVER["socket"] == "127.0.0.2:80" { 
    fastcgi.server = (
     ".php" => (
      "username" => (
       "socket" => "/tmp/user_php.fastcgi", 
      ) 
     ) 
    ) 
) 

Ou par nom d'hôte:

$HTTP["host"] =~ "example\.com" { 
    # ... 
} 

Vous devrez probablement modifier le script d'initialisation pour exécuter également spawn_fcgi à lancer les processus php pour chaque utilisateur.

1

Chaque utilisateur doit avoir son propre compte utilisateur Linux. Ensuite, vous devez utiliser SuPHP+LightHTTPD pour vous assurer que le code PHP est exécuté avec les privilèges de cet utilisateur. Ensuite, vous devez vous assurer que tous les fichiers sont la propriété de l'utilisateur correct et chmod 700 ou chmod 500 (idéal pour les fichiers .php). Les 2 derniers zéros dans le chmod, avec suphp, font en sorte que les utilisateurs ne peuvent pas file_get_contents() chacun des autres fichiers.

+0

Je pourrais le faire, puisque chaque utilisateur a un UID qui lui correspond de toute façon, mais il semble que suPHP ne peut fonctionner qu'avec CGI, et pas FastCGI (ce qui est logique, car les processus fils FCGI sont persistants et 1600 cauchemar...) – susmits