Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 06/12/2017, à 02:21

Couin

[RESOLU] Droit réseau et dossiers créés php/apache

Bonjour à tous,

Je suis confronté à un souci sur ma config. Merci d'avance à ceux qui auront le courage de lire car j'avoue c'est un peu long , mais j'essaye d'être précis.

Le pc est en Ubuntu 12.04 LTS (les versions d'après m'obligeant à mettre des versions apache, php etc etc plus récentes, certains de mes scripts ne seront plus supportés donc pour le moment il ne m'est pas envisageable de mettre à jour vers plus récent), avec Apache 2.2.22, PHP 5.3.10-1ubuntu3 , MySQL 5.5.22.

Mon répertoire www est sur un volume raid.

Il est partagé sur le réseau (comme d'autres répertoires étant aussi sur le même volume raid) via Samba.

Il y a cependant une subtilité (appliquée à tous les partages) afin que je puisse y accéder depuis mon réseau local, sans nécessité d'authentification depuis n'importe quel machine.

Voici une partie du fichier smb.conf :

map to guest = bad user
# map to guest = bad password
usershare allow guests = yes
[www]
path=/media/raid/www
read onyl=no
writable=yes
force create mode = 0777
force directory mode = 0777
guest ok = Yes

Je peux ainsi depuis un autre poste sur le réseau, ajouter, modifier, supprimer les répertoires de mon www (et pareil pour les autres tels que mon répertoire "Public", "Utilitaires" et "Mails" dans lequel je stock mon fichier pst de ma messagerie outlook.

Jusque là tout va bien.

J'ai un script (basé sur https://blueimp.github.io/jQuery-File-Upload/ ) me permettant d'uploader des fichiers vers mon serveur, depuis un lien web. Dans les option blueimp, j'ai choisi que chaque session d'upload ait un dossier créé avec un nom aléatoire (afin que les autres ne voient pas ce qui a déjà été uploadé).
A noter que pour que le script fonctionne (au même titr eque les autres script où php crée des fichiers ou répertoires), j'ai été obligé de modifier www-data en super (nom d'utilisateur de la machine faisant office de server), dans envvars :
# export APACHE_RUN_USER=www-data
export APACHE_RUN_USER=super


Je me suis aperçu il y a peu, en voulant faire le ménage, via le partage, sur les fichiers déjà uploadés, que je ne pouvais pas (accès refusé). Dans un dossier créé par le script lors d'un upload, je ne peux non plus ajouter de fichier ou modifier des existants.
En gros, je n'ai que la lecture de possible sur le dossier et par conséquent, son contenu.

Si je regarde les droits d'un répertoire créé par php/apache, j'ai ceci :
drwxr-xr-x

Si je fais un chmod 777 sur le répertoire, j'obtiens cela :
drwxrwxrwx

et je peux supprimer le répertoire et son contenu sans problème, depuis le réseau.

Je voudrais que les répertoires que crée apache hérite des droits 777 pour que je puisse les supprimer depuis n'importe où.

En revanche, je n'ai totalement aucune idée de ce que je pourrais faire pour résoudre le problème sad

Si quelqu'un a une astuce, je suis preneur smile

Merci de m'avoir lu smile

Couin

Dernière modification par Couin (Le 06/12/2017, à 17:27)


Ubuntu 12.04 LTS avec Apache , MySQL et PHP

Hors ligne

#2 Le 06/12/2017, à 04:18

krodelabestiole

Re : [RESOLU] Droit réseau et dossiers créés php/apache

c'est ton script qui définit les permissions.
en l'occurrence comme tu utilises PHP tu utilises sans doute le fichier jQuery-File-Upload/server/php/UploadHandler.php :
https://github.com/blueimp/jQuery-File- … andler.php

tu peux chmod en php dans le script
de la ligne 1090 à 1108
remplace

if ($uploaded_file && is_uploaded_file($uploaded_file)) {
    // multipart/formdata uploads (POST method uploads)
    if ($append_file) {
        file_put_contents(
            $file_path,
            fopen($uploaded_file, 'r'),
            FILE_APPEND
        );
    } else {
        move_uploaded_file($uploaded_file, $file_path);
    }
} else {
    // Non-multipart uploads (PUT method support)
    file_put_contents(
        $file_path,
        fopen($this->options['input_stream'], 'r'),
        $append_file ? FILE_APPEND : 0
    );
}

par

if ($uploaded_file && is_uploaded_file($uploaded_file)) {
    // multipart/formdata uploads (POST method uploads)
    if ($append_file) {
        file_put_contents(
            $file_path,
            fopen($uploaded_file, 'r'),
            FILE_APPEND
        );
        chmod($uploaded_file, 0777);
    } else {
        move_uploaded_file($uploaded_file, $file_path);
        chmod($file_path, 0777);
    }
} else {
    // Non-multipart uploads (PUT method support)
    file_put_contents(
        $file_path,
        fopen($this->options['input_stream'], 'r'),
        $append_file ? FILE_APPEND : 0
    );
    chmod($this->options['input_stream'], 0777);
}

j'ai pas test mais je pense que ça devrait fonctionner pour changer les permissions des fichiers.

ligne 51 tu peux aussi remplacer le

'mkdir_mode' => 0755,

par

'mkdir_mode' => 0777,

pour changer les permissions des répertoires.

//

Couin a écrit :

Le pc est en Ubuntu 12.04 LTS (les versions d'après m'obligeant à mettre des versions apache, php etc etc plus récentes, certains de mes scripts ne seront plus supportés donc pour le moment il ne m'est pas envisageable de mettre à jour vers plus récent), avec Apache 2.2.22, PHP 5.3.10-1ubuntu3 , MySQL 5.5.22.

je te conseille d'utiliser docker plutôt que de rester sur un os préhistorique :
https://doc.ubuntu-fr.org/docker_lamp

Dernière modification par krodelabestiole (Le 06/12/2017, à 04:55)

Hors ligne

#3 Le 06/12/2017, à 04:21

krodelabestiole

Re : [RESOLU] Droit réseau et dossiers créés php/apache

et si je peux me permettre ton setup me parait très exotique et bancal...

est-ce qu'une solution comme nextcloud (qui permet un partage en WebDAV) ne conviendrait pas mieux à ton usage ?

Dernière modification par krodelabestiole (Le 06/12/2017, à 04:29)

Hors ligne

#4 Le 06/12/2017, à 14:47

Couin

Re : [RESOLU] Droit réseau et dossiers créés php/apache

Hellooo

Merci d'avoir répondu smile
Je ne pensais pas que c'était le script php qui faisait les droits mais l'utilisateur/groupe du serveur sur lequel il tourne.

J'ai testé tes indications sur le handler (c’est effectivement ce que j'utilise) mais cela n'a pas marché, mais je chercherais dans ce sens, d'autant plus que j'ai testé le chmod sur un autre script php et cela a marché du premier coup donc au moins je sais que la fonctionnalité est valide smile

Pour ce qui est du setup exotique, bah disons qu'avant j'utilisais un XP avec WAMP et partage du répertoire www (et aussi les mêmes autres, Public, Utilitaires... ) mais pour une raison dont je n'ai jamais eu la réponse, WAMP était très lent sur le réseau local mais pas depuis l’extérieur ni depuis le poste "serveur" même. J'en ai tenté des trucs , même d'installer sur une autre machine fraichement masterisée, c'était pareil. J'ai donc cherché coté linux pour testé et là aussi, pas mal d'essais, sachant que je n'y connaissais totalement rien en linux (bon c'est pas tellement mieux aujourd'hui mais plus qu'au début). A ce jour, il remplit totalement le rôle que j'attends : Partage de fichiers (donc via Samba) sur réseau local (je ne veux pas faire un cloud pour le moment), serveur HTTP.
Quel(s) point(s) trouves tu exotique et bancal ?  Le fait d'avoir fait en sorte que je puisse parcourir les partages en tant qu'invité ?

L'OS est effectivement maintenant ancien mais même si je le mis à jour, mais après, mettre sans cesse à jour (jusqu'au jour où le matériel n'est plus éligible aux mises à jour), je me demande si ca ne sera pas des risques à ce que "ah bah tiens, tel truc marche plus" et devoir passer des heures à chercher pourquoi sad

Merci en tout cas pour le coup de palme smile


Ubuntu 12.04 LTS avec Apache , MySQL et PHP

Hors ligne

#5 Le 06/12/2017, à 15:18

krodelabestiole

Re : [RESOLU] Droit réseau et dossiers créés php/apache

Couin a écrit :

Je ne pensais pas que c'était le script php qui faisait les droits mais l'utilisateur/groupe du serveur sur lequel il tourne.

l'utilisateur et le groupe sont www-data par défaut sur ubuntu pour apache (et j'imagine que tu utilises PHP en module d'Apache donc c'est le même utilisateur).
tu peux éventuellement changer le umask de Apache pour changer les permissions par défaut des fichiers créés
en ajoutant

umask 000

dans /etc/apache2/envvars


Couin a écrit :

J'ai testé tes indications sur le handler (c’est effectivement ce que j'utilise) mais cela n'a pas marché

bizarre...
essaie p-e le chmod avant le move_uploaded_file :

chmod($uploaded_file, 0777);
move_uploaded_file($uploaded_file, $file_path);

Hors ligne

#6 Le 06/12/2017, à 17:26

Couin

Re : [RESOLU] Droit réseau et dossiers créés php/apache

Re smile

Merci pour les infos.
Entre temps j'ai rajouté un chmod après les 2 mkdir du script :

mkdir($version_dir, $this->options['mkdir_mode'], true);
chmod($version_dir, 0777);

et

mkdir($upload_dir, $this->options['mkdir_mode'], true);
chmod($upload_dir, 0777);

Et cela marche smile

Par curiosité, j'ai testé (en retirant la modif ci dessus), en ajoutant le umask 000 à envvars mais cela n'a pas marché non plus. Ceci dit, le principal étant d'avoir au moins une solution qui fonctionne smile

Merci encore pour ton aide smile


Ubuntu 12.04 LTS avec Apache , MySQL et PHP

Hors ligne