Ce module permet l'exécution de différents serveurs virtuels sous différents identifiants Unix User et Group, et avec différents Privilèges Solaris. En particulier, il apporte au problème de séparation des privilèges entre les différents serveurs virtuels la solution que devait apporter le module MPM abandonné perchild. Il apporte aussi d'autres améliorations en matière de sécurité.
À la différence de perchild,
Les principaux problèmes de sécurité que l'on rencontre avec mod_privileges sont :
La directive
Avant de décrire les modes, il nous faut présenter les cas d'utilisation de la cible : "Benign" ou "Hostile". Dans une situation "Benign", vous voulez séparer les utilisateurs pour leur confort, et les protéger, ainsi que le serveur, contre les risques induits par les erreurs involontaires. Dans une situation "Hostile" - par exemple l'hébergement d'un site commercial - il se peut que des utilisateurs attaquent délibérément le serveur ou s'attaquent entre eux.
Vous pouvez sélectionner différents
Cette directive permet de faire un compromis entre les performances et la sécurité à l'encontre des codes malicieux supportant les privilèges. En mode SECURE, chaque requête est traitée dans un sous-processus sécurisé, ce qui induit une dégradation sensible des performances. En mode FAST, le serveur n'est pas protégé contre l'augmentation de privilège comme décrit plus haut.
Cette directive est sensiblement différente selon qu'elle se trouve
dans une section <Directory>
(ou Location/Files/If)
ou au niveau global ou dans un <VirtualHost>
.
Au niveau global, elle définit un comportement par défaut dont
hériteront les serveurs virtuels. Dans un serveur virtuel, les modes
FAST ou SECURE agissent sur l'ensemble de la requête HTTP, et toute
définition de ces modes dans une section <Directory>
sera ignorée. Le pseudo-mode SELECTIVE confie le choix
du mode FAST ou SECURE aux directives contenues dans une
section<Directory>
.
Dans une section <Directory>
, elle ne s'applique
que lorsque le mode SELECTIVE a été défini pour le serveur virtuel.
Seuls FAST ou SECURE peuvent être définis dans ce contexte (SELECTIVE
n'aurait pas de sens).
<Directory>
qui
s'applique à la requête. Ceci peut donner à un attaquant
l'opportunité d'introduire du code via une directive La directive
identifiant-utilisateur-unix peut être :
#
suivi d'un numéro d'utilisateur.Cette directive ne peut pas être utilisée pour exécuter Apache en tant que root ! Elle est tout de même susceptible de poser des problèmes de sécurité similaires à ceux décrits dans la documentation de suexec.
La directive
Unix-group peut être :
#
suivi d'un numéro de groupe.Cette directive ne peut pas être utilisée pour exécuter Apache en tant que root ! Elle est tout de même susceptible de poser des problèmes de sécurité similaires à ceux décrits dans la documentation de suexec.
Détermine si les serveurs virtuels traitent les requêtes avec une sécurité avancée en supprimant les Privilèges rarement requis par un serveur web, mais disponibles par défaut pour un utilisateur Unix standard, et donc susceptibles d'être demandés par des modules et des applications. Il est recommandé de conserver la définition par défaut (On), sauf si elle empêche une application de fonctionner. Comme la définition s'applique au processus, cette directive est incompatible avec les modules MPM threadés.
Le fait que la directive
Détermine si le serveur virtuel est autorisé à exécuter fork et
exec, et définit les privilèges requis pour exécuter des sous-processus. Si cette
directive est définie à Off le serveur virtuel ne
disposera d'aucun privilège et ne pourra exécuter ni des programmes
ou scripts CGI classiques via le module traditionnel
Si cette directive est définie à On ou
Secure, le serveur virtuel pourra exécuter les scripts et
programmes externes cités ci-dessus. Définir la directive
Cette directive qui s'applique à l'ensemble du serveur permet de déterminer si Apache s'exécutera avec les privilèges requis pour exécuter dtrace. Notez que la définition DTracePrivileges On n'activera pas à elle-seule DTrace, mais que DTracePrivileges Off l'empêchera de fonctionner.
La directive
nom-privilège peut être éventuellement préfixé par + ou -, ce qui va respectivement accorder ou refuser le privilège. Si nom-privilège est spécifié sans + ni -, tous les autres privilèges préalablement assignés au serveur virtuel seront refusés. Cette directive permet de construire aisément votre propre jeu de privilèges en annulant tout réglage par défaut.
L'utilisation de cette directive peut ouvrir d'immenses trous de sécurité dans Apache, jusqu'au traitement de requêtes avec les droits de root. Ne l'utilisez que si vous êtes absolument sûr de comprendre ce que vous faites !
La directive
privilege-name peut être éventuellement préfixé par + ou -, ce qui va respectivement accorder ou refuser le privilège. Si privilege-name est spécifié sans + ni -, tous les autres privilèges préalablement assignés au serveur virtuel seront refusés. Cette directive permet de construire aisément votre propre jeu de privilèges en annulant tout réglage par défaut.
L'utilisation de cette directive peut ouvrir d'immenses trous de sécurité dans les sous-processus Apache, jusqu'à leur exécution avec les droits de root. Ne l'utilisez que si vous êtes absolument sûr de comprendre ce que vous faites !