Newsgroup: it.comp.www.php
Titolo: autenticarsi prima di fopen

È un po' che sto cercando su google ma non trovo risposta a questo 
quesito: prima di eseguire un fopen, posso autenticarmi sul server 
(unix) come un utente differente da wwwrun, in modo tale da avere 
temporaneamente i permessi di scrittura su un file?
H.

Heruan wrote:

IMHO non e' possibile. 
Quale e' la tua reale necessita'? Quale tipo di file devi aprire in
scrittura? Per quale motivo? Non esiste un workaround che ti permetta
di farlo come wwwrun?
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 
Temevo che non fosse possibile :(
Vorrei creare una pagina sul mio sito tramite la quale modificare il 
codice php delle pagine del sito stesso direttamente dal browser.
Fin'ora ho creato un form con un <textarea> che riporta il sorgente del 
file, ma per modificarlo devo avere i permessi di scrittura per wwwrun 
su tutte le pagine! Non vorrei dover arrivare a questo...
Per questo dovrei potermi autenticare come l'utente owner dei file php 
sul filesystem in modo da poterli modificare...

 sul filesystem in modo da poterli modificare...
O scegli di usare un sistema di archiviazione differente (es. db),
oppure semplicemente modifichi i permessi del file subito prima di
scriverci dentro e li reimposti subito dopo.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 scriverci dentro e li reimposti subito dopo.
Ok ma i permessi dovrei modificarli da una shell ma l'interfaccia che 
sto creando serve apposta per modificare le pagine utilizzando solo il 
browser.
Grazie cmq!


unix?
SUDO SUDO... ma quanto sudo :-)
http://www.courtesan.com/sudo/sudo.html
~omar

 IMHO non e' possibile. 
Puo' appoggiarsi a sudo... a suo rischio e pericolo ovviamente, ma mi 
sembra la soluzione piu' pratica.
~omar

 SUDO SUDO... ma quanto sudo :-)
Mmmmm non sono molto pratico.
Conosco il comando "sudo", posso usare anche "su utente -c comando" un 
modo da evitare di diventare superuser?
Ma ora la domanda fondamentale... come si applicca tutto ciò a un fopen()?
Scusa l'ignoranza!

 Scusa l'ignoranza!
