Usé Webmin para crear el siguiente host virtual:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
Y cuando reinicio Apache me sale
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
La cuestión es que el directorio existe. Lo estoy mirando fijamente. pwd
me muestra que es mi directorio actual, etc. No es tan difícil deletrearlo bien. No puedo encontrar ningún otro error o advertencia en los registros de httpd. apache: apache posee el directorio y todos los subdirectorios / archivos. No hay enlaces simbólicos ni nada involucrado aquí. ¿Qué me estoy perdiendo o qué más debo mirar para determinar por qué es esto?
El sistema operativo es CentOS 6.0
apache-2.2
centos
Jake Wilson
fuente
fuente
DocumentRoot
, que podría darle una idea de lo que está viendo el servidor web. También es posible que desee verificar los otros directorios a lo largo de la ruta, aunque si realmente está debajo de/var/www/
ellos no debería ser un problemaRespuestas:
Lo primero que me vino a la mente es ¿Apache tiene permiso para acceder a ese directorio?
Además, esto: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
fuente
apache:apache
, sin embargo, seguí ese enlace (¿está en SO por alguna razón?) Y de hecho SELinux fue el problema. SELinux causa más problemas que hace bien a la OMI.setenforce 0
solucioné, pero mirando los permisosls-laZ
, el enlace simbólico tiene los mismos permisos que otros archivos a los que puede acceder, aparte de chmod. Los archivos son -rw-r - r--, y el enlace simbólico es lrwxrwxrwx. ¿Podría ser esa la razón por la que no funciona con setenforce 1?Aquí hay un enfoque tutorial para el caso de SELinux:
Averigüe si SELinux está activo:
Si es así, algunas comprobaciones comparativas podrían ayudar. Por ejemplo, un servidor tiene un DocumentRoot predeterminado en
/var/www/html
, pero lo queremos en otro lugar como/path/to/document/root
.Si SELinux no está jugando activamente con el recurso,
ls -dZ
en el directorio se mostrará algo como:Por otro lado, si se aplican los contextos SELinux, se
ls -dZ
parece más a:Si lo comparamos con un DocumentRoot en funcionamiento, se vería algo así:
El
_r
y se_t
relacionan con-r
(--role
y-t
(--type
) argumentos parachcon
. Aquí hay una página de manual reducida:A primera vista, lo siguiente puede parecer que funciona, pero puede que no.
Si el servidor web todavía no puede ver DocumentRoot, tenga en cuenta que el contexto es importante desde la raíz:
En este punto, el servidor web puede ver el directorio.
Sí, aprendí por las malas esta noche.
NOTA: El uso conceptual de chcon tiene una desventaja según la documentación de RedHat ( 5.6.1. Cambios temporales: chcon ) que establece:
Use semanage y restorecon para hacer cambios más permanentes. Un breve ejemplo:
Con respecto a restorecon , tenga en cuenta que -F es necesario para afectar todo el contexto (es decir, usuario y tipo). Además, -R significa hacer cambios de forma recursiva. Los argumentos -v o -p pueden mostrar el progreso de manera detallada o concisa. Utilice -FRnv para ver qué sucedería sin hacer ningún cambio.
Una vez que se utiliza semanage de esta manera, es posible ver los cambios de seguridad local con un comando como:
El resultado de la exportación de semanage se puede guardar y utilizar mediante la importación de semanage para facilitar la aplicación de un conjunto de cambios a varios sistemas.
NOTA: Esta respuesta proporciona un contexto de tipo más básico para un sitio. La seguridad puede ser mucho más granular. Por ejemplo, vea una lista de tipos que se pueden aplicar a las páginas del servidor web con un comando como:
NOTA: Las utilidades como semanage y seinfo pueden no estar instaladas por defecto. Al menos en algunas distribuciones, los paquetes requeridos pueden llamarse así:
fuente
Suena como SELinux. Te sugiero que trabajes con él. Mire en el directorio / var / log / audit para confirmar.
En el peor de los casos, siempre puede desactivar selinux, como se señaló anteriormente, pero le sugiero que trabaje con él. Por ejemplo, si tuviera que crear un directorio para usar con Apache, no tendría el contexto correcto, como se señala aquí.
Entonces, si eso sucede, simplemente aplico el contexto desde otro directorio, que en este caso es html:
fuente
Use este comando en la raíz para cambiar el contexto de seguridad de "httpd_sys_content_t" que permite que Apache se ejecute.
Use
ls -dZ /var/www/whatever
para ver los roles de seguridad de detallesfuente