web-dev-qa-db-fra.com

Compte FTP pour un seul répertoire

Informations générales:

J'utilise Serverpilot pour gérer mon serveur Ubuntu qui ne fournit aucun service FTP.

  • Il y a un utilisateur: serverpilot
  • Avec le répertoire personnel: /srv/users/serverpilot/
  • Et un site Web est en cours d'exécution dans ce répertoire: /srv/users/serverpilot/apps/website/public/.

Ce que je veux:

Maintenant, j'aimerais avoir un compte FTP qui ne peut lire et écrire que dans ce répertoire: /srv/users/serverpilot/apps/website/public/ftpdir/.

Ce que j'ai essayé:

  • J'ai installé vsftpd: Sudo apt-get install vsftpd
  • Créé un nouvel utilisateur avec ce répertoire comme répertoire personnel: Sudo useradd -m -d /srv/users/serverpilot/apps/website/public/ftpdir ftpuser (ce qui n’est probablement pas une bonne idée d’avoir un répertoire personnel d’un utilisateur dans le répertoire personnel d’un autre utilisateur)
  • J'ai changé le mot de passe avec Sudo passwd ftpuser
  • Edité la configuration par défaut de vsftpd avec Sudo vi /etc/vsftpd.conf
    • local_enable=YES pour que ftpuser puisse être utilisé comme login FTP
    • write_enable=YES l'utilisateur est capable d'écrire
    • chroot_local_user=YES ne peut accéder à rien en dehors de son répertoire personnel
    • pam_service_name=ftp parce que j'obtenais un erreur de 530 Login incorrecte
  • Et ouvert mon pare-feu avec: Sudo ufw allow 21/tcp

Les problèmes:

  • D'autres utilisateurs à côté de ftpuser peuvent également être utilisés comme identifiant FTP. Je veux juste avoir 1 utilisateur ftp et ne pas permettre aux autres utilisateurs du système d'utiliser FTP.
  • Le ftpuser peut également utiliser SSH sur le serveur.
  • Je reçois une erreur 553 error: could not create file en essayant de télécharger un fichier. Pour résoudre ce problème, je suis tombé sur cette question: https://askubuntu.com/a/320186 mais ce n'est pas le cas pense que c'est la bonne façon, car le fichier devrait appartenir à l'utilisateur serverpilot, et non à l'utilisateur ftpuser. Le site Web exécuté sous l'utilisateur serverpilot doit traiter les fichiers téléchargés.

Comment je l'ai résolu auparavant:

Dans le passé, sur un autre serveur, j'avais changé la propriété du répertoire et après avoir ajouté ces options de configuration supplémentaires de vsftpd, cela fonctionnait enfin:

file_open_mode=0775
local_umask=022
allow_writeable_chroot=YES
pam_service_name=vsftpd

Mais sur ce serveur, j’ai eu des problèmes avec le traitement des fichiers téléchargés à cause de la propriété, c’est pourquoi j’utilise la fonction file_get_contents() PHP pour obtenir les fichiers sur le Web au lieu de les y accéder directement. le serveur qui n'est pas si gentil.

La dernière question:

Comment puis-je simplement avoir 1 login ftp qui peut lire et écrire dans un répertoire du répertoire de base des utilisateurs où la propriété reste sur l'utilisateur d'où provient le répertoire de base?

3
Roy

local_enable = OUI est ce qui permet aux autres utilisateurs de se connecter. Vous devez plutôt ajouter votre utilisateur à la liste d'utilisateurs explicite.

du manuel:

local_enable
Controls whether local logins are permitted or not. If enabled,       normal user accounts in /etc/passwd (or wherever your PAM config references) may be used to log in. This must be enable for any non-anonymous login to work, including virtual users.
Default: NO

userlist_file
This option is the name of the file loaded when the userlist_enable option is active.
Default: /etc/vsftpd.user_list

Pour trier vos problèmes d'autorisations, activez la commande SITE CHMOD et demandez à votre client FTP de l'utiliser.

chmod_enable
When enabled, allows use of the SITE CHMOD command. NOTE! This only applies to local users. Anonymous users never get to use SITE CHMOD.
Default: YES
2
Amias

vsftpd ne supporte pas le nombre limité d'utilisateurs mais proftpd est plus puissant et dispose d'une option dans le fichier de configuration (proftpd.conf) pour limiter la connexion à un utilisateur comme celui-ci:

<Limit LOGIN>
AllowUser barb
AllowUser dave
AllowGroup ftpuser
DenyAll
</Limit>

Éditer

  1. pour votre premier problème la solution est comme ci-dessus.
  2. deuxième problème peut également résoudre en ajoutant DenyUsers ftpuser à /etc/ssh/sshd_config
  3. un troisième problème peut être résolu en ajoutant ftpuser au groupe de serverpilot et en ajoutant serverpilot au groupe de ftpuser. vous devez également modifier l'autorisation du dossier /srv/users/serverpilot/apps/website/public/ftpdir en 775.

Rappelez-vous que le dossier /srv/users/serverpilot/ doit avoir l'autorisation 755.

4
Ghasem Pahlavan

Vous pouvez utiliser la fonction PureDB de pure-ftpd pour créer un identifiant FTP uniquement pour le service pure-ftpd.

0
dhchen