- Apri il file che devi modificare (visto che wwwrun puo' leggerlo...)
- Salvi il file modificato in un file di appoggio
- Via sudo lo muovi in quello <ufficiale> usando normali comandi shell
~omar

 modo da evitare di diventare superuser?
Non devi diventare root... ti basta diventare l'owner della docroot 
nella quale c'e' il file (l'utente FTP per intenderci...)
a meno che il file non abbia permessi particolari...
~omar

 - Via sudo lo muovi in quello <ufficiale> usando normali comandi shell
Ma dici con shell_exec()? E come inserisco la password? Non ho mai usato 
shell_exec() ma su 
php.net
 non ho trovato esempi del genere!

Omar Speranza ha scritto:

No no il file non ha permessi particolare, l'owner è l'utente ftp.
Insomma dici che dopo aver copiato il contenuto in un file di supporto 
posso fare qualcosa tipo:
<?php shell_exec("sudo rsync temp.php file1.php"); ?>
o sbaglio?
Ma dopo il comando sudo non chiede la password di root?

 Ma dopo il comando sudo non chiede la password di root?
Mi rispondo da solo:
 > man sudo
Ora ci provo...
Grazie inanto!

  > man sudo
E' satto :-)
Cmq con visudo editi il file di conf, ci metti dentro l'utente autizzato 
ad operare a nome di chi e su quali comandi shell...
Non e' difficile, se hai difficolta' fai un fischio...
Buonanotte,
~omar

 ha scritto nel messaggio
news:G9Jlf.74310$65.21...@twister1.libero.it...

chmod(file,777)
fwite(file...
chmod(permesso che vuoi)

 chmod(permesso che vuoi)
0_o
Mi sa che non sono aggiornato sulle ultime potenzialita' di PHP...
~omar 

Heruan ha scritto:

Ci sono riuscito!
Grazie a Omar per le "linee guida" e l'hint su `sudo'!
H.

 il browser.
http://www.php.net/chmod


invece di utilizzare fopen, vallo fia ftp con :
http://se2.php.net/manual/it/ref.ftp.php
Nel caso non fosse installata l'estensione, vai direttamente con
fsockopen() , devi conoscere un po' il protocollo per ogni comando
andra' mandato con fputs() e la risposta letta con fgets()

 
http://www.php.net/chmod
Ho appena scoperto che, anche se lo script gira con i permessi di 
wwwrun, e' possibile chmodare un file di utenteftp...
a meno che il PHP non giri in modalita' safe_mode.
Sono sorpreso... anche senza safe_mode le operazioni sul file system 
sono sempre legate ai permessi dell'utente, perche' nel caso del chmod 
no? Boh...
~omar

 chmod no? Boh...
Controlla che il file non abbia i permessi di gruppo abilitati e che
l'utenteftp non faccia parte dello stesso gruppo dell'utente wwwrun.
-- 
I am what I am, I do what I can


 l'utenteftp non faccia parte dello stesso gruppo dell'utente wwwrun.
Chi devo controllare? Io o wwwrun?
Non ho provato la funzione, ho solo letto sul manuale e ne ho commentato 
le indicazioni.
Personalmente non uso le funzioni php per le operazioni sul file system.
Nel mio caso, io non assegno *mai* wwwrun al gruppo utenti standard del 
server.
Oltre ad essere disinformato sono anche paranoico ;-)
~omar

> 
http://www.php.net/chmod
Ok, leggendo il thread mi e' venuto il dubbio ed ho voluto provare;
e avevo ragione.
 > Warning: chmod(): Operation not permitted
e mi sembra anche normale visto che
-rw-r--r--  1 omarsperanza users 0 Dec  8 12:15 miofile
come fa l'utente wwwrun a operare su miofile visto che quest'ultimo e' a 
644 come la maggior parte dei file per gli utenti standard di una linuxbox?
l'istruzione che ho usato...
chmod ('/path/alla/home/di/omarsperanza/miofile', 777);
A sto punto non capisco cosa vogliano dire sul manuale...
~omar

 chmod ('/path/alla/home/di/omarsperanza/miofile', 777);
Provato anche con 0777
niente da fare... mi fa le pernacchie ;-)
~omar

 ho solo letto sul manuale e ne ho commentato le indicazioni. 
Potresti indicare esattamente quali indicazioni hai commentato?


 Potresti indicare esattamente quali indicazioni hai commentato?
Bah non e' che abbiamo scritto molto... cito al volo per parlarne con te...
 >>> Nota:  L'utente corrente è l'utente con il quale viene eseguito il 
 >>> PHP. Probabilmente non è il medesimo utente che si usa da shell o 
 >>> dall'accesso FTP.
Ed e' giusto, tipicamente gli scritp PHP eseguiti via web girano con i 
permessi dell'utente web server (nel mio caso wwwrun.wwwadmin)
 >>> Nota: Questa funzione non è eseguibile con file remoti, ma con file 
 >>> accessibili attraverso il filesystem del server.
Ne prendo atto.
 >>> Nota: Quando modalità sicura viene abilitato, PHP controlla se i
 >>> files o le directory su cui si sta operando, hanno il medesimo UID 
 >>> (proprietario) dello script che sta per essere eseguito.
 >>> In aggiunta, non si può impostare il SUID, SGID e sticky bit.
Vedi? Questo punto non mi e' chiaro, io interpreto cosi... *solo* in 
modalita' safe_mode viene effettuato il controllo di <paternita'> del 
file...
in safe_mode off invece wwwrun potrebbe chmodare il file anche gli il 
modo e' settato a 644
Io ho provato sul mio server e come immaginavo, viene impedito a 
wwwrun.admin di chmodare un file 644 di omar.users
E' un ragionamento accademico, giusto per capire... che ne pensi?
Tu hai provato la funzione? Riesci a chmodare un file non di wwwrun con 
permessi a 644?
~omar

 con permessi a 644?
IMHO stai sbagliando l'interpretazione di quanto viene detto sul
manuale.
Tutte le istruzioni eseguite da PHP sono eseguite con i privilegi
dell'utente che esegue PHP stesso.
La funzione chmod funziona esatamente come funziona il programma chmod,
ossia modifica i privilegi di accesso del file SOLO se l'utente che lo
esegue puo' farlo.
Da cui se un file e' di proprieta' dell'utenteftp ma i suoi privilegi
permettono ad altri utenti di cambiarne i privilegi allora l'utente
wwwrun potre usare la funzione chmod per modificarli.
Nel caso del safe_mode attivo, l'utente wwwrun potra' modificare i
privilegi del file solamente se, oltre ad esserne autorizzato grazie ai
privilegi impostati sul file stesso, e' anche il proprietario del file.


 esegue puo' farlo.
Perfetto, da come avevi suggerito la funzione avevo capito che questo 
tipo di controllo venisse bypassato e mi pareva strano :-)
Grazie per la delucidazione,
~omar

Omar Speranza ha scritto:

Sì esatto, avevo provato anche io (incredulo da quello che avevo letto) 
ma effettivamente non è possibile!
Ho risolto con sudo come mi avevo consigliato, anche se ora "sudo" per 
la falla di sicurezza che potrei aver aperto!
Speremo bene, cmq non ho granché di importante su quel sito...
Grazie ancora!
H.

codice php delle pagine del sito stesso direttamente dal browser.
Puoi farlo con un trucco. Anziche' modificare il codice della pagina,
modifica il codice di una pagina in una directory diversa e includilo
nella pagina principale.
Come sicurezza equivale a dare a wwwrun i permessi di scrittura sulla
directory corrente, pero' funzionera' anche con quei siti dove non ti
danno nessun permesso in scrittura se non in una directory apposita.
In pratica,
<?
	// Questo e' pagina.php, in /var/www/sito/
	include 'permesso/pagina.php';
?>
Leonardo SE&O
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio