Page 1 sur 1

Droit sur les fichiers: chmod()

Posté : 13 avr. 2011, 01:48
par damien01
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

Re: Droit sur les fichiers: chmod()

Posté : 13 avr. 2011, 08:27
par moogli
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 ;)


@+

Re: Droit sur les fichiers: chmod()

Posté : 13 avr. 2011, 08:50
par Mazarini
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.

Re: Droit sur les fichiers: chmod()

Posté : 13 avr. 2011, 18:39
par damien01
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

Re: Droit sur les fichiers: chmod()

Posté : 13 avr. 2011, 21:55
par moogli
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.

@+

Re: Droit sur les fichiers: chmod()

Posté : 14 avr. 2011, 00:00
par devlop78
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 ;)

Re: Droit sur les fichiers: chmod()

Posté : 14 avr. 2011, 21:09
par damien01
Oki c'est bon à savoir.

Merci pour vos réponses.