# [Pure-FTP] Permission par utilisateur

## Jamesbch

Bonjour à tous,

J'ai un petit soucis de permissions avec pure-ftpd. J'ai un script php qui a besoin d'avoir les permissions d'écritures sur les dossiers et fichiers qui sont uploadés par FTP (pour pouvoir créer des vignettes et les déplacer notamment). Actuellement j'utilise pureftp avec des utilisateurs virtuels stockés dans MySQL. L'utilisateur qui upload est maître de ses fichiers et ils ont comme permissions -rw-r--r-- (211) pour les fichiers et drwxr-xr-x (743) pour les dossiers. J'aurais besoin que cet utilisateur virtuel créé du 771:773 par exemple. Est-ce qu'il y a moyen de faire ça directement dans la BDD, ou en créant l'utilisateur virtuel avec un umask particulier (j'ai tenté useradd ... -K UMASK=113 sans succès, même avec sudo -u user touch file...) ? Notez aussi que je n'aimerais pas interférer avec les autres utilisateurs virtuels, donc je ne voudrais éviter de mettre un umask qui affecte tous les utilisateurs.

En espérant que vous pourrez m'aider, merci d'avance.

----------

## Jamesbch

Je me répondrais moi même,

j'ai trouvé une solution temporaire que je trouve moyennement propre. J'utilise l'option UPLOAD_SCRIPT que propre pure-ftpd. J'ai quelque chose comme ceci :

```
#!/bin/sh

# Upload script for gillesracine

# -- Chmod files to use it with IGalerie

if [ "$UPLOAD_VUSER" == "virtualuser" ];

then

 if [ "$1" -d ];

 then

  # For folders (dont work)

  chmod 770 "${1}";

 else

  # For files

  chmod 660 "${1}";

  # And apply chmod for the directory 

  # where the file is too -TO FIX-

  chmod 770 `dirname "${1}"`

 fi

fi
```

Donc j'applique un chmod sur les fichiers que je veux seulement pour l'utilisateur virtualuser. Seulement le script n'est lancé que sur les fichiers uploadés, la création de dossiers ne lançant pas le script je dois ruser et chmod'er à chaque fois sur le dossier contenant le nouveau fichier uploadé. Je trouve ça peu propre mais pas trop le choix. Peut-être y'aura-t-il moyen de modifier le code source de pure-ftpd et de le patcher pour faire appel au script à la création de dossier aussi ? Qu'est-ce que vous en pensez ? Faisable ou pas ?

----------

## Jamesbch

*bump*

Je relance le topic car je viens de remarquer que si on doit créer des sous-dossiers c'est impossible de cette façon ! Il faudrait uploader un fichier dedans à chaque nouveau dossier pour pouvoir créer des sous-dossiers ensuite. C'est très ennuyeux j'aurais impérativement besoin d'une solution fonctionnelle (et plus propre) ! Des idées ? Peut-être qu'un autre serveur FTP gère ceci ?

----------

## kernelsensei

Oh tiens, t'as un souci pas mal similaire à celui que j'avais. Utilisant piwigo (anciennement phpwebgallery), j'avais des soucis de permissions avec les vignettes créées par apache (je ne pouvais plus les supprimer).

Une manière de gérer le problème c'est d'utiliser les ACLs. Tu sets des default ACLs au répertoire parent, puis tout ce qui sera créé dans le répertoire héritera des default ACLs du parent. Les ACLs du système de fichier permettent une gestion fine des droits (dire que tel user peut écrire, tel user executer, tel groupe lire, ...). Ton script php est exécuté par le user apache non ? Dans ce cas t'as qu'a donner le droit d'écriture au user apache pour un répertoire donné via les ACLs.

Il faut que le support des ACLs pour ton FS soit activé dans le kernel et que t'ais monté la partoche avec l'option acl.

Est-ce que tu peux donner une idée de l'arborescence du truc et dire quel répertoire doit être modifiable par apache, etc. ?

EDIT : Si tu n'as jamais bossé avec les ACLs : http://www.suse.de/~agruen/acl/chapter/fs_acl-en.pdf

----------

## Jamesbch

salut kernelsensei,

merci beaucoup pour cette information. Je ne connaissais pas les ACL et j'ai honte de moi de pas avoir découvert plus tôt   :Embarassed: . Ca risque de m'être fort utile dans le futur. Je me suis plongé dans le document, et j'ai essayé d'appliquer ça à mon problème. Je ne sais pas pourquoi mais les droits en w ne se transmettent pas. Je dois appliquer ces droits dans un dossier et tout ce qui est dedans. J'ai fais ainsi :

```
JamesbOVH albums # setfacl -m user:apache:rwx .

JamesbOVH albums # setfacl -d -m user:apache:rwx .

JamesbOVH albums # getfacl .

# file: .

# owner: gilleracine

# group: webftp

user::rwx

user:apache:rwx

group::rwx

mask::rwx

other::---

default:user::rwx

default:user:apache:rwx

default:group::rwx

default:mask::rwx

default:other::---
```

Donc j'ai rajouté en access et default permission apache en rwx. Maintenant je créé un fichier et un dossier depuis mon client FTP :

```
JamesbOVH albums # ls -lh

total 228K

-rw-r-----+ 1 gilleracine webftp 211K août  5 22:56 photo.jpg

drwxr-x---+ 2 gilleracine webftp 4,0K août  5 22:56 testb

JamesbOVH albums # getfacl photo.jpg testb/

# file: photo.jpg

# owner: gilleracine

# group: webftp

user::rw-

user:apache:rwx         #effective:r--

group::rwx         #effective:r--

mask::r--

other::---

# file: testb/

# owner: gilleracine

# group: webftp

user::rwx

user:apache:rwx         #effective:r-x

group::rwx         #effective:r-x

mask::r-x

other::---

default:user::rwx

default:user:apache:rwx

default:group::rwx

default:mask::rwx

default:other::---
```

Donc je ne sais pas pourquoi c'est pas effectif en rwx !? Pourtant je vois que les masks et default mask du dossier parent sont bon et pas ceux des objets créés...

----------

## kernelsensei

J'avais pas pensé à ça, mais oui, le mask est modifié par le chmod (valeur du groupe), donc ça craint un peu. Par contre j'ai regardé du coté de la doc de Pure-Ftpd, si tu enlèves l'option -R tu peux autoriser tes utilisateurs à utiliser chmod. Donc après un upload tu aurais juste à faire le chmod -R qui va bien.

----------

## Jamesbch

Le problème c'est que n'est pas moi qui upload les fichiers et ceux qu'ils le font ne savent pas ce que sont les droits ou les chmod. Donc en gros la solution serait de coupler les ACL et le script UPLOADSCRIPT de pure-ftpd. Suffit que j'y mette un chmod -R sur la racine du dossier. Pour l'option -R je ne veux pas permettre aux utilisateurs de changer le chmod par raison de sécurité déjà. Enfin je préfère pas pour l'instant.

Par contre, ce serait bien de faire un patch qui permette de chmod'er les fichiers/dossiers pour personnaliser les droits par utilisateur virtual selon ses préfères  :Smile: 

----------

