Impossibile scrivere file su CentOS


2

Ho un VPS in esecuzione su CentOS 6 e apache2 come server web. Ho diversi script PHP in esecuzione sul mio server e tutto procede senza intoppi, tranne che per la scrittura di file. Per qualche ragione, i miei script PHP non sono in grado di scrivere o creare file.

Sto utilizzando la posizione predefinita di /var/www/html/proprietà di root:root.

Ho provato temporaneamente CHMODing directory e file, senza successo.
Ho anche provato a impostare i permessi delle cartelle su 777, stesso risultato - nessun successo.

Questo è abbastanza strano, e io sono un principiante quando si tratta di gestire VPS.

Ho aggiunto la riga di log degli errori PHP a php.ini e gli ho detto di archiviare il login /var/log/


1) Con quale ID utente eseguire gli script PHP? 2) In quali directory stai cercando di scrivere? 3) Chmod 777 è una pessima idea. Per favore annulla. 4) Eventuali errori nei registri?
Hennes,

1) Non lo so, come faccio a scoprirlo? 2) / var / www / html 3) Era solo un tentativo, l'ho annullato immediatamente 4) No, se i registri sono in / var / log / allora non c'è nessun registro degli errori.
Interrotto il

1) Iniziamo dalle basi: quale server web stai usando? NGIX, xshttp, apache, ...? 2) Tehn a seconda di quale server, come è configurato? (spesso come utente "nessuno" o un utente dedicato con diritti esplicitamente limitati per limitare potenziali danni se vieni violato. (Il controllo dell'utente :: gruppo di / var / www / html può dare un suggerimento qui). 4) La posizione del registro varia a seconda del server. Quindi questo è in sospeso l'1.
Hennes,

1) Sto usando apache2, mi spiace non averlo menzionato. 2) Sembra che root sia il proprietario di /var/www/html(ho usato la -l, per verificarlo, due colonne continuano a dire "root"). 3) Ho aggiunto la riga di log degli errori PHP su php.ini e gli ho detto di archiviare il login/var/log/
Aborted

2
Quali errori vengono visualizzati quando si tenta di utilizzare php per scrivere un file?
Lawrence,

Risposte:


2

CentOS è uno di quei sistemi operativi che spesso viene fornito con qualche forma di SELinux installato. Ci sono diverse guerre sante sul fatto che usare SELinux sia una cosa buona o uno spreco, ma è una scelta che dovrai fare.

Se sei ancora un principiante, consiglierei di trascorrere del tempo con SELinux spento, e quindi una volta che hai tutto in esecuzione puoi facoltativamente attivarlo e iniziare a riconfigurare.

NB: Il modo reale di fare le cose è l'opposto: iniziare con un sistema completamente bloccato e uno a uno abilitare le cose di cui hai bisogno.


Grazie mille per questo - ho dovuto migrare un server Debian su CentOS e per tutta la vita non sono riuscito a capire perché la stessa identica configurazione non funzionasse (stavo ottenendo errori di autorizzazione dei file con PHP dappertutto il posto), fino a quando non ho spento SELinux ... se è utile per chiunque legga questo ho seguito le istruzioni qui per spegnerlo
Dave Hollingworth

0

Non dovresti mai usare /var/www/htmlper archiviare i tuoi file. Non è pensato per essere usato come memoria temporanea. Uno script PHP dovrebbe restituire l'html generato, non scriverlo in un file.

Se hai davvero bisogno di archiviare dati da qualche parte, dovresti creare una nuova cartella con le giuste autorizzazioni. Su Linux spesso nobodyc'è l'account utente che esegue apache, ma può anche essere www-data o semplicemente apache. Puoi dare ad Apache l'accesso a quella cartella:

chown nobody:nobody <dirname>

L'impostazione di troppe autorizzazioni su una cartella può anche causare errori, se apache è impostato per impedire l'esecuzione di file con le autorizzazioni di 777 (scrivibili in tutto il mondo).

Un modo molto semplice per ottenere tutto nel modo giusto è consentire a PHP di creare la directory stessa in primo luogo:

<?php
 $dir = 'path-to-folder/myFolder';
 if ( !file_exists($dir) )
   mkdir ($dir, 0777);
 file_put_contents ($dir.'/test.txt', 'Hello World');

Sto gestendo un sito Web di hosting di immagini e devo archiviare tutte le immagini all'interno di una cartella. Inoltre, tendo ad archiviare i log in file di testo .log anziché nel database e non riesco ad aggiungere testo ai file.
Interrotto il

1
Utilizzare PHP come sopra per creare una directory e un file in esso, quindi esaminare il proprietario e le autorizzazioni. Questo ti darà tutte le informazioni di cui hai bisogno.
harrymc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.