Comment activer SFTP sans accès au shell sur CentOS 7

introduction

SFTP signifie S SH Protocole de transfer de fichier. Comme son nom l’indique, c’est un moyen sécurisé de transférer des fichiers sur un serveur à l’aide d’une connexion SSH cryptée. Malgré son nom, il s’agit d’un protocole complètement différent de https://www.digitalocean.com/community/tutorials/what-is-ftp-and-how-is-it-used-FTP] ( F ile * * T ransfer P rotocol), bien que largement supporté par les clients FTP modernes.

SFTP est disponible par défaut sans configuration supplémentaire sur tous les serveurs sur lesquels l’accès SSH est activé. Sécurisé et facile à utiliser, il présente toutefois un inconvénient: dans une configuration standard, le serveur SSH accorde l’accès au transfert de fichiers et l’interface terminal shell à tous les utilisateurs disposant d’un compte sur le système.

Dans certains cas, vous pouvez souhaiter que seuls certains utilisateurs soient autorisés à effectuer des transferts de fichiers et aucun accès SSH. Dans ce tutoriel, nous allons configurer le démon SSH pour limiter l’accès SFTP à un répertoire sans accès SSH autorisé par utilisateur.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur CentOS 7 configuré avec cette introduction à la configuration initiale du serveur, y compris un utilisateur sudo non root.

  • En option, l’éditeur de texte + nano + installé avec + yum install nano +. CentOS est livré avec l’éditeur de texte + vi + par défaut, mais + nano + peut être plus convivial.

Étape 1 - Création d’un nouvel utilisateur

Commencez par créer un nouvel utilisateur auquel seul le transfert de fichiers sera autorisé à accéder au serveur. Ici, nous utilisons le nom d’utilisateur * sammyfiles *, mais vous pouvez utiliser le nom d’utilisateur de votre choix.

sudo adduser

Ensuite, attribuez un mot de passe au nouvel utilisateur:

sudo passwd

Entrez un mot de passe fort, puis répétez-le pour le vérifier.

Vous venez de créer un nouvel utilisateur qui se verra accorder l’accès au répertoire restreint. Dans l’étape suivante, nous allons créer le répertoire pour les transferts de fichiers et définir les autorisations nécessaires.

Étape 2 - Création d’un répertoire pour les transferts de fichiers

Afin de limiter l’accès SFTP à un seul répertoire, nous devons d’abord nous assurer que le répertoire est conforme aux conditions d’autorisation du serveur SSH, qui sont très particulières.

Plus précisément, le répertoire lui-même et tous les répertoires situés au-dessus de celui-ci dans l’arborescence du système de fichiers doivent appartenir à * root * et ne doivent être écrits par personne d’autre. Par conséquent, il n’est pas possible de simplement donner un accès restreint au répertoire de base d’un utilisateur, car ces répertoires appartiennent à l’utilisateur, et non à * root *.

Il existe plusieurs façons de contourner ce problème de propriété. Dans ce tutoriel, nous allons créer et utiliser + / var / sftp / uploads + comme répertoire de téléchargement cible. + / var / sftp + sera la propriété de * root * et ne pourra pas être écrit par d’autres utilisateurs; le sous-répertoire + / var / sftp / uploads + sera la propriété de * sammyfiles *, afin que cet utilisateur puisse y télécharger des fichiers.

Tout d’abord, créez les répertoires.

sudo mkdir -p /var/sftp/uploads

Définissez le propriétaire de + / var / sftp + sur * racine *.

sudo chown root:root /var/sftp

Donnez les autorisations d’écriture * root * sur le même répertoire et accordez aux autres utilisateurs uniquement les droits de lecture et d’exécution.

sudo chmod 755 /var/sftp

Changez la propriété du répertoire + uploads + en * sammyfiles *.

sudo chown sammyfiles:sammyfiles /var/sftp/uploads

Maintenant que la structure de répertoires est en place, nous pouvons configurer le serveur SSH lui-même.

Étape 3 - Restreindre l’accès à un répertoire

Dans cette étape, nous allons modifier la configuration du serveur SSH afin de désactiver l’accès au terminal pour * fichiers sammy * tout en autorisant l’accès au transfert de fichiers.

