Newsgroup: it.comp.www.php
Titolo: Permessi file di testo

Salve,
tramite qualche riga di php scrivo del testo in dei file di testo che si
trovano in una specifica directory.
Quel'è il corretto settaggio dei permessi della dir e dei file di testo?
Grazie
Alex



Come minimo, 200 per i files, e 300 per la directory, ammettendo che sia
di proprieta' dell'utente PHP.
La prima cifra (2) indica l'accesso per l'utente, e la seconda l'accesso
per gli utenti del gruppo (0); la terza l'accesso a tutti gli altri (0).
Si ottiene sommando 1 per la possibilita' di eseguirlo (se file) o farci
ricerche (directory), 2 per la possibilita' di scriverci, 4 per leggere.
Quindi 640 = il proprietario puo' leggere e scrivere e quelli del gruppo
possono solo leggere. Tutti gli altri ciccia.
Se il file e' posseduto da un utente e un gruppo, ma PHP non fa parte di
quel gruppo e non e' l'utente, al PHP si applica la terza cifra. Perche'
possa leggere e scrivere l'ultima cifra deve essere un 6 (per directory,
deve essere 7).
Come vedi, il settaggio "corretto" dipende dalla tua situazione.
Leonardo

 ha scritto nel messaggio
news:t1ugcusbstne3rnm9...@L.Serni...

il fatto che mi sembra strano è che riesco a scrivere i file ditesto tramite
browser, solo se li setto 777, altrimenti ricevo:
Warning: fopen("../pers/email.txt", "w") - Permission denied in
/home................../mod_email.php on line 18
non posso aprire il file
quindi lo script che si occupa di aprire il file e di mostrarne il contenuto
in una textarea per la modifica, non riesce ad aprire il file in scrittura.
Ma settandoli in quel modo tutti possono modificare il file di testo, basta
che scrivano in una pagina qualche riga di php, giusto?
Grazie per l'aiuto.
Alex

che scrivano in una pagina qualche riga di php, giusto?
Si'.
Altrimenti devi installare le Linux ACL (ed e' un bagno di sangue).
Leonardo

 ha scritto nel messaggio
news:k4fjcucmps8krv5gn...@L.Serni...

Prima di tutto ti ringrazio per la risposta così esauriente.
Andrò a fondo sulla questione che devo capire definitivamente una volta per
tutte.
Una cosa vorrei chiederti:
sia da quello che mi dici, sia da quello che vedo provando lo script su due
hosting diversi, entrambi forniti da aziende di qualità, noto diverse
impostazioni:
1) Nel primo caso, per visualizzare e modificare il contenuto di un file di
testo in una text area di un form, è assolutamente necessario che setti la
dir a 755 e i file di testo a 777.
2) Nel secondo caso, la dir resta di default a 755 e i file .txt a 644 e
tutto funziona allo stesso modo
Questo significa che il php sulle due macchine ha permessi diversi? O perché
appartiene a gruppi diversi?
A questo punto ho tentato di modificare i file di testo da un hosting
all'altro (...il codice dei file nel primo hosting tentano di leggere e
scrivere nei txt del secondo hosting), con lo scopo di vedere se fosse
effettivamente così semplice modificare i file txt dall'esterno. In entrambe
i casi la lettura avviene, ma la scrittura (per fortuna) no (anche per i txt
settati a 777...e questo mi sembra strano...mi aspettavo fossero
modificabili proprio perché settati in 777...)
Ricevo il segente warning:
Warning: stat failed for 
http://www.
........./home.txt (errno=2 - No such
file or directory) in /home/......./mod_home.php on line 5
ecco il codice fino alla riga 5:
<?
$filename = "
http://www.
.........../home.txt";
$fp=fopen($filename, "r") or
 die("non posso aprire il file");
$contents=fread($fp, filesize($filename));
.....
....
.....
<textarea name="home" cols="75" rows="15">
<?
include("
http://www.
............/home.txt");
?>
</textarea>
.....
.....
......
?>
l'include mi fa vedere il contenuto del file, ma se tento di modificarlo non
riesco (...ancora per fortuna!)
Qual'è il tuo parere?
Ti ringrazio ancora davvero tanto
Alex

modificabili proprio perché settati in 777...)
Non puoi SCRIVERE un file usando "http://". Lo puoi solo leggere.
Il file esiste come, diciamo,
 
http://www.tuosito.it/tuadir/file.txt
...ma questo non significa niente! Significa solo che una macchina all'
indirizzo "
www.tuosito.it
" sa cosa fare quando gli si chiede un oggetto
chiamato /tuadir/file.txt; COSA SIA quell'oggetto non si sa... e quindi
cercare di scriverlo e' chiedere troppo.
Se a quell'oggetto corrisponde un file, il file si potrebbe chiamare ad
esempio
	/websites/
tuosito.it/htdocs/tuadir/file.txt
e magari un altro sito ospitato su quella macchina sta in
	/websites/
altrosito.com/htdocs/index.html
Quello che AltroSito non deve poter fare e'
	$fp = fopen('/websites/
tuosito.it/htdocs/tuadir/file.txt
','w');
e, per quanto ne so, un chmod 777 glielo fa fare eccome bene.
+++
C'e' il modo di fare in modo <g> che PHP, esaudendo una richiesta di un
file PHP in /websites/
tuosito.it
 (appartenente ad "abianchi.customers")
_DIVENTI_ l'utente abianchi.customers; e quindi puo' leggere tutto cio'
che ha almeno modo 400 ed appartiene ad abianchi, e scrivere tutto cio'
che ha almeno modo 200 ed appartiene ad abianchi.
Questo dipende dal settaggio che il provider fa di PHP e Apache.
Poiche' AltroSito.com appartiene a mrossi.customers, se e' modo 600, tu
non puoi ne' leggerlo (scoprendo passwords e scrutando nel codice PHP),
ne' scriverlo.
Puoi richiedere 
http://altrosito.com/suadir/file.php
, ma in questo caso
cio' che leggerai con fopen() NON SARA' il vero contenuto del file.php,
ma cio' che quel file avra' elaborato (e quindi, se cerchi di fare cose
brutte e il file e' scritto bene, aprendo un file di 10 Kb troverai una
sequenza di magari solo 10 *bytes*... e che inizia per "vaffan..." :-)
Leonardo

 sequenza di magari solo 10 *bytes*... e che inizia per "vaffan..." :-)
...qui non ho capito :-(
Grazie ancora
Alex

...qui non ho capito :-(
Immagina di avere un file "test.php"
	<? print "Test"; // Password=XYZZY ?>
e un file "test2.php":
	<?
		$fp = fopen('test.php', 'r');
		// $fp = fopen('
http://localhost/test.php
', 'r');
		fpassthru($fp);
		@fclose($fp);
	?>
Se lo lanci, vedi sul tuo browser il contenuto reale del file test.php,
cioe' una riga con scritto <? print "Test"; // Password=XYZZY ?>.
Se apri test.php col browser, vedi solo la parola "Test". Niente codice
e niente password, ovviamente.
Se modifichi test.php in modo che usi HTTP per aprire il file, quel che
vedrai, NON SARA' PIU' il contenuto VERO del file 'test.php', ma quello
che vedrebbe un browser: solo quattro caratteri ("Test"), niente codice
e niente password.
Leonardo