Qu'est-ce que Apache «Exiger tous les acquis» fait vraiment?

95

Je viens de mettre à jour mon serveur Apache vers Apache / 2.4.6 qui fonctionne sous Ubuntu 13.04. J'avais un fichier vhost qui avait les éléments suivants:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
</Directory>

Mais quand j'ai couru que j'ai eu un "Interdit. Vous n'avez pas la permission d'accéder /"

Après avoir un peu googlé, j'ai découvert que pour que mon site fonctionne à nouveau, je devais ajouter la ligne suivante "Exiger tous les droits acquis" afin que mon vhost ressemble à ceci:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
    Require all granted
</Directory>

Je veux savoir si cela est "sûr" et ne pose aucun problème de sécurité. J'ai lu sur la page d'Apache que cela "imite la fonctionnalité" qui était auparavant fournie par les directives "Autoriser de tout" et "Refuser de tout". Ce fournisseur peut prendre l'un des deux arguments "accordés" ou "refusés". Des exemples donneront ou refuseront l'accès à toutes les demandes. "

Mais il n'a pas précisé s'il s'agissait d'un problème de sécurité ou pourquoi nous devions le faire alors que par le passé, ce n'était pas nécessaire.

John Crawford
la source
1
La documentation relative à la mise à niveau explique en détail les modifications apportées au contrôle d'accès. httpd.apache.org/docs/2.4/upgrading.html
John Magnolia

Réponses:

87

La configuration du contrôle d'accès a changé dans la version 2.4 et les anciennes configurations ne sont pas compatibles sans certaines modifications. Voir ici .

Si votre ancienne configuration était Allow from all(aucune adresse IP bloquée pour accéder au service), alors Require all grantedle nouvel équivalent fonctionnel.

Shane Madden
la source
4
Sans compter que l'ancienne méthode était terriblement déroutante et qu'il était trop tard pour être remplacée par quelque chose de plus sensé.
Michael Hampton
4
Pour un changement aussi important, je m'attendrais à une sorte de support pour migrer automatiquement les fichiers de configuration ou au moins afficher tous les points où un changement est nécessaire.
Wolfgang Fahl
1
Ce serait bien de voir une démonstration de travail de Require all denied.
Kraang Prime
5
Je ne pense pas que cela soit équivalent à Allow from all. Vous devez "fusionner" Require all grantedavec d'autres Requirerègles existantes . Dans mon cas, un existant a Require valid-userété ignoré lors de la conversion à l'aveuglette de la configuration comme il est recommandé partout. C'était la pire chose qui puisse arriver ...
rudimeier
1
Ce serait bien d'avoir une réponse appropriée à la question du PO. "Autoriser de tout équivalent" n'est pas très satisfaisant.
Sharcoux
15

Je sais que c'est un article ancien, mais je pense que je peux aider davantage avec un exemple fonctionnel que j'utilise toujours!

Dans Apache 2.2, ce serait comme:

    <Location />
       Order deny, allow
       allow from all
    </Location>
    <Location /adm>
        Order deny, allow
        deny from all
        allow from myniceip
    </Location>
    <Location /disabled>
        Order deny, allow
        deny from all
    </Location>

Dans Apache 2.4, ce serait comme:

   <Location />
       require all granted
    </Location>
   #Note that you dont need to use require all denied
   #to require only a group of ips.. 
    <Location /adm>
        require ip myniceip
    </Location>
    <Location /disabled>
        Require all denied
    </Location>

Soyez prudent lorsque vous utilisez l'authentification htacess , cette nouvelle syntaxe peut avoir des effets négatifs et inattendus . Si tel est votre cas, veuillez lire: https://unix.stackexchange.com/questions/413309/apache-2-4-wants-me- décider-exiger-valide-ip-ou-exiger-valide-utilisateur et tout ira bien!

Luciano Andress Martini
la source
Pour moi, la présence de require all grantedl'authentification HTTP empêchée de fonctionner alors merci pour l'info.
authentictech le
@authentictech Non seulement exiger tout accordé peut briser. L'authentification attendue peut être complètement rompue avec cette nouvelle syntaxe si vous n'utilisez pas RequireAll ou RequireAny correctement. Veuillez lire: unix.stackexchange.com/questions/413309/… . Merci pour votre retour.
Luciano Andress Martini