web-dev-qa-db-fra.com

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

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:

  • wwwname __
    • 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 proftpdque je croyais généralement moins sécurisé.
Ou ai-je manqué le point ici?

23
Avenyet

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
29
Avenyet

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

  1. Installez vsftpd (Deamon FTP très sécurisé) et libpam-pwdfile pour créer des utilisateurs virtuels

Je 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

  1. Éditer 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
  1. Enregistrer des utilisateurs virtuels

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

  1. Configurez 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 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
  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 à 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.

  1. Redémarrer vsftpd

La méthode courante consiste à utiliser init.d comme tout le monde

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 é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

  1. Créer un utilisateur administrateur pour accéder à l'ensemble du serveur

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é!

11
2707974

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é)

0
Agunbiade Bolaji