Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/04/2020, à 10:24

DonutMan75

[RESOLU] Apache2 et directive Directory

Hello,
je profite du confinement pour me plonger un peu dans le paramètrage d'un serveur Apache2.

Dans le livre "Apache2.4 Installation et Configuration" de Nicolas Martinez, je vois ces lignes :

<Directory />
  Options None
  AllowOverride None
  Require all denied
</Directory>

<Directory /opt/prod/apache2.4/htdocs/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

J'aurais aimé avoir le retour de quelqu'un de plus expérimenté que moi sur la signification et la portée de ces lignes.

1) Les directives Directory sont additives et la directory de plus long chemin aura le dernier mot ? Dans l'exemple donné, on interdit tout accès à n'importe quel répertoire (première directive Directory) SAUF dans le cas particulier où on tape dans /opt/prod/apache2.4/htdocs/ (seconde directive Directory).

Je crois comprendre que les règles de préséance sont logiques (le chemin de plus long chemin a le dernier mot) plutôt que chronologique (a directive définie en dernier dans le fichier de conf aura le dernier mot); ainsi que semble l'indiquer la doc :

doc Apache a écrit :

Si plusieurs sections <Directory> (sans expression rationnelle) correspondent au répertoire (ou à un de ses parents) qui contient le document, les directives de la section <Directory> dont le chemin est le plus court sont appliquées en premier, en s'intercalant avec les directives des fichiers .htaccess.

En particulier, je suppose que ceci est équivalent à l'exemple du livre (même si ça pique un peu les yeux de lire ça dans cet ordre) :

<Directory /opt/prod/apache2.4/htdocs/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

<Directory />
  Options None
  AllowOverride None
  Require all denied
</Directory>

2) Pour chacun des répertoires, on peut définir un certain nombre de comportement par défaut d'Apache
Options Indexes : si index.html n'existe pas lorsqu'on pointe sur le répertoire en question, on affichera plutôt un listing dudit du répertoire. Mais si on ne met pas Indexes, il se passe quoi ???
Options FollowSymlinks : on autorise Apache à suivre les liens symboliques. Ce faisant, est-il possible de 1/ sortir de  /opt/prod/apache2.4/htdocs/ ? 2/ taper dans un répertoire qui n'appartient pas au user qui fait tourner le serveur Apache ?
Options None : on ne définit aucune option. Je ne vois pas en quoi cette option est utile dans le cas de la direction "/" : de toute façon, nous ne pouvons pas y accéder non ?

3) AllowOverride None : on ne permet pas à d'éventuels fichiers de modif (par défaut les ".htaccess") de venir modifier le comportement par défaut du serveur

4) Require all denied/granted : formulation la plus simple de la directive Require : on autorise ou on interdit.

5) Je découvre qu'on peut faire plein de trucs sympa avec Require et notamment mettre en place une authentification basique. Néanmoins cette dernière repose sur un certain nombre de modules que je n'arrive pas à différencier... Savez-vous quelles sont les différences entre authz_core, authz_user, authn_core, authn_file et auth_basic ???

Merci d'avance pour vos retours smile

Donut

Dernière modification par DonutMan75 (Le 21/04/2020, à 15:41)

Hors ligne

#2 Le 21/04/2020, à 11:56

bruno

Re : [RESOLU] Apache2 et directive Directory

Bonjour,

Quand on lit des livres ou des documentations sur Apache, il faut être capable de les adapter aux spécificités de configuration de la distribution utilisée. Lire la doc sous /usr/share/doc/apache2 peut aider, ainsi que les wiki Debian et Ubuntu.

1) L'exemple que tu cites correspond au restrictions de base présentes dans le fichier /etc/apache52/apache2.conf fourni par les mainteneurs Debian. Pour les restrictions ou autorisations par répertoire, je pense que tu as compris. Il faut cependant bien noter les contextes dans lesquels peuvent s'appliquer un jeu de directives <Directory> :
- globalement au niveau du serveur : par exemple dans un fichier sous /etc/apache2/conf-enabled/ ou dans /etc/apache2/apache2.conf (à ne pas modifier)
- au niveau d'un hôte virtuel : dans un fichier sous /etc/apache2/sites-enabled/
- au niveau d'un répertoire : dans un fichier .htaccess

2) Je serais tenté de te renvoyer à la doc officielle d'Apache qui est très bien faite et traduite en français wink
- par défaut l'option Indexes est activée. Ceci présente un risque puisqu'en l’absence de fichier index.*** le contenu du dossier est affiché. La prudence veut donc que l'on spécifie :

