Comment créer un utilisateur FTP avec un accès / dir / spécifique uniquement sur une installation Centos / linux

44

Je suis donc sur une installation VPS - CentOS Linux. J'ai vsFTPd sur le serveur. J'ai actuellement un accès SFTP au serveur via mon utilisateur root, mais j'essaie maintenant de créer un nouvel utilisateur avec un accès FTP à un répertoire spécifique uniquement sur le serveur. J'ai procédé comme suit:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

Ce que j'ai du mal à faire, c'est de créer un accès UNIQUEMENT à l'utilisateur /var/www/mydomain.com . J'ai constaté que l'utilisateur se connectait correctement dans le bon dossier, mais l'utilisateur pouvait ensuite revenir en arrière à d'autres répertoires. Je veux que l'utilisateur reste dans le dossier spécifique et ne puisse pas "parcourir" .

Des idées?

J'ai trouvé différents articles sur le chrootage, mais je n'ai tout simplement pas imaginé l'utiliser dans les étapes décrites ci-dessus.

utilisateur1231561
la source
digitalocean.com/community/tutorials/… Vous pouvez suivre ceci pour résoudre votre problème
Jack
pour ceux qui sont sur Ubuntu 18, voici la version spécifique digitalocean.com/community/tutorials/…
Dung

Réponses:

39

C'est assez simple.

Vous devez ajouter l'option suivante sur le fichier vsftpd.conf

chroot_local_user=YES

La documentation à l'intérieur du fichier de configuration est explicite:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

Cela signifie que l’utilisateur aura simplement accès au dossier que vous avez configuré en tant que HOME de l’utilisateur. En bas, j’ai un exemple d’entrée de mot de passe utilisateur:

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

Définissez le répertoire de base de l'utilisateur avec la commande suivante

usermod -d /var/www/my.domain.example/ exampleuser

Remarque: Dans mon exemple, cet utilisateur est également un utilisateur valide pour certaines tâches planifiées sous Linux. Si vous ne possédez pas ce besoin, s'il vous plaît changer le shell de l'utilisateur à la /sbin/nologinplace de bash.

Jeff Schaller
la source
Salut nwildner! Merci beaucoup d'avoir pris le temps de me répondre à ce sujet. Donc, dans mon fichier vsftpd.conf, ive a ajouté la ligne suivante "chroot_local_user = YES" - alors si je comprends bien, il faut ajouter une ligne similaire à celle que vous affichez pour mon utilisateur? Je dois admettre que je ne suis pas tout à fait sûr de savoir quoi écrire avec l’exemple que vous donnez. le "1001" etc qu'est-ce que c'est? Supposons que mon utilisateur s'appelle: "im_a_linux_noob" et que le répertoire de cet utilisateur est: "/var/www/mydomain.com" - à quoi ressemblerait-il?
user1231561
Et serais-je capable de le faire sans aucune étape supplémentaire de ce que ive fait dans mon message? Donc, faire 1-8 et ensuite ajouter ce que vous décrivez devrait faire l'affaire?
user1231561
Salut. L’exemple ci-dessus est juste une ligne (modifiée, bien sûr) du /etc/passwdfichier, qui représente un utilisateur appelé upload_ftp, 1001: 1001 est son ID utilisateur et son identifiant de groupe, / var / www / sites est le répertoire de base de l’utilisateur (et le paramètre à partir duquel vsftpd lit) et / bin / bash, le shell. Probablement ce qui manque sur votre cas est un répertoire à l'utilisateur, et il pourrait être résolu avec la commande suivante: usermod -d /var/www/mydomain.com <username>. Cheers :)
3
Ouais merci beaucoup. Un problème cependant. Cela fonctionne très bien en connexion via FTP normal, cependant lorsque je me connecte en tant que SFTP - je peux alors revenir en arrière - des idées?
user1231561
1
Certainement parce que sftp est géré par votre serveur ssh, pas par votre serveur ftp. De manière "brute": SFTP = SSH + FTP; FTPS = FTP + SSL. Il y a un fil sur sftp ici, et je le citerai pour éviter la duplication de sujets, ok? ;) unix.stackexchange.com/a/64541/34720
6

Après avoir changé votre configuration pour inclure chroot_local_user=YES

Vous pouvez modifier le shell de l'utilisateur /usr/sbin/nologinafin que, si le mot de passe fuit, vous réduisez certains risques (définissez également le répertoire de base). Le shell doit également figurer dans la liste /etc/shellssinon l’authentification échouera.

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR Le nouveau répertoire de connexion de l'utilisateur. Si l'option -m est fournie, le contenu du répertoire de base actuel sera déplacé vers le nouveau répertoire de base, qui est créé s'il n'existe pas déjà.

-s, --shell SHELL Nom du nouveau shell de connexion de l'utilisateur. Si ce champ est vide, le système sélectionne le shell de connexion par défaut.

https://security.appspot.com/vsftpd/FAQ.txt

Shapeshifter
la source
4

Voici les étapes à suivre pour configurer un utilisateur et lui permettre d’accéder uniquement via FTP (c’est-à-dire sans SSH) et de limiter également l’accès à un répertoire spécifique (répertoire de l’utilisateur) sur proftpd :

  1. Ajouter un nouvel utilisateur: adduser newusername

  2. Définir le mot de passe: passwd newusername

  3. Modifiez le répertoire de base de l'utilisateur par défaut dans un nouveau dossier:

    usermod -d /target/directory username

  4. Editer le shellsfichier: vi /etc/shellset ajouter /dev/nullà la fin

  5. Modifier l' newusernameentrée dans le passwdfichier: vi /etc/passwdà ajouter /./avant le newusernamepour que l'entrée ressemble à ceci:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    Détails pour les étapes 4 et 5 ici:

  6. Editer le /etc/proftpd/proftpd.conffichier et décommenter la ligneDefaultRoot ~

pTeJa
la source
-4

Définissez les autorisations du dossier racine sur 711 avec votre compte root.

Leping Zou
la source
-4

Exécutez cette commande:

useradd -d ftp_user:chown 711 /etc/init.d/
Lunix Pro
la source
2
Vous devriez envisager d'élargir votre publication pour avoir au moins une explication ou une documentation utile.
HalosGhost
C'est une réponse terrible. Vous donnez essentiellement à l'utilisateur ftp un accès complet au répertoire /etc/init.d/ - une folie complète. 711 a expliqué - permissions-calculator.org/decode/0711
mardi