Domanda

Mi piacerebbe costruire una semplice applicazione web, che gestisce una directory su un server. Voglio dare alle persone la possibilità di utilizzare chown e chmod.

Qual è il modo più sicuro per dare PHP questa autorizzazione? La cosa più veloce è solo in esecuzione Apache e PHP come root, ma questo non sembra essere una buona idea.

Un altra cosa che ho pensato, è stata la creazione di uno script separato che ha setuid root ..

Grazie!

È stato utile?

Soluzione

Bene, suona certamente come un'idea pericolosa per cominciare e preferirei sedersi e pensare attraverso l'intera strategia di ciò che sta cercando di raggiungere.

Il pericolo è privilegio escalation di uno script eseguibile che un utente remoto potrebbe modificare o caricati, naturalmente. Pieno chown / chmod in una web app è equivalente a solo incollare la password di root sulla pagina.

Che cosa è esattamente che deve accadere?

Se il chown deve accadere per qualche ragione, ma non per sradicare (speriamo), allora la funzionalità deve essere avvolto. Vorrei prendere le richieste degli utenti e li coda, quindi avere un processo separato (potrebbe essere conchiglia, PHP, Perl, qualsiasi cosa) in esecuzione come root da cron controllare questa coda, controllare per vedere se la richiesta si adattano i parametri consentiti, e apportare le modifiche .

Altri suggerimenti

Un modo potrebbe essere quello di configurare sudo sulla vostra macchina (supponendo che sia una macchina Linux). Sudo permette di eseguire comandi elevati, soggetto a restrizioni previste nel file sudoers.conf. Utilizzare le regole strette per limitarne l'uso ai comandi necessari in una directory specifica per l'utente il servizio Web è in esecuzione (come www-data), e quindi chiamare la shell dei comandi dal PHP qualcosa di script come tis:

shell_exec("sudo chmod 777 dirname");

Facciamo in modo che il vostro config sudo è stretto, per garantire che la rottura fuori sarà quasi impossibile.

Forse si dovrebbe guardare ai comandi PHP: chmod, chown, chgrp e fileperms

chmod

chmod("/somedir/somefile", 0600);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top