Options -Indexes

Dans ce cas une page d'erreur 403 sera renvoyée en l’absence de fichier index.***
- FollowSymlinks à manier avec une grande prudence, ce n'est utile que s'il y a des liens symboliques à l’intérieur du dossier racine du site. Oui potentiellement cela peut donner accès à un dossier en dehors du site.
Dernières remarque sur les options :
- si on veut autopriser on le fait avec un plus, si on veut interdire on le fait avec un moins :

Options +Followsymlinks +Multiviews -Indexes

Pour les modules d'authentification voir la doc apache :
https://httpd.apache.org/docs/2.4/fr/mod/

#3 Le 21/04/2020, à 14:39

DonutMan75

Re : [RESOLU] Apache2 et directive Directory

Hello Bruno,
merci pour ton retour smile
Oui je me rends compte que la doc est vraiment très bien faite !

Une dernière question qui me taraude... La doc d'Apache insiste lourdement sur la sécurisation des répertoires d'Apache.

Chez moi, le serveur Apache est lancé par root (sudo httpd....) puis s'exécute en tant qu'utilisateur httpd24 créé pour l'occasion grâce aux directives User et Group.

User httpd24
Group httpd24

Dans le répertoire d'Apache (j'ai fait une installation "manuelle" qui a surtout un intérêt didactique), je vois en particulier que les répertoires bin, logs et htdocs sont la propriété de root :

$ ll
drwxr-xr-x  2 root root  4096 avril  7 17:45 bin
drwxr-sr-x  2 root root  4096 août   9  2019 htdocs
drwxr-xr-x  2 root root  4096 avril 14 18:34 logs
(...)

Que bin/ appartiennent à root:root et soit en 755 c'est ce qu'il faut car seul root est sensé pouvoir modifier le contenu de bin/ (et d'ailleurs on est en ligne avec les recommandations d'Apache cf. mon lien ci-dessus).

Je pense ceci dit que htdocs (qui par défaut contient les sites que Apache fournira) pourrait appartenir à httpd24:httpd24. C'est plus propre ?

Mais j'ai un gros doute sur logs/ : qui écrit les logs ? Est-ce root (i.e. celui qui lance la commande httpd) ou bien est-ce httpd24 (i.e. celui a qui on laisse la main une fois le serveur lancé) ? L'expérience me montre que c'est root... Donc root lance le serveur et écrit les logs, mais c'est httpd24 qui gère la lecture et l'envoi des ressources ? Au final, les permissions de mon répertoire de logs sont correctes ?

Pour terminer, je remarque que le SGID est positionné sur htdocs ce qui signifie (si je ne me trompe pas) que l'intégralité du contenu de htdocs appartiendra par défaut au groupe root. Est-ce normal ? Pour quelle raison ?

Merci beaucoup smile

Dernière modification par DonutMan75 (Le 21/04/2020, à 14:40)

Hors ligne

#4 Le 21/04/2020, à 15:10

bruno

Re : [RESOLU] Apache2 et directive Directory

Bon ce n'est pas une installation standard Debian/Ubuntu donc pour ne pas induire en erreur les lecteurs, mes réponses concerneront uniquement une installation par les paquets Debian/Ubuntu.

Le processus de base serveur Apache est exécuté par root. Les sous processus sont lancés par www-data sous Debian/Ubuntu. La manière dont sont gérés ces sous processus et leur nombre dépend du MPM utilisé et de sa configuration.

Le choix du dossier où sont hébergés les sites, le propriétaire, le groupe et droits d'accès dépendent des choix de l'administrateur système. La seule contrainte est que, d'une manière ou d'une autre, les fichiers statiques puissent être lus par www-data.
Sous Ubuntu la mauvaise habitude est d'utiliser /var/www/html. Personnellement je mets les sites dans /srv/web/example.com/www

Les logs appartiennent à root:adm sous Debian/Ubuntu. Par sécurité élémentaire seul root et les membres du groupe adm peuvent lire les logs.

Positionner le SGID sur un dossier permet effectivement que les fichiers crées dans ce dossier héritent du groupe du dossier parent. Attention cela ne marche pas pour les fichiers copiés. Comme indiqué précédemment c'est un choix de l’administrateur système.

Dernière modification par bruno (Le 21/04/2020, à 15:11)

#5 Le 21/04/2020, à 15:41

DonutMan75

Re : [RESOLU] Apache2 et directive Directory

Super, merci pour ces précisions smile
Bonne fin de journée,

D.

Hors ligne