|
TP2 Contrôle de l'accessibilité |
- Modifier l'accessibilité à un répertoire
- Principe
Il s'agit de réglementer, pour chaque répertoire du site principal (et aussi nous le verrons pour les sites virtuels), le droit d'accéder aux pages que ce répertoire contient, notamment en fonction de la machine cliente. Le fichier dans lequel ce paramétrage s'effectue est : /etc/apache2/sites-available/default
On peut spécifier explicitement des adresses IP, des réseaux, des noms de machine ou de réseau ou all, dans la directive <Directory /...>, avec les clauses order, allow from et deny from
Voir le détail en annexe, ci-dessous.
- Exercices
- Modifier l'accès au site racine (/var/www/) pour autoriser l'accès de tous les machines du sous-réseau
10.194.2. sauf celles qui vous sont voisines. Bien vérifier.
- Interdire l'accès de tous les hôtes sauf localhost, la machine du formateur et une machine voisine.
- Vérifier que l'accès à la doc n'est autorisée que de localhost. Modifier /etcle fichier de configuration pour permettre l'accsè d'une machine voisine
- Permettre l'affichage du contenu d'un répertoire
Vous voulez contrôler la visibilité du contenu d'un répertoire demandé par l'utilisateur. Faut-il autoriser qu'un répertoire puisse être parcouru,
lorsque le serveur ne trouve pas dans ce répertoire, l'une des pages par défaut (dont les noms sont listées dans la clause DirectoryIndex)
- La possibilité de cet affichage est déterminé par l'état de la directive d'indexation Indexes. Si l'indexation est interdit, la demande http://serveur/repertoire peut conduire à une page d'erreur 403 ("You don't have permission to access /repertoire on this server").
- Tester : est-ce que l'option d'indexation est active actuellement pour la racine du site WEB ?
Vérifier en examinant la paramétrage du paragraphe <Directory var/www> dans /etc/apache2/sites-available/default
- Changez Options Indexes .. en Options -Indexes ..
Enregistrer et "reloader" le serveur.
Faire le nécessaire pour bien vérifier l'effet dans les 2 cas : il y a un fichier par défaut, (on pourra par exemple renommer test.php en index.php ou non
- Revenir à la permission d'indexation du site principal
/var/www/, puis y créer un sous-répertoire nommé perso supposé héberger des pages a priori non publiques.
- Y placer quelques pages et donner sur le système des droits suffisants (lecture pour l'utilisateur d'apache2 www-data)
- Dans le fichier dafault de /etc/apache2/sites-available/, écrire les directives de configuration d'un nouveau paragraphe <Directory /var/www/perso> de façon à réduire l'accès de ce site à une seule machine cliente et à interdire son indexation.
- ne pas oublier de recharger apache2
- bien tester : impossibilité d'indexation, mais accès possible aux fichiers, en les nommant explicitement dans l'url.
- Autre façon
- On pourrait décrire le comportement du site perso en plaçant le paramétrage précédent dans un fichier spécifique - par exemple perso.conf, dans le répertoire /etc/apache2/sites-available/
- se placer dans ce répertoire, puis activer ce nouveau "site" avec la commande a2ensite perso.
- constater le changement dans em>/etc/apache2/sites-enabled/.
- Gérer un site dans son répertoire personnel
- Le contexte
Tous vos collègues veulent publier leur page personnelle, voire mettre en ligne leurs cours en direction de leurs élèves. Alors que ceux-ci veulent peut-être "bloguer" pour étaler leur état d'âme .. vous estimez qu'on peut permettre ces publications (vous ne désirez pas les renvoyer aux hébergeurs privés); mais comme administrateur-webmestre du "site officiel" de l'établissement ou du service, vous ne voulez surtout devoir les gérer vous-mêmes ...
Voir des précisions en annexe.
- Rappelez ce que signifie la directive UserDir public_html. Est-elle présente dans le fichier de configuration principal ?
- En fait, cette fonctionnalité est apportée par l'inclusion d'un module nommé mod_userdir.so
A partir de là, retrouvez la directive UserDir public_html
- Ouvrir une console (ou une connexion distante par ssh) pour l'utilisateur stage. Ensuite, celui-ci crée lui-même le répertoire public_html pour héberger son site web, et y place une page d'accueil accueil.html
Positionnez les droits minimum sur ce répertoire de façon à ce que le répertoire personnel dans son ensemble /home/stage reste inaccessible aux autres utilisateurs (voir annexe).
- Accès aux pages persos de stage
Quelle requête permet-elle d'obtenir cette page /home/stage/accueil.html ?
- Expliquer comment accorder à toto un espace de publication WEB, sans lui créer de compte sur le serveur (évidemment il ne pourra
pas mettre lui-même en ligne).
- Gérer un site perso avec .htaccess
Il s'agit maintenant de déléguer la gestion des répertoires WEB personnels à leur propriétaires.
- Paramétrage global
Dans /etc/apache2/sites-available/default, expliquez pourquoi root écrit :
<Directory /home/*/public_html>
Options -Indexes
AllowOverride all
Order deny,allow
deny from all
- Paramétrage par stage
# .htaccess du rép. /home/stage/public_html
Options indexes
order allow,deny
allow from all
Tester.
- Complément
stage place dans son rép. perso les pages (avec un contenu quelconque) index.html et accueil.html
Puis stage modifie le fichier de configuration de son site perso pour y empêcher l'indexation et y imposer que la page d'accueil par défaut soit accueil.html
ANNEXES
Paramétrage d'un répertoire
- Chaque répertoire dont le contenu doit être géré par Apache peut être configuré spécifiquement.
Le paramétrage du répertoire rep est précisé par un ensemble de clauses placées entre les balises
<Directory rep> et </Directory>
- Attention !
Contrairement aux permissions Unix, les clauses s'appliquent AUSSI à TOUS les sous-répertoires.
SAUF .. s'il existe une directive du genre <Directory sous-rep> qui s'applique spécifiquement à l'un des ses sous-répertoires sous-rep.
Dans ce cas, les nouvelles directives bloquent l'héritage et supplantent le paramétrage appliiqué au répertoire parent.
On peut utiliser aussi <Location >, semblable à Directory, mais en spécifiant une URL, plutôt qu'un chemin de répertoire.
- Voici le paramétrage initial
#--------------------- Global Access Configuration ------------------------
# Voici un exemple de paramétrage des permissions d'accès. Il est préférable
# d'être restrictif à la racine et d'étendre les permissions à des répertoires spéciaux.
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
# AllowOverride = All pour donner la priorité aux fichiers .htaccess
AllowOverride None
Order allow,deny
# pour permettre au monde entier d'accéder aux documents
allow from all
# Pour rediriger la page d'accueil dans /apache2-default
RedirectMatch ^/$ /apache2-default/
</Directory>
Règles à appliquer pour autoriser les accès des clients
Dans le conteneur <Directory> d'un répertoire, on peut préciser la liste des hôtes (le séparateur est l'espace) dont les requêtes seront traitées, et ceux dont les requêtes seront rejetées.
On précise d'abord une règle générale avec la directive order allow, deny ou l'inverse, qui précise la règle principale à appliquer aux machines qui figurent sur les listes explicites qui suivent les clauses allow from et deny from
- order allow, deny : autorise les hôtes de la liste allow, puis rejette ceux de la liste deny
- order deny, allow : rejette les hôtes de la liste deny, puis autorise ceux de la liste allow
- exemple1 : soit à autoriser tout le réseau 172.16.0. sauf 172.16.0.25
# quel est le bon ordre : order deny, allow ou bien allow, deny ?
order .....
# par contre l'ordre relatif de ces 2 clauses suivantes n'a pas d'importance
allow from 172.16.0.0/255.255.255.0
deny from 172.16.0.25
- exemple 2 : écrire les directives pour n'autoriser que certaines machines, en plus de localhost, par exemple une machine voisine
Règles à appliquer pour paramétrer l'accès à un répertoire
Les paramétres d'Options permet de préciser l'action d'Apache sur les répertoires
| Option |
signification |
| All | None | toutes | aucune option(s) permise(s) |
| ExecCGI | exécution de scripts autorisée |
| FollowSymLinks | le serveur suivra les liens symboliques rencontrés dans le répertoire |
| Indexes | autorise l'affichage du contenu d'un répertoire (si un fichier par défaut n'y est pas trouvé) |
Autoriser les pages WEB personnelles
- Il s'agit de permettre aux utilisateurs de publier leurs "pages persos" sur le WEB de l'établissement.
Tout naturellement, ces documents devront être placés dans leur répertoire personnel, dans laquel ils sont propriétaires et ont seuls un plein accès. Mais ils devront toutefois être accessible en lecture à tous.
- La page d'accueil doit être présente dans un sous-répertoire du répertoire perso. Par défaut le nom de
ce sous-répertoire est fixé à public_html
En effet cette dénomination est spécifiés par la directive UserDir dans
le fichier httpd.conf . Donc par défaut, on y trouve :
UserDir public_html
- Quelle URL pour accéder à ces pages personnelles ?
Supposons que la page d'accueil s'appelle index.html, pour l'utilisateur toto , sur le serveur ubuntu. Alors L'URL sera
http://ubuntu/~toto/index.html, ou plus simplement : ubuntu/~toto
- On peut n'autoriser l'accès l'ensemble des espaces personnels qu'à certains utilisateurs avec les lignes supplémentaires :
UserDir disable
UserDir enable jean toto ....
- Attention aux droits des fichiers !
L'accès de tous à ces sites persos exige que le droit de parcours x soit accordé à tous les répertoires des
utilisateurs et à public_html(droits 771). Et que le droit de lecture r soit bien sûr accordé aux fichiers des pages pour tous (droits 644)
- Jusqu'ici l'accès à ces pages WEB incluses dans public_html n'est possible qu'au utilisateur qui possède un compte sur le système. En utilisant
UserDir /home/*/public_html, où * symbolise nom d'utilisateur quelconque, celui-ci
n'a plus besoin de posséder un compte sur le système.
Le dispositif .htaccess : déléguer la gestion des répertoires
- Principe
Apache permet de délocaliser la gestion de la configuration, au moyen de fichiers spéciaux appelés par défaut .htaccess.
Chaque fichier .htaccess est placé directement dans le répertoire dont il doit gérer la configuration particulière et éventuellement protéger l'accès.
Ce mécanisme de délégation doit au préalable être soumis à autorisation comme décrit ci-dessous.
- Syntaxe
La clause AccessFileName .htaccess fixe le nom du fichier dont la présence dans un répertoire est considérée comme une directive de configuration pour ce répertoire
La syntaxe à employer dans ces fichiers .htaccess est identique à la syntaxe utilisées dans apache2.conf.
On peut en particulier y inclure des restrictions d'accessibilité par hôte et des autorisations d'accès par utilisateur.
- Fonctionnement
Les fichiers .htaccess étant lus dynamiquement au moment de chaque requête qui concerne son répertoire, toute modification de ces fichiers prend effet immédiatement, contrairement à apache2.conf, pour lequel il est nécessaire de faire relire la configuration au serveur (donc intervention de root !)
Mais alors n'y aurait-il pas possibilité de conflit avec les directives placées dans apache2.conf dans un conteneur de directives <Directory chemin-rép> ...</Directory> ?
C'est la rôle de la directive AllowOverride de préciser la manière selon laquelle les directives contenues dans un fichier .htaccess doivent être prises en compte, si ces directives ont "le droit" de supplanter ou non celles qui sont incluses dans la présente directive.
- Ainsi, l'administrateur a le dernier mot ! S'il veut inhiber totalement l'action de .htaccess, il précisera AllowOverride NONE pour le répertoire. Sinon, il peut accorder des droits complets au fichier .htaccess avec ALL (prise en compte totale) ou limités en ne positionnant que certaines valeurs. On limite souvent cette délégation de gestion à AllowOverride AuthConfig ou AuthUserFile, ce qui est suffisant pour protéger l'accès à un site privé par une authentification.