È possibile eseguire exec() come utente diverso (sulla mia casella funziona come www-data). Desidero eseguire uno script che richiede l'accesso a file non di proprietà di www-data.Esecuzione di exec come utente diverso
risposta
Ho avuto un requisito simile alcuni anni fa che richiedeva alcuni script PHP per comunicare con una porta seriale. La prima porta seriale è tipicamente/dev/ttyS0, di proprietà di root e nel dialout di gruppo.
Per la configurazione iniziale, ho aggiunto il mio utente apache al dialout di gruppo. Gli script PHP erano in grado di parlare direttamente con la porta seriale senza problemi. Tuttavia, solo una istanza di uno script poteva aprire la porta seriale in qualsiasi momento, quindi questa soluzione non poteva funzionare.
Ho quindi creato un demone che forniva uno strato tra la porta seriale e gli script PHP. Gli script PHP parlavano con il demone tramite una named pipe, e il demone quindi formattava le richieste e lo passava sulla porta seriale - facendo un po 'di cache lungo il percorso.
Quindi, o aggiungi www-data, o qualsiasi sia l'utente di apache, al gruppo che possiede quei file, dando i permessi di esecuzione di gruppo, o usa un proxy come ho fatto io. Se la sicurezza ti preoccupa, andrei con quest'ultimo.
È possibile modificare l'utente in cui viene eseguito il server. Questo può essere fatto facilmente usando la versione di Windows di apache (apache viene eseguito lì come servizio ed è facile configurare l'utente con cui viene eseguito apache).
Quale piattaforma server usi?
No, non direttamente. Se sei su una macchina Linux e hai i diritti, puoi impostare il set il bit setuid sul tuo file.
Tenere presente che il server Web viene eseguito come utente diverso per un motivo. È un meccanismo di sicurezza molto importante e, aggirandolo, si potrebbe causare una vulnerabilità di sicurezza.
Se si ha accesso alla configurazione del server (supponendo che sia Apache), si potrebbe prendere in considerazione l'utilizzo di suPHP. In un host virtuale del configuration è possibile impostare in modo esplicito l'utente e gruppo per il quale viene eseguito uno script PHP:
<VirtualHost 192.168.1.1:80>
...
suPHP_UserGroup user group
...
</VirtualHost>
Questa impostazione è disponibile per configurazioni suPHP costruiti con l'opzione --with-setid-mode=paranoid
.
Un altro modo per modificare l'ID utente è posix_setuid()
per cui sono richiesti i privilegi appropriati. Ciò significherebbe eseguire gli script PHP come root, che è un problema di sicurezza serios.
- 1. Esecuzione di comandi UNIX come utente diverso, da Java
- 2. Esecuzione di test come utente diverso in Visual Studio
- 3. Esecuzione di libreoffice da php exec()
- 4. Come fare svn commit come utente diverso?
- 5. Azione shell Oozie non in esecuzione come utente di invio
- 6. Accedi come Utente diverso in asp.net?
- 7. Esegui codice come utente diverso (C#)
- 8. esecuzione docker [9] Errore di sistema: errore di formato exec
- 9. Plugin Maven exec - Esecuzione di uno script Python
- 10. Maven maven-exec-plugin configurazioni multiple di esecuzione
- 11. Come si esegue il commit del codice come utente diverso?
- 12. funzione bash run con utente diverso
- 13. Demone in esecuzione con exec-maven-plugin che evita `IllegalThreadStateException`
- 14. PostgreSQL: Esecuzione di procedure Python memorizzato come un normale utente
- 15. Esecuzione di una stored Oracle Proc come un altro utente
- 16. Come eseguire processo maestro nginx con utente diverso
- 17. Input utente alla riga di comando quando si utilizza Runtime.getRuntime(). Exec (comando);
- 18. Perché il thread si comporta in modo diverso con il corpo del metodo di esecuzione diverso?
- 19. QT + Come chiamare lo slot dal codice C++ personalizzato in esecuzione in un thread diverso
- 20. Java Runtime.getRuntime(). Exec() alternative
- 21. Runtime.getRuntime() exec()
- 22. Esecuzione comando asincrona con conferma utente
- 23. Scoprire quale utente Apache è in esecuzione come in Windows?
- 24. Come posso verificare un processo in esecuzione per sessione utente?
- 25. ottenere pid di exec generato in phing
- 26. Come si esegue un comando come utente diverso da un cronjob di root?
- 27. php Come si avvia un programma esterno in esecuzione - Problemi con sistema ed exec
- 28. Come exec in NodeJS utilizzando l'ambiente dell'utente?
- 29. OSErrore: [Errno 8] Errore di formato Exec
- 30. jupyter notebook in esecuzione kernel in env diverso
Sto usando ubuntu lucid. Non desidero cambiare l'utente in base al quale viene eseguito apache, poiché questo sarebbe un rischio per la sicurezza, ma ho creato alcune app di back-end che richiedono l'accesso a file non di proprietà di www-data. Che ne pensi di creare un gruppo che contiene www-data e il proprietario dei file? – mrwooster
sarebbe un'altra opzione che funzionerebbe. cambiare l'utente di apache è solo un rischio per la sicurezza se yozu assegna un utente con permessi di alto livello (come root) – Thariama