2012-09-13 22 views
7

Mi registro de errores de Apache está llena deCómo determinar los archivos que Apache "no se puede abrir para la lectura" en el registro de errores

Error opening file for reading: Permission denied 
Error opening file for reading: Permission denied 
Error opening file for reading: Permission denied 

etc.

¿Cómo puedo determinar el archivo o carpeta de archivos que es causando este error de permisos? No hay relación directa entre los errores que aparecen y las solicitudes de access_log.

Googling suggests debo utilizar strace pero cuando lo hago

strace apache2 

o

strace -etrace:open apache2 

la respuesta es detallado y dado que en realidad no he utilizado esta herramienta con éxito antes, estoy no estoy seguro de qué buscar Aquí hay un rastro de lo que aparece.

..... 
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3 
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3 
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 
apache2: bad user name ${APACHE_RUN_USER} 

La última línea es la única que parece que podría ser la causa, pero mi servidor web es el procesamiento de imágenes, y todo tipo de cosas en disco que sería un problema si el usuario apache no fue suficiente.

Gracias.

Respuesta

2

No estoy muy bien informado sobre strace, pero creo que tendrá que hacer algunas otras cosas para que Apache funcione como lo desee.

Si acaba de ejecutar el binario de apache2, su programa se detendrá (como notó) con un nombre de usuario incorrecto porque típicamente el nombre de usuario/grupo apache se configura como parte de la configuración (en/etc/apache2/envvars en mi Instalación Ubuntu 12.04).

Lo que encontré más fácil fue encontrar el script apachectl en mi máquina y buscar "inicio"). Se encuentra una línea similar a:

$HTTPD ${APACHE_ARGUMENTS} -k $ARGV

puede añadir su strace aquí por lo que parece:

strace -etrace:open -f $HTTPD ${APACHE_ARGUMENETS} -k $ARGV

Es necesario incluir la opción -f como Apache se generan un número de procesos y desea rastrearlos todos muy probablemente, al menos esto es lo que funcionó para mí :)

+0

Hola Chris, gracias por tu respuesta. Me olvidé de votar en el momento, y no puedo recordar honestamente cuál era el problema, ni la solución ahora. –

0

Necesita buscar llamadas al open() que resultan en devolución valor -1, errno == EACCES.

tuve que retocar la siguiente línea de comando strace en ubuntu (en/usr/sbin/apachectl):

strace -o /tmp/strace.log -e trace=open -f $HTTPD ${APACHE_ARGUMENTS} -k $ARGV 

Los -o almacena la salida en un archivo. Use un directorio de destino apropiado si le preocupa la filtración de nombres de archivos en un área que todos puedan leer.

Estoy persiguiendo un error similar a mí mismo con un programa de python que se ejecuta en apache mod wsgi. Estoy encontrando estos ...

3556 open("/proc/self/auxv", O_RDONLY) = -1 EACCES (Permission denied) 

creo que mi error tiene que ver con el hecho de que el proceso de trabajo wsgi cae privilegio de la raíz a la usuario normal ejecuta la aplicación, pero después de la caída de privilegio, /proc/self/auxv sigue siendo ilegible para los procesos regulares. -- tal vez.

Cuestiones relacionadas