2012-09-13 14 views
7

mio log degli errori Apache è pieno diCome determinare i file che Apache "non può aprire per la lettura" in log degli errori

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

ecc

Come è possibile determinare il file o la cartella di file che è causando questo errore di permessi? Non c'è alcuna relazione diretta tra gli errori che appaiono e le richieste di access_log.

Googling suggests dovrei usare strace ma quando lo faccio

strace apache2 

o

strace -etrace:open apache2 

la risposta è prolisso e visto che non ho veramente usato questo strumento con successo prima, io sono Non sai bene cosa cercare. Ecco una traccia di ciò che appare.

..... 
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} 

L'ultima riga è l'unico che sembra che potrebbe essere la causa, ma il mio webserver è l'elaborazione delle immagini, e ogni sorta di roba disco che sarebbe un problema se l'utente apache non era sufficiente.

Grazie.

risposta

2

Non sono molto informato su strace, ma penso che dovrete fare qualche altra cosa per far funzionare Apache come volete.

Se si esegue solo il binario apache2, il programma si fermerà (come si è notato) con un nome utente errato perché in genere il nome utente/gruppo di apache sono impostati come parte della configurazione (in/etc/apache2/envvars sul mio Installazione di Ubuntu 12.04).

Quello che ho trovato più facile era trovare lo script apachectl sul mio computer e cercare "start". Troverete una linea che assomiglia:

$HTTPD ${APACHE_ARGUMENTS} -k $ARGV

puoi aggiungere la tua strace qui così sembra:

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

È necessario includere l'opzione -f come apache si riproducono un numero di processi e si desidera rintracciarli tutti molto probabilmente, almeno questo è ciò che ha funzionato per me :)

+0

Ciao Chris, grazie per la tua risposta. Ho trascurato di alzare la voce al momento, e non posso onestamente ricordare quale fosse il problema, né la soluzione era ora !! –

0

È necessario cercare le chiamate a open() che restituiscono un ritorno valore -1, errno == EACCES.

ho dovuto modificare la seguente riga di comando strace su Ubuntu (in/usr/sbin/apachectl):

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

I -o memorizza l'output in un file. Utilizzare una directory di destinazione appropriata se si è preoccupati di perdite di nomi di file in un'area leggibile da tutti.

Sto inseguendo un bug simile io stesso con un programma python in esecuzione in apache mod wsgi. Sto trovando questi ...

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

penso che il mio errore ha a che fare con il fatto che il processo di lavoro WSGI scende privilegio da root al normale utente che esegue l'applicazione, ma dopo la caduta di privilegio, /proc/self/auxv rimane ancora illeggibile a processi regolari. -- può essere.

Problemi correlati