Droit sur les fichiers: chmod()

Eléphanteau du PHP | 39 Messages

13 avr. 2011, 01:48

Bonsoir,

J'utilise une fonction qui lit et une autre qui écrit dans un fichier. Seulement si je ne met pas préalablement les droits ça ne marche pas.

Je voulais me servir de la fonction chmod() mais je n'obtiens des modifications des droits que si je créé un fichier à partir du script et non un fichier existant. Je me suis donc dis que c'était peut être un problème lié au 'propriétaire du fichier' j'ai donc essayer de changer le propriétaire du fichier mais encore une fois sans succès. Alors est ce que php est pas exécuté en tant que 'root' et ne peut donc pas changer les droits des fichiers?? ce serait peut être la réponse.

Mais dans ce cas comment pouvoir modifier des droits sur un fichier qui n'appartient pas à 'root'?
$link = 'test.txt';
$data = 'test';
$nameuser = gethostname();
echo $nameuser . '<br />';

if (is_file($link))
{
	if(chown($link, $nameuser)) 
		echo 'chown ok <br />';
	else 
		echo 'chown merde!!!! <br />';
	if(chmod($link, 0777)) 
		echo 'chmod ok <br />';
	else 
		echo 'chmod merde!!!! <br />';
	$file = fopen($link, 'w');
	if(fwrite($file, $data) === FALSE){
		echo 'erreur';
		exit();
	}
	if(@chmod($link, 0444)) echo 'chmod ok <br />';
	else echo 'chmod merde!!!!';
}
else 
	if(touch($link)) echo 'fichier créé <br />';
	
$stat = stat($link);
print_r(posix_getpwuid($stat['uid']));
Lorsque j'exécute ce script et si je met $link = 'NOM_DE_FICHIER_INEXISTANT"'; dans ce cas le chmod fonctionnera mais pas le chown...

Bonne soirée.

Cordialement,
Damien

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 avr. 2011, 08:27

salut,

tu ne prend pas les chose dans le bon sens, root a "tous les droits", php ou apache ne tournent pas en tant que root ;)

Par contre si l'utilisateur qui créer le fichier est différent celui qui l'utilise tes problème sont normal. tu ne pourra pas changer de propriétaire si tu n'en pas la permission par le propriétaire d'origine (sauf droit de groupe etc), donc le plus simple est de régler ce problème (avec un chmod à 0777 par exemple) avec le propriétaire du fichier quand tu le créer ;)


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

13 avr. 2011, 08:50

Bonjour,

Le traitement se fait avec l'utilisateur lié à apache en mode web (ou l'utilisateur qui lance le script en mode ligne de commande). Le plus simple est d'associer tout les fichiers à l'utilisateur apache (www-data) ou au groupe de cet utilisateur.

En général les fichiers sont la propriété de leur créateur qui se connecte via ftp. Tu peux envisager de mettre les utilisateurs ftp et apache dans le même groupe.

La solution de mettre les fichiers en écriture pour tout le monde ne me semble par très sécurisée.

Eléphanteau du PHP | 39 Messages

13 avr. 2011, 18:39

Ok, je vous remercie.
Donc préalablement je donnerais 'www-data' comme nom de propriétaire aux fichiers.
Sinon pourquoi lecture seul vous paraît un problème de sécurité? Les fichiers que j'édit via ma fonction sont tous des fichiers qui doivent pouvoir être lu.

Merci pour vos réponse. :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 avr. 2011, 21:55

c'est lisible par tous le monde qui est dangereux (quoi ça l'est potentiellement si un autre utilisateur viens lire tes login / mdp) mais écriture pour tous c'est dangereux car n'importe qui peut le modifier et la tu ne sais pas ce qui peut se passer.

@+
Il en faut peu pour être heureux ......

devlop78
Invité n'ayant pas de compte PHPfrance

14 avr. 2011, 00:00

Si apache tourne sous root, c'est anormal et dangereux. Le changement du propriétaire ne peut se faire que par root, sauf configuration spécial de linux. Si le propriétaire est ftp et le groupe www-data, alors 660 est suffisant ;)

Eléphanteau du PHP | 39 Messages

14 avr. 2011, 21:09

Oki c'est bon à savoir.

Merci pour vos réponses.