Comment configurer des utilisateurs virtuels pour vsftpd avec accès à un sous-répertoire spécifique?


24

Je dois pouvoir ajouter un utilisateur virtuel à vsftpd qui n'a accès qu'à un sous-dossier. La raison pour laquelle je souhaite utiliser des utilisateurs virtuels est que je ne souhaite avoir qu'un seul utilisateur réel sur le serveur.

La structure FTP est:

  • www
    • 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 qui peut avoir accès au sous- dossier1 et uniquement au sous- dossier1

Pour éviter une certaine confusion, j'exigerais également qu'un autre utilisateur accède à sub_folder3 et uniquement à sub_folder3 . Mon point étant que je dois être en mesure de choisir quel dossier et sous-dossiers utilisateur par utilisateur.

J'ai trouvé des moyens d'ajouter des utilisateurs pour voir l'intégralité de la structure ou configurer les dossiers nommés par l'utilisateur, qui ne me sont d'aucune utilité.

J'ai trouvé une question similaire publiée ici:

Comment configurer VSFTPD pour plusieurs utilisateurs, y compris l'ajout de répertoires spécifiques

mais il recommande proftpdque je pensais être généralement moins sûr.
Ou ai-je manqué le point ici?


J'ai eu un problème d'authentification pendant la plus longue période jusqu'à ce que je trouve ce serverfault.com/questions/450214/… Apparemment, PAM a des problèmes avec le hachage MD5. Ce guide résout ce problème.

Réponses:


31

Avec un peu de jeu, 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 obtenues ailleurs où j'ai pu obtenir ce dont j'ai besoin.

Vous devez d'abord installer vsftp et PAM

apt-get install vsftpd libpam-pwdfile

Modifiez /etc/vsftpd.conf

nano /etc/vsftpd.conf

puis collez ce qui suit

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 à vos besoins exacts, le bit le plus important pour les utilisateurs virtuels est tout après le commentaire des paramètres de l'utilisateur virtuel

Création d'un utilisateur

Vous pouvez soit utiliser une base de données ou htpasswdj'ai trouvé htpasswdplus rapide et plus facile à utiliser.

créer un annuaire pour stocker vos utilisateurs

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

l'ajout d'utilisateurs supplémentaires omettent simplement la -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

J'ai seulement réussi à le faire fonctionner en utilisant CRYPT qui limite à 8 caractères pour utiliser plus de 8 caractères utilisez openssl pour générer un hachage et un tuyau compatibles 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

Cela permettra la connexion pour vos utilisateurs virtuels définis dans /etc/vsftpd/ftpd.passwdet 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 seront appelésvsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

l'utilisateur doit correspondre guest_username=vsftpddans le fichier conf 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 vous vous user1connectez, il recherchera le fichier suivant

/etc/vsftpd_user_conf/user1

ce fichier identique au vsftpd.confafin que vous puissiez définir un nouveaulocal_root

revenons à la question à laquelle nous voulons user1seulement avoir accès var/www/website_name1/sub_folder1, nous devons donc créer le vsftpd_user_confdossier:

mkdir /etc/vsftpd_user_conf

Créez maintenant le fichier utilisateur:

nano /etc/vsftpd_user_conf/user1

et entrez la ligne suivante

local_root=/var/www/website_name1/sub_folder1

Redémarrez maintenant vsftp

service vsftpd restart

vous devriez maintenant pouvoir vous connecter en tant qu'utilisateur1 qui ne pourra voir var/www/website_name1/sub_folder1que 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 que vous souhaitez.

important de se rappeler que si vous ne créez pas de fichier de configuration utilisateur, il sera par défaut dans le dossier var / www en tant que root (dans l'exemple ci-dessus)

Si le sous-dossier est destiné à ê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

Cela fonctionne avec quelques modifications: 1) Utilisez des chemins absolus (remplacez les chemins commençant sur "var /" par "/ var". 2) vsftpd 2.3.5 qui est dans Ubuntu 12.04 ne prend pas en charge l'option allow_writeable_chroot, vous pouvez le résoudre en installant des correctifs vsftpd .
gadelat

Bonjour, avec le mot de passe SSL, omettons-nous à nouveau -c avec -d ou simplement -c? Également sur une deuxième note, devons-nous simplement réexécuter la requête pour changer le mot de passe? ou existe-t-il une autre méthode. Merci
mdixon18

