web-dev-qa-db-fra.com

Comment configurer un serveur SFTP avec des utilisateurs chrootés dans leurs répertoires personnels?

J'ai essayé de configurer un serveur SFTP avec plusieurs utilisateurs chrootant dans leurs répertoires personnels. J'ai suivi les conseils sur ce guide ( lien Archive.org ), puis j'ai exécuté les commandes suivantes sur les répertoires de l'utilisateur

chown root:root /home/user/
chmod 755 /home/user/

Il existe un dossier supplémentaire dans le répertoire de base de chaque utilisateur appelé publicname__, qui appartient à son utilisateur afin de lui permettre de créer des répertoires et de télécharger et de supprimer des fichiers selon les besoins. (Cela a été conseillé dans le guide que j'ai mentionné plus tôt)

Maintenant, quand j'exécute sftp -P 435 user@localhost, j'obtiens cette erreur:

Échec de l'écriture: tuyau cassé
Impossible de lire le paquet: connexion réinitialisée par un pair

Comment dois-je procéder à partir d'ici? L'idée ultime est de faire en sorte que chaque utilisateur d'une autre machine utilise FileZilla pour se connecter à ses répertoires de départ chrootés, puis puisse télécharger des répertoires et des fichiers. Tout cela dans SFTP (parce que c'est plus sécurisé)

23
Nitin Venkatesh

Cet article explique également comment obtenir un accès shell en mode chrooté, mais puisque vous souhaitez simplement disposer d'un compte sftp uniquement, suivez simplement les instructions suivantes:

Éditez /etc/ssh/sshd_config et ajoutez les lignes:

SubSystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

Recherchez la ligne UsePAM yes et commentez-la:

#UsePAM yes

Sans cette désactivation, mon serveur SSH se bloquerait lors du rechargement/du redémarrage. Puisque je n'ai pas besoin de fonctions sophistiquées de PAM, c'est très bien.

Pour plus de sécurité, limitez le nombre d'utilisateurs pouvant se connecter. Si vous oubliez d'ajouter des utilisateurs SFTP au groupe sftpname__, vous leur accordez un accès libre à Shell. Pas un beau scénario. Comme SSH ne peut pas combiner AllowUserset AllowGroups(une connexion doit respecter les deux règles), vous devez créer un groupe supplémentaire, par exemple ssh-users. Ajoutez les utilisateurs autorisés à se connecter (youruserci-dessous) via SSH:

Sudo groupadd ssh-users
Sudo gpasswd -a youruser ssh-users

Et ajoutez la ligne suivante à /etc/ssh/sshd_config:

AllowGroups ssh-users sftp

Passez maintenant à la modification des autorisations du répertoire de base des utilisateurs afin de permettre leur encrassement (exemple, l'utilisateur sftp-user):

Sudo chown root:sftp-user /home/sftp-user
Sudo chmod 750 /home/sftp-user

Créez un répertoire dans lequel sftp-user est libre d'y placer tous les fichiers:

Sudo mkdir /home/sftp-user/public
Sudo chown sftp-user: /home/sftp-user/public
Sudo chmod 750 /home/sftp-user/public

Si vous rencontrez des problèmes, consultez /var/log/syslog et /var/log/auth.log pour plus de détails. Exécutez sshou sftpavec l’option -vvv pour le débogage des messages. Pour sftpname__, l'option doit apparaître devant l'hôte sous la forme sftp -vvv user@Host.

25
Lekensteyn

Je voulais juste ajouter que les autorisations de dossier dans l'arborescence de répertoires doivent être définies d'une certaine manière.

les exigences strictes de sshd en matière de propriété/autorisations imposent que chaque répertoire du chemin d'accès chroot soit la propriété de root et ne puisse être écrit que par le propriétaire.

Source

J'avais une erreur très similaire et la réparation de mes autorisations de répertoire a résolu le problème pour moi.

12
Nathan Jones

J'utilise Ubuntu LTS 12.04 et après beaucoup de douleur, cela a fonctionné pour moi.

Mes paramètres pour /etc/ssh/sshd_config

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
UsePAM yes
Match group sftp
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  1. créer un groupe sftp:

    groupadd sftp

  2. Créer un utilisateur directement avec le nouveau groupe sftp attaché:

    Sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. définissez les autorisations à utiliser avec ssh pour sftp:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. service de redémarrage:

    service ssh restart

Notez que le dossier personnel du nouvel utilisateur sftp doit être attribué au propriétaire racine.

9
Aten

Voici un guide étape par étape pour permettre:

  1. Accès SFTP à/home/bob/uploads pour l'utilisateur bob
  2. Fermez Bob en SSH
  3. Utilisez un nom d'utilisateur/mot de passe plutôt que des clés:

Commencez par éditer votre fichier/etc/ssh/sshd_config:

Sudo nano /etc/ssh/sshd

Faites défiler et modifier:

PasswordAuthentication yes

et ajoutez ceci en bas:

Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no  

Appuyez sur Ctrl-X pour quitter et sauvegarder.

Maintenant, ajoutez l'utilisateur:

Sudo useradd bob
Sudo passwd bob

Maintenant, ajoutez les groupes et désactivez ssh:

Sudo groupadd sftpusers
Sudo usermod  -g sftpusers bob
Sudo usermod -s /usr/bin/rssh bob
Sudo usermod -d /home/bob bob

Maintenant, définissez les autorisations:

Sudo chown root:root /home/bob/
Sudo chmod 755 /home/bob/
Sudo mkdir /home/bob/uploads
Sudo chown bob /home/bob/uploads

Sudo service sshd restart

Tout cela en étant connecté en tant qu'utilisateur root (utilisateur ec2 sur les AMI Amazon Linux)

3
Rob Mulder

Notez également, lors de l'ajout de la directive Match dans le fichier de configuration, que toutes les directives non pertinentes par rapport à ce que vous comparez peuvent cesser de fonctionner. Plutôt que de commenter tout ce qui n'est pas compatible, déplacez simplement les sections contenant une directive Match à la fin du fichier de configuration.

En outre, les autorisations doivent probablement être définies sur 755 pour le répertoire chroot et tous les répertoires parents, ainsi que pour le propriétaire sur root: root. Personnellement, j’ai configuré le répertoire chroot sshd_config sur% h, le répertoire personnel de l’utilisateur, puis son répertoire personnel à l’emplacement souhaité, tel que /var/www/examplewebsite.com. Certains préfèreront peut-être configurer un répertoire de base chroot avec une partie statique suivie du nom d'utilisateur, tel que/var/www /% u; toutefois, cela nécessite de s'assurer que le répertoire chroot de votre utilisateur correspond bien à son nom d'utilisateur, bien sûr.

Pour résoudre les problèmes de connexion, arrêtez le service ssh en veillant à ouvrir une ou deux sessions SSH à des fins de test, puis démarrez le démon de manière interactive en mode débogage pour examiner les informations de débogage de la connexion, ce qui peut vous aider à identifier les problèmes éventuels et à effectuer des recherches. comment les réparer.

Commandes: service ssh stop;/usr/sbin/sshd -d

Assurez-vous de redémarrer ssh une fois que vous avez terminé! Commande: service ssh start

0
RedScourge