J’ai un script PHP qui s’exécute en tant que root. Le script crée des fichiers et ceux-ci doivent appartenir à un utilisateur et à un groupe spécifiés. J’ai réussi à faire en sorte que le script crée les fichiers avec le bon propriétaire, mais le groupe associé aux fichiers est toujours root
.
Voici une preuve de concept pour ce que je fais:
$userInfo = posix_getpwnam('eric'); posix_initgroups($userInfo['name'], $userInfo['gid']); posix_setuid($userInfo['uid']); file_put_contents('test.txt', 'Some content');
Puis je l’exécute en tant que root:
sudo php test.php
Il crée un fichier lié au groupe racine:
Access: (0644/-rw-r--r--) Uid: ( 1000/ eric) Gid: ( 0/ root)
Comment puis-je forcer PHP à créer des fichiers avec le bon Gid
?
Note: Le script doit pouvoir être exécuté en tant que root, et l’exécution avec su - $user
n’est pas une option dans mon scénario.
Vous pouvez utiliser chgrp () après coup ou essayer la même méthodologie posix mais avec le groupe: posix_setgid () .
L’ordre approprié des appels de fonction est posix_setgid () en premier, posix_setuid () en dernier.
Ajouter posix_setgid($userInfo['gid']);
au script après avoir défini l’UID devrait faire l’affaire.