J'ai utilisé Webmin pour créer l'hôte virtuel suivant:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
Et quand redémarrant Apache, je reçois
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
La chose est que le répertoire existe absolument. Je regarde juste à ça. pwd
me montre que c'est mon annuaire actuel, etc. Ce n'est pas si difficile de bien épeler. Je ne trouve aucune autre erreur ou avertissements dans les journaux httpd. Apache: Apache possède le répertoire et tous les sous-répertoires/fichiers. Il n'y a aucun lien symbolique ou quoi que ce soit impliqué ici. Qu'est-ce que je manque ou que dois-je regarder d'autre pour déterminer pourquoi c'est?
Os est Centos 6.0
La première chose qui a sauté dans mon esprit est que Apache a la permission d'accéder à ce répertoire?
Aussi, ceci: https://stackoverflow.com/questions/3948038/apache-says-my-documenttroot-directory-duesnt-exist
Voici une approche de tutoriel de l'affaire SELINUX:
Découvrez si SELINUX est actif:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Si tel est le cas, une vérification comparative pourrait aider. Par exemple, un serveur a une documentation par défaut à /var/www/html
, mais nous le voulons ailleurs comme /path/to/document/root
.
Si SELINUX ne joue pas activement avec la ressource, ls -dZ
sur le répertoire montrera quelque chose comme:
$ ls -dZ /path/to/document/root
? /path/to/document/root/
D'autre part, si les contextes SELINUX sont appliqués, ls -dZ
ressemble plus à:
$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root
Si nous comparons à une documentation de travail, cela ressemblerait à quelque chose comme:
$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
Les _r
et _t
se rapporte à -r
(--role
et -t
(--type
) arguments à chcon
. Voici une page d'homme coupée:
NAME
chcon - change file security context
SYNOPSIS
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
DESCRIPTION
Change the security context of each FILE to CONTEXT. With --reference,
change the security context of each FILE to that of RFILE.
--reference=RFILE
use RFILE's security context rather than specifying a CONTEXT value
-R, --recursive
operate on files and directories recursively
À première estimation, ce qui suit pourrait sembler fonctionner, mais pourrait ne pas.
$ Sudo chcon -R -t httpd_sys_content_t /path/to/document/root
Si le serveur Web ne peut toujours pas voir la documentation, notez que le contexte compte tout le chemin de la racine:
$ Sudo chcon -R -t httpd_sys_content_t /path/to/document
$ Sudo chcon -R -t httpd_sys_content_t /path/to
$ Sudo chcon -R -t httpd_sys_content_t /path
À ce stade, le serveur Web peut voir le répertoire.
Oui, j'ai appris le difficile de ce soir.
Remarque: l'utilisation de chcon Conceptuellement conceptuellement un inconvénient par Documentation RedHat ( 5.6.1. Modifications temporaires: Chcon ) qui indique:
The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.
Utilisez Semanage et Restorecon Pour faire plus de changements permanents. Un bref exemple:
$ Sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
"/path/to/document/root(/.*)?"
$ Sudo restorecon -FR /path/to/document/root
En ce qui concerne Restorecon, Notez que F est nécessaire pour affecter tout le contexte (c'est-à-dire utilisateur et type). En outre, r signifie apporter des modifications récursives. Arguments V ou P Peut montrer des progrès sous une mode verbeuse ou terrese. Utilisez FRNV Pour voir ce qui se passerait sans apporter de modifications.
Une fois Semanage est utilisé de cette manière, il est possible d'afficher des modifications de sécurité locales avec une commande comme:
$ Sudo semanage export
La sortie de Semanage export peut être enregistrée et utilisée par Semanage Importer Pour faciliter l'application d'un ensemble de modifications à divers systèmes.
Remarque: cette réponse fournit un contexte de type le plus élémentaire pour un site. La sécurité peut être beaucoup plus granuleuse. Par exemple, voir une liste de types pouvant s'appliquer aux pages de serveur Web avec une commande comme:
$ seinfo -t | grep http
Remarque: utilitaires comme Semanage et Seinfo Peut ne pas être installé par défaut. Au moins sur certaines distributions, les packages requis peuvent être nommés quelque chose comme ceci:
policycoreutils-python
setools-console
Cela ressemble à SELINUX.Je suggérerait de travailler avec elle. Regardez dans le répertoire/var/journal/audit pour confirmer.
Pire cas, vous pouvez toujours désactiver SELINUX, comme indiqué précédemment, mais je vous suggère de travailler avec elle à la place. Par exemple, si je devais créer un répertoire à utiliser avec Apache, il n'aura pas le bon contexte, comme indiqué ici.
[root@amp23140 www]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 whatever
Donc, si cela se produit, j'applique simplement le contexte d'un autre répertoire, lequel dans ce cas est HTML:
[root@amp23140 www]# chcon whatever --reference=html
[root@amp23140 www]# ls -lZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 whatever
Utilisez cette commande en root pour modifier le contexte de sécurité de "httpd_sys_content_t" qui permet à Apache d'exécuter.
chcon -R -h -t httpd_sys_content_t /var/www/whatever
Utilisation ls -dZ /var/www/whatever
Pour voir les détails de sécurité