• Moderatore

    Problema permessi cartella

    Non capisco il motivo, ma sul mio server Linux CentOS 6.x l'interprete php ogni qualvolta che eseguo uno script su uno dei siti caricati al suo interno, magari per caricare un file o utilizzare la funzione fopen() mi richiede i permessi cartella 777.
    Analizzando questa cosa è come se l'interprete php non facesse parte del gruppo proprietario, ma che richiedesse i permessi pubblici.
    C'è soluzione a questa cosa?
    Vorrei avere l'interprete php che mi scrivesse in una cartella con i permessi 755 e file con permessi 644.

    Grazie


  • Super User

    L'interprete php non fa parte del gruppo proprietario, ma è eseguito come root!
    Ti sconsiglio vivamente di fare delle modifiche al demone php!
    Eventualmente crea un utente ad-hoc ed esegui gli script che crei!


  • Moderatore

    Bene, allora se è root, perchè mi richiede ogni volta i permessi pubblici?
    Facciamo un esempio:

    Realizzo uno script per importare un'immagine da un form, all'interno della cartella uploads.
    Ora, tale script, su un qualsiasi hosting con permessi cartella 755 funziona, nel mio server richiede i 757 o 777, per tanto php per scrivere richiede i permessi pubblici e la cosa non mi piace.

    Ripeto la domanda, c'è soluzione?


  • Super User

    La soluzione c'è, basta capire come è stato configurato il php e che versione php è installata sul tuo server.


  • Moderatore

    Il php è 5.3.3
    Ho guardato da phpinfo() tutti i setup e mi sembra che sia tutto ok. Cmq se gli vuoi dare un occhio, metto su un file al volo che tolgo domani.
    Lo trovi qui: stefanopascazi.it/phpinfo.php


  • Super User

    Per me è tutto ok... in che modo importi l'immagine via php, tramite http o html code?


  • Moderatore

    Ti faccio una ipotesi dettagliata.
    Devo creare un nuovo sito web per un cliente hostato sul mio server.
    Dal pannello plesk, creo il cliente e gli assegno un nuovo dominio, quindi automaticamente tramite plesk linux crea gruppo e utente
    Nel suo spazio hosting c'è un normalissimo script php che preleva i campi da un form ( ipotizzando di inserire un'immagine 😞

    • creo una nuova directory: chmod( 'percorso', 0755 );
    • tramite funzione file_uploaded, carico il file passando il $_FILE['tmp'] alla nuova cartella

    Tutto qua. Al massimo non creo la cartella e scrivo per ipotesi nella stessa root dello script. Sta di fatto che il sistema funziona ovunque, tranne che sul mio server, perchè ogni cartella è impostata con permessi 755. Per fa funzionare il tutto devo abilitare la cartella a 757, vale a dire con permessi di scrittura pubblici.
    Tale problema lo riscontro anche con le funzioni fopen(), fwrite etc, in pratica con qualsiasi cosa che abbia a che fare con la scrittura o nelle cartelle o nei file.


  • Super User

    Mi dispiace non esserti d'aiuto, al momento, in quanto ho sempre rifiutato categoricamente di adottare l'utilizzo di strumenti proprietari per la gestione dei servizi di hosting.
    Con plesk un paio di mesi fa ho riscontrato moltissimi problemi con due utenti di questo forum!
    A questo punto la chiave di lettura e la relativa soluzione è nel settaggio del tuo pannello di hosting!


  • Moderatore

    Ti illustro, magari ti può tornare utilie o a te o qualcun'altro 😉
    Sono andato a spulciare a fondo al problema.
    In un normale web server, che non utilizzi cplane o plesk gruppo e utente della cartella /var/www/html/ sono sempre apache:apache
    In plesk (o ra in cpanel non so) quando crei un sito, ti assegna gruppo e utente userftp : psacln
    Ora, mi può anche andar bene, anche perchè ho provato a settare apache:apache e mi blocca tutto, ma il problema è il seguente.
    Quando esegui php come modulo apache e devi magari creare una cartella, php avendo i permessi del gruppo di apache e non di psacln ti richiede per forza i permessi 757 🙂
    Quindi, ho switchato l'uso di php non come modulo, ma come applicazione fastCGI, ma ho riscontrato alcune problematiche:

    Il path.session l'ho dovuto impostare a mano perchè mi sono accorto subito che le sessioni non funzionavano
    Poi ho dovuto aggiungere un'istruzione al file httpd.conf : FcgidMaxRequestLen 52428800 ( Valà che so usare la shell di lunux )

    Ora, nella mia applicazione proprietaria, funziona tutto a pennello, con wordpress, mi continua a restituire un errore di caricameneto.

    Pensi possa aver dimenticato qualche setting di base?


  • Super User

    Tutti i pannelli creano in automatico files e cartelle quando si aggiunge un client... e a ogni client corrisponde un proprietario:gruppo
    In automatico i pannelli configurano i vari demoni, dal webserver all'mta, dal pop all'imap e così via! I demoni non vanno mai modificati, a meno che non sai quello che fai.
    Intanto volevo aggiungere una piccola postilla, stai utilizzando una versione php obsoleta e non più mantenuta (non vengono più rilasciate patch di sicurezza per la versione 5.3).
    Nel php.ini mi sai dire come hai settato questi valori?
    post_max_size
    upload_max_filesize


  • Moderatore

    È tutto settato in modo da mantenere la massima sicurezza. Ora non posso controllare di preciso perche sono fuori casa, ma so che il max_file_size è a 8mb.

    Passando ad altro, mi dici che dovrei aggiornare php 5.3.3 ?


  • User Attivo

    Ciao,

    è preferibile usare php in modalità suPHP o fastcgi per ridurre i problemi di permessi sulle cartelle ed evitare di assegnare diritti RWX anche a chi non è proprietario.
    Naturalmente se passi da mod_php a ad altro (fastcgi) devi necessariamente modificare alcune impostazioni: fatto questo però sei "tranquillo".

    Sicuramente ti conviene aggiornare PHP alla versione 5.4


  • Super User

    In effetti il problema è nella configurazione del demone php... setta post_max_size e upload_max_filesize con un valore di 50M e riavvia il demone!
    Ti suggerisco vivamente di passare a una versione stabile e mantenuta del demone php 😉

    L'upgrade lo fai o da repositorio o da sorgente...


  • Moderatore

    Ho risolto!
    Come prima, non funzionava wordpress di un sito installato, perchè la cartella uploads aveva utente e gruppo settati su apache. Mi è bastato ripristinare utente e gruppo corretti che ora funziona tutto a meraviglia.
    😉