Ouvrons le fichier de configuration du serveur SSH avec + vi + ou votre éditeur de texte préféré (voici un https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on- a-cloud-server # édition modale [brève introduction à + ​​vi +]

sudo vi /etc/ssh/sshd_config

Faites défiler jusqu’au bas du fichier et ajoutez l’extrait de configuration suivant:

/ etc / ssh / sshd_config

. . .

Match User
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Puis enregistrez et fermez le fichier.

Voici ce que chacune de ces directives fait:

  • + Match User + indique au serveur SSH d’appliquer les commandes suivantes uniquement à l’utilisateur spécifié. Ici, nous spécifions * sammyfiles *.

  • + ForceCommand internal-sftp + force le serveur SSH à exécuter le serveur SFTP lors de la connexion, interdisant ainsi l’accès au shell.

  • + PasswordAuthentication yes + permet l’authentification par mot de passe pour cet utilisateur.

  • + ChrootDirectory / var / sftp / + garantit que l’utilisateur ne sera pas autorisé à accéder à autre chose qu’au-delà du répertoire + / var / sftp +. Pour en savoir plus sur chroot, consultez la page this Ubuntu- tutoriel basé sur chroot.

  • + AllowAgentForwarding no +, + AllowTcpForwarding no +. et + X11 Forwarding no - transfert de port, tunneling et transfert X11 pour cet utilisateur.

Cet ensemble de commandes, commençant par + Match User +, peut également être copié et répété pour différents utilisateurs. Assurez-vous de modifier le nom d’utilisateur dans la ligne + Match User + en conséquence.

Pour appliquer les modifications de configuration, redémarrez le service.

sudo systemctl restart sshd

Vous avez maintenant configuré le serveur SSH pour restreindre l’accès au transfert de fichiers uniquement pour * sammyfiles *. La dernière étape consiste à tester la configuration pour vous assurer qu’elle fonctionne comme prévu.

Étape 4 - Vérification de la configuration

Veillons à ce que notre nouvel utilisateur * sammyfiles * ne puisse transférer que des fichiers.

Se connecter au serveur en tant que * sammyfiles * à l’aide d’un accès shell normal ne devrait plus être possible. Essayons:

ssh sammyfiles@localhost

Le message suivant s’affiche avant d’être renvoyé à votre invite initiale:

Error messageThis service allows sftp connections only.
Connection to localhost closed.

Cela signifie que * sammyfiles * ne peut plus accéder au shell du serveur à l’aide de SSH.

Ensuite, vérifions si l’utilisateur peut accéder avec succès à SFTP pour le transfert de fichiers.

sftp sammyfiles@localhost

Au lieu d’un message d’erreur, cette commande affiche un message de connexion réussi avec une invite interactive.

SFTP promptConnected to localhost.
sftp>

Vous pouvez lister le contenu du répertoire en utilisant + ls + dans l’invite:

ls

Cela affichera le répertoire + uploads + créé à l’étape précédente et vous renverra à l’invite + sftp> +.

SFTP file list outputuploads

Pour vérifier que l’utilisateur est effectivement restreint à ce répertoire et ne peut accéder à aucun répertoire situé au-dessus, vous pouvez essayer de changer le répertoire.

cd ..

Cette commande ne générera pas d’erreur, mais le fait de répertorier le contenu du répertoire comme auparavant ne changera rien, ce qui prouvera que l’utilisateur n’a pas pu passer au répertoire parent.

Vous avez maintenant vérifié que la configuration restreinte fonctionne comme prévu. Le nouvel utilisateur * sammyfiles * ne peut accéder au serveur qu’en utilisant le protocole SFTP pour le transfert de fichiers et n’a pas la possibilité d’accéder au shell complet.

Conclusion

Vous avez limité un utilisateur à un accès SFTP uniquement à un seul répertoire sur un serveur sans accès shell complet. Bien que ce didacticiel utilise un seul répertoire et un seul utilisateur par souci de brièveté, vous pouvez étendre cet exemple à plusieurs utilisateurs et à plusieurs annuaires.

Le serveur SSH autorise des schémas de configuration plus complexes, notamment la limitation de l’accès à des groupes ou de plusieurs utilisateurs à la fois ou l’accès limité à certaines adresses IP. Vous trouverez des exemples d’options de configuration supplémentaires et une explication des directives possibles dans le OpenSSH Cookbook. Si vous rencontrez des problèmes avec SSH, vous pouvez les déboguer et les résoudre avec cette troubleshooting SSH.