Pourquoi avez-vous besoin de créer un répertoire personnel avec useradd --home? il est nécessaire?
e-info128

1
Supplémentaire: activez les connexions TLS sécurisées. digitalocean.com/community/tutorials/…
e-info128

1
apache2-utils peut être requis pour certaines installations. Je ne l'ai pas inclus dans les réponses car ce n'est pas pertinent pour tout le monde.
Avenyet

12

Essayez avec ce manuel. Peut-être fonctionnera-t-il pour vous.

Comment faire

Installer vsftpd et une bibliothèque PAM

Modifier /etc/vsftpd.confet/etc/pam.d/vsftpd

Créez des comptes utilisateur avec des répertoires personnalisés (dans / var / www / par exemple)

Définir des répertoires avec la bonne chmodetchown

Créer un utilisateur administrateur avec un accès complet au serveur

  1. Installer vsftpd(Deamon FTP très sécurisé) et libpam-pwdfilecréer des utilisateurs virtuels

Je voulais créer des utilisateurs FTP mais je ne voulais pas ajouter d'utilisateurs locaux Unix (pas d'accès shell, pas de répertoire personnel, etc.). Un PAM (Pluggable Authentication Modules) vous aidera à créer des utilisateurs virtuels.

sudo apt-get install vsftpd libpam-pwdfile

  1. modifier vsftpd.conf

Vous devez d'abord sauvegarder le fichier d'origine

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Ensuite, créez-en un nouveau

sudo vim /etc/vsftpd.conf

Copiez et collez les lignes suivantes. Le fichier ne doit contenir que 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
  1. Enregistrer des utilisateurs virtuels

Pour enregistrer un utilisateur que vous utilisez htpasswd, je suppose que vous apache2travaillez sur votre serveur. Créez un vsftpddossier 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 sur Ubuntu 12.04, utilisez-le toujours

La commande vous demandera un mot de passe.

Si vous souhaitez ajouter de nouveaux utilisateurs par la suite:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Configurer PAM dans /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 en 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 à garder les originaux et je les ai juste ajoutés.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Créer un utilisateur local sans accès au shell

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 en raison du paramètre check_shell (même si vous ne l'utilisez pas). Lorsque l'utilisateur final se connecte au serveur FTP, ils seront utilisés pour les droits et la propriété:

chmodet chown.

  1. Redémarrer vsftpd

La manière courante utilise init.d comme tous les démons

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Créer des répertoires

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 accessible en écriture!

 / [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.confce chroot_local_user=YEScas, l'utilisateur ne peut rien voir en dehors de son dossier. Pour lui, le serveur ressemble à ceci:

Il suffit donc d'exécuter 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 /var/www/user1dossier doit exister ou la connexion échouera.

Pour le moment, vous pouvez essayer de vous connecter avec votre FTP

  1. Créez un utilisateur Admin pour accéder à l'ensemble du serveur

Pour créer un utilisateur administrateur, nous devons enregistrer un nouvel utilisateur avec htpasswd.

Avant de le faire, je vous conseille de vérifier dans le /etc/ftpusersfichier 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 les utilisateurs virtuels, mais 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 (comme une prison) SAUF les utilisateurs dans / 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 /var/www/theadmindossier, l'utilisateur se connectera et démarrera /home/vsftpd.

Redémarrez le serveur et vous avez terminé!


J'ai déjà essayé cela très rigide car il applique local_root = / var / www / $ USER. Cela ne me permet pas de spécifier un seul répertoire pour un ou plusieurs utilisateurs. ce répertoire a normalement un objectif et un emplacement différents selon le client. Merci pour la réponse.
Avenyet

0

oui, vous pouvez, et pour plus de flexibilité, créez un répertoire et un fichier userconfig, mkdir /var/www/userconfsou tout ce que vous souhaitez changer le nom userconfs, puis créez un fichier spécifique

vi /var/www/userconfigs/ftpuseraccount

à l'intérieur du type, local_root=/var/www(ou tout ce que vous voulez accéder par dir) guest_username=www-data(le propriétaire ubuntu du fichier top edit

après la mise à jour, vous vsftpd.conf en ajoutant user_config_dir=/var/www/userconfigs(ou quoi que vous l'ayez remplacé, ce compte accédera à tout sdir yo spécifié)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.