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é public
name__, 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é)
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 sftp
name__, vous leur accordez un accès libre à Shell. Pas un beau scénario. Comme SSH ne peut pas combiner AllowUsers
et 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 (youruser
ci-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 ssh
ou sftp
avec l’option -vvv
pour le débogage des messages. Pour sftp
name__, l'option doit apparaître devant l'hôte sous la forme sftp -vvv user@Host
.
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.
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.
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
créer un groupe sftp:
groupadd sftp
Créer un utilisateur directement avec le nouveau groupe sftp attaché:
Sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false
définissez les autorisations à utiliser avec ssh pour sftp:
chown root:root HomeFolder
chmod 755 HomeFolder
service de redémarrage:
service ssh restart
Notez que le dossier personnel du nouvel utilisateur sftp doit être attribué au propriétaire racine.
Voici un guide étape par étape pour permettre:
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)
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