Error 500 en una nueva configuración de Apache en Fedora 23. Un archivo se carga y el otro no

Error 500 en una nueva configuración de Apache en Fedora 23. Un archivo se carga y el otro no

Muy bien, esto me parece un poco extraño.

Entonces, la mayor parte de mi experiencia con Apache ha sido en una instalación de servidor Ubuntu. Pero después de que el disco duro de mi servidor experimentó una falla catastrófica (de la cual, afortunadamente, recuperé todos los datos), aproveché la oportunidad para cambiar al último servidor Fedora. Hubo algunas razones para esto, pero la más importante fueron los problemas con el instalador del servidor Ubuntu, específicamente la imposibilidad de reconocer mi teclado inalámbrico y la rotura de mi último teclado con cable.

De todos modos, instalé httpd (apache), php, postgresql y php-pgsql. Y luego moví todas las páginas de mi sitio anterior al nuevo directorio web (/var/www/html/). Luego recibí un error 500.

Me decidí por una broma de empezar de cero. Moví mis páginas web a un lado (a /var/www/html2/) y creé una pequeña página para probarlas. Sólo HTML básico, nada sofisticado, nada de PHP, sólo lo básico.

<html>
<head>
<title>HOME!!!</title>
</head>
<body>
<h1>THIS WORKS!!!</h1>
</body>
</html>

Se cargó sin problemas.

Luego moví todas las páginas a la carpeta principal (con la excepción de .htaccess por ahora), y la página que acabo de crear todavía funcionó bien. Sospechando que el problema era con php, agregué un poco de código php al final:

echo 'hello';

Funcionó bien.

Aquí es donde se pone raro. Intenté incluir el antiguo footer.php de mi sitio en esta pequeña página de prueba y ahí es donde comienzan los problemas. El pie de página simplemente no se carga.

<?php include 'footer.php'; ?>

Se carga el resto de la página, pero no el pie de página. Luego, por diversión, copié todo el contenido del archivo de pie de página en un nuevo archivo llamado footer2.php y cambié la página de prueba para hacer referencia a footer2.php, y se carga completamente sin problemas.

Finalmente creo que he descubierto algo, así que cambio los permisos de footer.php para que coincidan con footer2.php. Y todavía no se carga.

Por alguna razón, footer.php no se carga, pero footer2.php sí.

Entonces, ¿cuál es el diferencial?

¡Estos archivos son exactamente iguales! Aquí tienes la prueba:

[blackwidower@Twilight html]$ md5sum footer*
257cbd773ed765deb5ad0015852cdf20  footer2.php
257cbd773ed765deb5ad0015852cdf20  footer.php
[blackwidower@Twilight html]$ ls -l footer*
-rw-rw-r--. 1 blackwidower blackwidower 1271 Feb  1 00:08 footer2.php
-rw-rw-r--. 1 blackwidower blackwidower 1271 Feb  1 00:08 footer.php

Sin embargo, uno carga y el otro no.

¿Hay algo que pueda hacer para encontrar más datos que puedan separar estos archivos?

Como referencia, aquí está el error_log de Apache:

[Mon Feb 01 00:14:15.160242 2016] [core:notice] [pid 1800] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Feb 01 00:14:15.161310 2016] [suexec:notice] [pid 1800] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.7.2. Set the 'ServerName' directive globally to suppress this message
[Mon Feb 01 00:14:15.192180 2016] [auth_digest:notice] [pid 1800] AH01757: generating secret for digest authentication ...
[Mon Feb 01 00:14:15.192361 2016] [http2:warn] [pid 1800] AH02951: mod_ssl does not seem to be enabled
[Mon Feb 01 00:14:15.193015 2016] [lbmethod_heartbeat:notice] [pid 1800] AH02282: No slotmem from mod_heartmonitor
[Mon Feb 01 00:14:15.218713 2016] [mpm_prefork:notice] [pid 1800] AH00163: Apache/2.4.18 (Fedora) PHP/5.6.17 configured -- resuming normal operations
[Mon Feb 01 00:14:15.218762 2016] [core:notice] [pid 1800] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Feb 01 00:14:43.969957 2016] [:error] [pid 1801] [client 192.168.7.7:49878] PHP Fatal error:  Call to undefined function displayCopyrightInfo() in /var/www/html/footer2.php on line 13
[Mon Feb 01 00:14:44.086110 2016] [core:error] [pid 1802] (13)Permission denied: [client 192.168.7.7:49880] AH00035: access to /images/cc-by-nc-nd-88x31.png denied (filesystem path '/var/www/html/images/cc-by-nc-nd-88x31.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:14:44.087064 2016] [core:error] [pid 1804] (13)Permission denied: [client 192.168.7.7:49882] AH00035: access to /images/valid-xhtml10-blue.png denied (filesystem path '/var/www/html/images/valid-xhtml10-blue.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:14:44.087737 2016] [core:error] [pid 1806] (13)Permission denied: [client 192.168.7.7:49884] AH00035: access to /images/vcss-blue.png denied (filesystem path '/var/www/html/images/vcss-blue.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:15:47.538488 2016] [:error] [pid 1808] [client 192.168.7.7:49890] PHP Warning:  include(footer.php): failed to open stream: Permission denied in /var/www/html/index2.php on line 7
[Mon Feb 01 00:15:47.538534 2016] [:error] [pid 1808] [client 192.168.7.7:49890] PHP Warning:  include(): Failed opening 'footer.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/index2.php on line 7

EDITAR:

Por consejo de una persona. Ejecuté ls -Z. Esto es lo que encontré:

unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/footer2.php
               system_u:object_r:fusefs_t:s0 /var/www/html/footer.php

Entonces encontré un diferencial. La pregunta es: ¿Qué significa esto y cómo se corrige?

Respuesta1

Entonces encontré un diferencial. La pregunta es: ¿Qué significa esto y cómo se corrige?

Ampliando lo que señaló el usuario @Dirk, SELinux es un sistema que se basa en "contextos" para aumentar la seguridad de su sistema, un contexto describe qué tipo de acciones se pueden realizar en un determinado archivo o directorio o para qué se puede usar un archivo. . En este caso, footer2.phptiene un contexto de httpd_sys_content_t, por lo que significa que el archivo se puede utilizar para "propósitos http", lo que debe hacer es agregar la misma etiqueta de contexto para footer.phppermitir que sea accesible a través del sistema de seguridad SELinux, o simplemente restaurar el contexto en el directorio principal (en la mayoría de los sistemas, de forma predeterminada, los archivos en la /var/wwwubicación están configurados en etiquetas para "propósitos http"). Una alternativa a esto es deshabilitar SELinux por completo, pero no es una buena práctica.

Entonces,

Para establecer (permanentemente) la etiqueta de contexto en el footer.phparchivo:

semanage fcontext -a -t httpd_sys_content_t /var/www/html/footer.php
restorecon /var/www/html/footer.php

Puede hacer lo mismo en el directorio principal (y todo su contenido):

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -R "/var/www/html(/.*)?"

Puedes encontrar más información sobre elPortal del cliente de Red Hat para Linux con seguridad mejorada.

información relacionada