Rendere Apache in grado di scrivere in file PHP con PHP in esecuzione come DSO?

Ho PHP in esecuzione come DSO. In quanto tale, lo script di installazione (che scrive a un file di configuration) non può eseguire alcuna scrittura.

Come faccio ad apache (utente: nessuno) la capacità di scrivere al file?

  • Apache httpd Applicazione Java?
  • Il modo migliore per impostare l'ambiente multiutente per ospitare Mono ASP.NET
  • apache2 come tracciare il chiamante di SIGTERM
  • Cosa devo fare quando ho bisogno di un server?
  • mod_fcgi in virtualmin: grazioso kill fall, inviando SIGKILL?
  • NetWare a SLES Apache alias
  • mod_rewrite REQUEST_FILENAME non contiene path assoluto
  • Apache crolla VPS - ha bisogno di ridurre l'utilizzo della memory
  • Apache, Samba e autorizzazioni
  • Puoi usare Redirect e Proxypass allo stesso tempo
  • mod_unique_id: Imansible trovare l'indirizzo IPv4 di FQDN nonostante l'impostazione etc / hosts e Apache ServerName
  • Per cosa è utilizzato httpd.exp?
  • 4 Solutions collect form web for “Rendere Apache in grado di scrivere in file PHP con PHP in esecuzione come DSO?”

    Lo farei solo su un server di sviluppo in un ambiente protetto. Molte applicazioni PHP genereranno il file sullo schermo in modo che possa essere copiato in modo sicuro nella directory di configuration.

    Il modo rapido (e insicuro) per farlo è eseguire chmod 777 . dalla directory in cui dovrebbe andare il file. Prima di eseguire questa operazione ls -ld . per get le autorizzazioni da reimpostarle. In alcuni casi la directory richiesta non esisterà, quindi sarà necessario crearla per primo. Subito dopo che il file di configuration è stato scritto, reimpostare la directory nelle sue autorizzazioni originali. Il command corretto è probabilmente chmod 755 . o chmod 750 . eseguire dalla directory. Verificare con il command ls.

    Modificare le autorizzazioni del file di configuration in modo che Apache non possa più scrivere ( chmod ow configfile ). Le applicazioni spesso vengono fornite con file di configuration di esempio. Posizionare uno di questi nella directory di configuration e l'editing potrebbe essere un approccio migliore. Ciò richiede che tu impari e comprendi le opzioni di configuration. Potresti essere in grado di utilizzare lo script di configuration online per assistere alle modifiche.

    In un ambiente condiviso tutto diventa un po 'complicato quando si tratta di problemi di sicurezza. Cambiando la properties; di file a 'nessuno' si dà accesso Apache a tale file ma, se il module PHP non dispone di impostazioni per limitare ciascun virtualhost ad ognuna delle sue proprie directory, anche gli altri consentiranno di accedervi. Controlla come è impostato nel tuo ambiente.

    Apache di solito viene eseguito come utente 'nessuno' e gruppo 'nessuno' in modo da poter giocare con le autorizzazioni di gruppo troppo. Modificare il gruppo di file a 'nessuno' e impostare l'authorization a 664.

    Se non è ansible modificare il proprietario o il gruppo del file, FTP di solito consente di modificare le autorizzazioni. Supponendo che Apache non sia uno degli utenti / gruppi che possiedono quel file, dovresti impostarlo a 777 che è molto insicuro, ma dipende tutto dal tipo di ambiente in cui ti trovi. Forse puoi impostarlo temporaneamente , installarti app e cambiarla nuovamente a 644 o 444 (in sola lettura).

    È ansible scrivere i file di configuration in una directory temporanea come /tmp/config/ . Quindi, è ansible eseguire uno script di shell per copiare i file di configuration da /tmp/config/ nella posizione desiderata.

    Per concedere le autorizzazioni necessarie, è ansible aggiungere nobody utente al file sudoers. La voce dovrebbe essere simile a:

     nobody ALL=NOPASSWD: /path/to/your_script.sh 

    Lo script shell (non dimenticare di aggiungere l'authorization di esecuzione).

     cp -r /tmp/config/* /desired/path/to/config 

    In PHP, hai bisogno di un piccolo frammento di codice come:

     <?php $output = shell_exec('sudo /path/to/your_script.sh'); echo "$output"; ?> 

    Questo è il problema tipico che esegue PHP come un DSO con cPanel, ma si applica anche ad altre impostazioni.

    Quando si esegue questo metodo, i processi PHP vengono gestiti dall'utente che esegue httpd. Nella maggior parte dei casi, questo utente è l'utente "nessuno". Ciò significa che quando PHP interagisce con i file del file system, deve essere accessibile dall'utente "nessuno". Ciò crea problemi di autorizzazioni poiché il normale utente basato su cPanel non avrà accesso a file RW (lettura / scrittura) che sono di properties; dell'utente "nessuno" senza le modifiche autorizzate. La maggior parte delle applicazioni Web / script PHP devono scrivere a file e directory e se sono di properties; dell'utilizzatore cPanel, senza modificare le autorizzazioni nei file / directory a 777, causerà problemi e in alcuni casi rompere il tuo sito web .

    Quindi in questo caso è ansible gestire solo e solo le autorizzazioni manualmente, impostandole su 777

    Quando si esegue questo metodo PHP, è necessario gestire manualmente le autorizzazioni per ciascun utente per garantire che le applicazioni / script PHP possano leggere e scrivere i file e le directory di cui ha bisogno per funzionare.

    Oppure, se si può passare a Mod_SuPHP e non si hanno problemi di performance (in quanto DSO è molto più veloce), sarà ansible eseguire PHP come utente che esegue cPanel.

    Se trascuriamo i problemi di autorizzazioni che possono essere eseguiti con l'esecuzione di PHP attraverso il DSO, ci sono alcuni vantaggi rispetto a SuPHP. La prima è la velocità. Mod_PHP è più veloce di Mod_SuPHP. Ciò è dovuto principalmente al fatto che each richiesta elaborata da Mod_SuPHP è avvolta per essere eseguita come utente che possiede i file. Questo potrebbe non essere molto evidente nei siti di traffico più bassi, ma nei siti di traffico più elevati, può essere abbastanza veloce. Il secondo è la funzionalità completa con aggiunte di cache opcode PHP, come eAcclerator, APC e Xcache. Per mettere a nudo il beneficio completo di una cache PHP optcode, è necessario un utente condiviso che viene utilizzato quando si memorizza in cache il codice byte PHP compilato e che esegue PHP tramite un DSO esegue PHP in quanto l'utente "nessuno" riempie questa necessità. Potete sapere se il tuo server è configurato per eseguire PHP attraverso un DSO andando al WHM e guardando sotto Main >> Configurazione di servizi >> Apache Configuration. >> Configurazione PHP e SuExec

    Qui potete trovare ulteriori dettagli:

    https://helpdesk.wiredtree.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1663

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.