Sto tentando di installare uno software package basato su PHP in un'istanza di Amazon EC2 di Red Hat 7 (ami-8cff51fb) che ha avuto Apache 2.4.6 e PHP 5.4. 16 installato su di esso usando yum. L'installazione non riesce perché dice che una particolare directory deve essere scrivibile dal server web con le autorizzazioni 0755 o 0775.PHP La funzione is_writable() restituisce sempre false per una directory scrivibile
La directory in questione ha 0775 autorizzazioni con proprietà root:apache
. Ho verificato che il processo httpd è eseguito dall'utente apache e che l'utente apache è un membro del gruppo apache.
Se modifico /etc/passwd
per dare temporaneamente l'utente apache una shell di login e poi su
a tale account, sono in grado di creare manualmente i file come utente apache all'interno della directory utilizzando il comando touch
.
Ho dato un'occhiata al codice sorgente dello script di installazione e ho riscontrato che non funziona perché la funzione is_writable()
di PHP restituisce false per la directory in questione. Ho creato uno script di test PHP separato per isolare e verificare il comportamento che sto vedendo:
<?php
$dir = '/var/www/html/limesurvey/tmp';
if (is_writable($dir)) {
echo $dir, ' is writable';
} else {
echo $dir, ' is NOT writable';
}
?>
Questo emette il messaggio non scrivibile. Se cambio $dir
sopra per essere /tmp
, allora esso restituisce correttamente che /tmp
è scrivibile.
Se cambio le autorizzazioni di directory su 0777 e/o modificando la proprietà su apache:apache
, PHP segnala ancora che la directory non è scrivibile. Ho anche provato a creare una directory /test
con le stesse autorizzazioni e proprietà e il mio script di test lo riporta ancora come non scrivibile.
Sono davvero in perdita per spiegare questo comportamento, quindi qualsiasi idea sarebbe gradita!
Grazie in anticipo.
L'elenco di directory per /var/www/html/limesurvey
è indicato di seguito. Le directory tmp
e upload
dispongono di 0775 autorizzazioni come da Lime Survey installation instructions. test.php
è il mio script di test menzionato sopra.
[[email protected] limesurvey]$ pwd
/var/www/html/limesurvey
[[email protected] limesurvey]$ ls -al
total 80
drwxr-xr-x. 20 root apache 4096 Mar 30 11:25 .
drwxr-xr-x. 3 root root 23 Mar 25 14:41 ..
drwxr-xr-x. 2 root apache 38 Mar 10 12:56 admin
drwxr-xr-x. 16 root apache 4096 Mar 10 12:56 application
drwxr-xr-x. 3 root apache 4096 Mar 10 12:56 docs
drwxr-xr-x. 2 root apache 4096 Mar 10 12:56 fonts
drwxr-xr-x. 19 root apache 4096 Mar 10 12:56 framework
-rw-r--r--. 1 root apache 429 Mar 10 12:56 .gitattributes
-rw-r--r--. 1 root apache 399 Mar 10 12:56 .gitignore
-rw-r--r--. 1 root apache 296 Mar 10 12:56 .htaccess
drwxr-xr-x. 4 root apache 4096 Mar 10 12:56 images
-rw-r--r--. 1 root apache 6652 Mar 10 12:56 index.php
drwxr-xr-x. 5 root apache 39 Mar 10 12:56 installer
drwxr-xr-x. 89 root apache 4096 Mar 10 12:56 locale
drwxrwxr-x. 2 root apache 39 Mar 25 14:41 logs
drwxr-xr-x. 4 root apache 49 Mar 10 12:56 plugins
-rw-r--r--. 1 root apache 61 Mar 10 12:56 README
drwxr-xr-x. 4 root apache 4096 Mar 10 12:56 scripts
-rw-r--r--. 1 root apache 380 Mar 10 12:56 .scrutinizer.yml
drwxr-xr-x. 5 root apache 4096 Mar 10 12:56 styles
drwxr-xr-x. 5 root apache 4096 Mar 10 12:56 styles-public
drwxr-xr-x. 12 root apache 4096 Mar 10 12:56 templates
-rw-r--r--. 1 root apache 159 Mar 30 11:11 test.php
drwxr-xr-x. 3 root apache 20 Mar 10 12:56 themes
drwxr-xr-x. 26 root apache 4096 Mar 10 12:56 third_party
drwxrwxr-x. 5 root apache 80 Mar 26 13:45 tmp
drwxrwxr-x. 6 root apache 79 Mar 10 12:57 upload
Esecuzione namei -l /var/www/html/limesurvey/tmp
dà:
[[email protected] ~]$ namei -l /var/www/html/limesurvey/tmp
f: /var/www/html/limesurvey/tmp
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x root root html
drwxr-xr-x root apache limesurvey
drwxrwxr-x root apache tmp
Questa potrebbe essere una domanda stupida, ma hai verificato che la directory esista? – Flosculus
@Flosculus Non è una domanda stupida, ma sì, la directory esiste sicuramente. –
Ho implementato il tuo esempio di directory '/ test' con' 0777', usato il tuo codice e ha funzionato bene. Potresti stampare il 'ls -al' per quella directory per favore? – Flosculus