Bonjour à toutes et à tous,
De retour d'un périple en Russie, je rattaque les droits des users sur mon FTP (vsFTPd) qui fonctionne par ailleurs très bien. J'ai tenté d'après le tuto qui m'a permis de le mettre en place de définir les droits pour chaque user sur différents dossiers.
Voilà ce que me dit le tuto (en vert ce qui fonctionne et en rouge ce qui ne fonctionne pas ou que je ne comprends pas) :
Gérer les permissions de chacun
• Admettons que nous voulions définir 2 types d'utilisateurs virtuels:
o un qui ne pourrait que se balader dans son home(commun à tous les utilisateurs virtuels i.e ~virtual/)et downloader tout ce qui s'y trouve(accès en lecture): 'tom'
o un autre qui pourrait en plus uploader(accès en lecture/écriture) dans un répertoire dédié, sans toutefois pouvoir supprimer des données: 'fred'
Pour cela, nous allons utiliser une des fonctionnalités supplémentaires de vsFTPd(depuis la version 1.1.0): la configuration par utilisateur(ou la configuration per-user)
[#00ff00]Activer la configuration per-user
La configuration 'per-user' est une option très puissante de vsFTPd puisqu'elle permet d'étendre l'usage de n'importe quelle option de la page de manuel à un utilisateur en particulier. Qui plus est, elle permet également de contrer la politique du 'vsftpd.conf' qui joue alors le rôle d'une politique par défaut.
Pour l'activer, il suffit de rajouter la ligne suivante à notre fichier /etc/vsftpd.conf :
[...]
user_config_dir=/etc/vsftpd/vsftpd_user_conf
Bon euh..les '[...]' vous les rentrez pas hein?!..(nan mais franchement! )
et de créer ce repertoire:
# mkdir /etc/vsftpd/vsftpd_user_conf/
C'est dans celui-ci que l'on va mettre les fichiers gérant les droits de chacun: un fichier par utilisateur!
N'oubliez pas que ce sont toujours les droits du système de fichiers qui prévalent sur ceux du serveur(ben oui, c'est logique, vsFTPd n'est jamais qu'un programme). Autrement dit, même si fred est autorisé du point de vue de vsFTPd à écrire, encore faut-il que l'utilisateur système 'virtual', qui le représente, ait le droit d'écriture sur le dossier en question!
On oublie pas de re-démarrer le serveur ftp pour que cette option soit prise en compte:
# /etc/init.d/vsftpd reload
Donnons à 'tom' son droit de lecture(download).
Comme nous l'avons vu plus haut, il suffit de contrer la politique par défaut de vsFTPd par un 'anon_world_readable_only=NO', mais pour 'tom' uniquement cette fois! On le définit donc dans SON fichier à lui:
# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/tom
Vérifiez donc que ça marche: loguez-vous en 'tom' et faites de nouveau un `ls`:
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 263 Aug 23 23:18 hosts
226 Directory send OK.
Puis loguez-vous en 'fred' et apercevez-vous que ça ne marche toujours pas pour lui...
Donnons à 'fred' son droit de lecture/écriture(download/upload), dans un répertoire dédié
De la même manière:
# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/fred
# echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/fred
# echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/fred
Cependant, au vue des permissions de ~virtual/, si fred a les droits nécessaires du point de vue du serveur, 'virtual' lui ne les aura pas du point de vue du système de fichiers!
Créons par conséquent un répertoire dédié dans lequel le méta-utilisateur virtuel 'virtual' du groupe 'ftp' aura la permission d'écrire:
# mkdir ~virtual/upload/
# chmod 770 ~virtual/upload/
Ayez-en le coeur net, loguez-vous en 'fred' et vérifiez que vous pouvez uploader:
ftp> cd upload
250 Directory successfully changed.
ftp> send /etc/hostname hostname
local: /etc/hostname remote: hostname
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
16 bytes sent in 0.00 secs (157.8 kB/s)
Loguez-vous en 'tom' et constatez le contraire...
Essayez par la même d'effacer des fichiers avec la commande `delete` et constatez que vsFTPd vous l'interdit.
Quelques autres droits
Si l'on désire accorder en plus à 'fred' le droit de créer un dossier:
# echo "anon_mkdir_write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/fred
ou même le droit de renommer, supprimer... :
# echo "anon_other_write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/fred
File dans ta chambre!
Jusqu'ici, tous nos utilisateurs virtuels vivaient sous le même toît et partageaient la même maison. 'tom' ne faisait jamais son lit, rôtait tout fort et ne rangeait jamais ses chaussures!!! 'fred' était à bout!
Dans ces conditions, et afin d'éviter le drame, nous n'avons d'autre choix que de leur construire une chambre et un placard chacun:
# cd ~virtual/
# mkdir -p {tom/,fred/}/upload
# chmod 2750 {tom/,fred/}
# chmod 770 {tom/,fred/}/upload/
Il suffit ensuite de rajouter l'option local_root=$USER dans le fichier de configuration de $USER (i.e: /etc/vsftpd/vsftpd_user_conf/$USER), et ce pour tous les utilsitateurs:
Vous aurez bien sûr compris que dans les faits, on remplace $USER par chacun des utilsateurs de notre base de données!
# echo "local_root=tom" >> /etc/vsftpd/vsftpd_user_conf/tom
# echo "local_root=fred" >> /etc/vsftpd/vsftpd_user_conf/fred
C'est donc la partie en rouge qui ne fonctionne pas. Dès que je le mets en place, plus aucun utilisateur virtuel n'a accès au FTP. Soit il y une erreur dans le tuto (ce dont je doute) soit il y a une erreur de paramétrage ou de syntaxe de ma part (c'est plus probable). Si vous voyez une solution...
Le post d'ouverture de ce sujet rappelle ce que je veux faire exactement.
Merci d'avance pour votre aide.
Message édité par bigbaboon le 25-10-2007 à 10:18:38