Je dois pouvoir ajouter à vsftpd un utilisateur virtuel qui n'a accès qu'à un sous-dossier. La raison pour laquelle je veux utiliser des utilisateurs virtuels est que je veux seulement avoir un utilisateur réel sur le serveur.
La structure FTP est:
www
name __ website_name1
sub_folder1
website_name2
sub_folder2
sub_folder3
website_name3
website_name4
Le compte principal a accès au dossier www et à tous les sous-répertoires et je souhaite ajouter un utilisateur virtuel pouvant avoir accès au sous-dossier 1 et uniquement sous_folder1
Pour éviter toute confusion, je demanderais également à un autre utilisateur d'accéder à sous_folder3 et uniquement sous_folder3 . Mon point étant que je dois pouvoir choisir quel dossier et quels sous-dossiers pour chaque utilisateur.
J'ai trouvé des moyens d'ajouter des utilisateurs pour afficher l'intégralité de la structure ou des dossiers d'installation nommés, qui ne me sont d'aucune utilité.
J'ai trouvé une question similaire postée ici:
Comment configurer VSFTPD pour plusieurs utilisateurs en ajoutant des répertoires spécifiques
mais il recommande proftpd
que je croyais généralement moins sécurisé.
Ou ai-je manqué le point ici?
En jouant un peu, j'ai réussi à trouver une solution semi (pas parfaite mais assez bonne)
en utilisant la réponse 2707974 et les informations que j'ai acquises ailleurs, j'ai pu obtenir ce dont j'avais besoin.
Vous devez d’abord installer vsftp et PAM
apt-get install vsftpd libpam-pwdfile
Éditez /etc/vsftpd.conf
nano /etc/vsftpd.conf
puis collez le suivant
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
Modifier selon vos besoins, l'élément le plus important pour les utilisateurs virtuels est tout ce qui suit le commentaire sur les paramètres d'utilisateur virtuel
Création d'utilisateur
Vous pouvez utiliser une base de données ou htpasswd
j'ai trouvé htpasswd
plus rapide et plus facile à utiliser.
faire un répertoire pour stocker vos utilisateurs
mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1
ajouter des utilisateurs supplémentaires en omettant simplement le -c
htpasswd -d /etc/vsftpd/ftpd.passwd user2
J'ai seulement réussi à le faire fonctionner en utilisant CRYPT qui limite à 8 caractèrespour utiliser plus de 8 caractères, utilisez openssl pour générer un hachage compatible et le tuyau directement dans htpasswd
htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)
Une fois vos utilisateurs créés, vous pouvez maintenant modifier votre fichier de configuration PAM.
nano /etc/pam.d/vsftpd
et supprimez tout ce qui se trouve dans ce fichier et remplacez-le par ce qui suit
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
Ceci activera la connexion pour vos utilisateurs virtuels définis dans /etc/vsftpd/ftpd.passwd
et désactivera les utilisateurs locaux
Ensuite, nous devons ajouter un utilisateur à utiliser par ces utilisateurs virtuels. Ces utilisateurs n'auront pas accès au shell et s'appelleront vsftpd
useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd
l'utilisateur doit correspondre à guest_username=vsftpd
dans le fichier de configuration vsftpd
Définition de l'accès au répertoire
La ligne importante ici est la suivante
user_config_dir=/etc/vsftpd_user_conf
cela signifie que lorsque user1
se connecte, le fichier suivant sera recherché
/etc/vsftpd_user_conf/user1
ce fichier est identique au vsftpd.conf
afin que vous puissiez définir un nouveau local_root
pour revenir à la question, nous voulons que user1
n’ait accès qu’à var/www/website_name1/sub_folder1
. Nous devons donc créer le dossier vsftpd_user_conf
:
mkdir /etc/vsftpd_user_conf
Maintenant, créez le fichier utilisateur:
nano /etc/vsftpd_user_conf/user1
et entrez la ligne suivante
local_root=/var/www/website_name1/sub_folder1
Maintenant, redémarrez vsftp
service vsftpd restart
vous devriez maintenant pouvoir vous connecter en tant qu'utilisateur1 qui ne pourra voir que var/www/website_name1/sub_folder1
et tous les dossiers et fichiers qu'il contient.
Voilà, vous pouvez maintenant ajouter autant d'utilisateurs que vous le souhaitez et limiter leur accès au dossier de votre choix.
important de se rappeler que si vous ne créez pas de fichier de configuration utilisateur, le dossier var/www sera par défaut root (dans l'exemple ci-dessus)
Si le sous-dossier doit être modifiable par l'utilisateur, il peut être nécessaire de changer le propriétaire du sous-dossier partagé:
chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Essayez avec ce manuel. Peut-être travaillera pour vous.
Comment faire
Installez vsftpd et une bibliothèque PAM
Éditer /etc/vsftpd.conf
et /etc/pam.d/vsftpd
Créer des comptes d'utilisateurs avec des répertoires personnalisés (dans/var/www/par exemple)
Définir les répertoires avec les noms chmod
et chown
corrects
Créer un utilisateur admin avec un accès complet au serveur
vsftpd
(Deamon FTP très sécurisé) et libpam-pwdfile
pour créer des utilisateurs virtuelsJe voulais créer des utilisateurs FTP mais je ne voulais pas ajouter d’utilisateurs Unix locaux (pas d’accès Shell, pas de répertoire de base, etc.). Un PAM (Pluggable Authentication Modules) vous aidera à créer des utilisateurs virtuels.
Sudo apt-get install vsftpd libpam-pwdfile
vsftpd.conf
D'abord, vous devez sauvegarder le fichier d'origine
Sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
Puis créer un nouveau
Sudo vim /etc/vsftpd.conf
Copiez et collez les lignes suivantes. Le fichier doit contenir UNIQUEMENT ces lignes:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
Pour enregistrer un utilisateur, vous utilisez htpasswd
; je suppose donc que Apache2
fonctionne sur votre serveur. Créez un dossier vsftpd
puis placez-y les fichiers de configuration.
Sudo mkdir /etc/vsftpd
puis
Sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
-c signifie que nous allons créer le fichier s'il n'existe pas encore. -d force MD5, vous en avez besoin sous Ubuntu 12.04, utilisez-le toujours
La commande demandera un mot de passe.
Si vous souhaitez ajouter de nouveaux utilisateurs par la suite:
Sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2
/etc/pam.d/vsftpd
Encore une fois, vous devez sauvegarder le fichier d’origine.
Sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
et créer un nouveau
Sudo vim /etc/pam.d/vsftpd
Copiez et collez ces 2 lignes (cela devrait être le seul contenu). J'insiste seulement sur ces 2 lignes, j'ai perdu beaucoup de temps à conserver les originaux et je les ai simplement ajoutés.
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
Sudo useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd
Vous pouvez vérifier qu’il a été créé avec la commande id: id vsftpd. Nous définissons l’utilisateur avec le shell/bin/false à cause du paramètre check_Shell (même si vous ne l’utilisez pas). Lorsque l'utilisateur final se connectera au serveur FTP, ils seront utilisés pour les droits et la propriété:
chmod
et chown
.
vsftpd
La méthode courante consiste à utiliser init.d comme tout le monde
Sudo /etc/init.d/vsftpd restart
Sudo service vsftpd restart
Selon la configuration, tous les utilisateurs seront placés dans ce dossier:/var/www/user1.
Vous devez les créer avec des droits particuliers: le dossier racine ne peut pas être écrit!
/ [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755
Remarque: l'utilisateur ne peut pas créer de fichiers ou de dossiers dans le répertoire racine.
Dans vsftpd.conf
, nous avons chroot_local_user=YES
afin que l'utilisateur ne puisse rien voir en dehors de son dossier. Pour lui, le serveur ressemble à ceci:
Donc, lancez ces commandes:
mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1
Le dossier /var/www/user1
DOIT exister ou la connexion échouera.
Pour le moment, vous pouvez essayer de vous connecter avec votre FTP
Pour créer un utilisateur admin, nous devons enregistrer un nouvel utilisateur avec htpasswd
.
Avant de le faire, je vous conseillerai de vérifier dans le fichier /etc/ftpusers
qui définit certains utilisateurs qui ne sont pas autorisés à se connecter avec ftp. Je pense que c’est uniquement pour les utilisateurs locaux et non pour les utilisateurs virtuels, mais juste au cas où ne choisissez pas un nom contenu dans ce fichier.
Sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin
Maintenant, nous devons ajouter une nouvelle ligne dans /etc/vsftpd.conf
chroot_list_enable=YES
Cela signifie que votre utilisateur sera placé dans son dossier (en tant que prison) SAUF les utilisateurs dans le fichier/etc /
vsftpd.chroot_list
Créons ce fichier et ajoutons notre utilisateur, le fichier est une simple ligne contenant "theadmin". Ajoutez un utilisateur par ligne. Cela signifie que vous n'avez PAS besoin de créer un dossier /var/www/theadmin
, l'utilisateur se connectera et démarrera dans /home/vsftpd
.
Redémarrez le serveur et vous avez terminé!
oui, et pour plus de flexibilité, créez un répertoire et un fichier userconfig, mkdir /var/www/userconfs
ou tout ce que vous souhaitez modifier, puis créez un fichier spécifique.
vi /var/www/userconfigs/ftpuseraccount
dans le type, local_root=/var/www
(ou ce que vous voulez accéder par répertoire) guest_username=www-data
(le propriétaire du fichier ubuntu) top edit
après avoir mis à jour votre fichier vsftpd.conf en ajoutant user_config_dir=/var/www/userconfigs
(ou quel que soit le nom que vous avez remplacé, ce compte accédera à tout ce que vous avez spécifié)