Comment installer un serveur SFTP restreint sur Ubuntu?

81

J'aimerais savoir comment configurer des comptes d'utilisateurs root, sudo, sftp-only qui ne seront pas tenus de s'authentifier par clé publique lors de la connexion. J'aimerais également savoir comment configurer les répertoires de départ des utilisateurs sftp-only où ils ne peut pas accéder aux autres répertoires du niveau supérieur.

Yuya Kobayashi
la source

Réponses:

91

OpenSSH est la meilleure ressource pour vous aider à commencer à configurer un service ssh sur une machine hôte utilisant Ubuntu . Cela vous permettra d'utiliser le protocole de transfert de fichiers SSH (également le protocole de transfert de fichiers sécurisé ou SFTP) pour accéder à, transférer et gérer des fichiers sur SSH à partir d'un ordinateur client.

Vue d'ensemble de la solution

  • Sur Ubuntu, vous pouvez configurer OpenSSH serverun ordinateur hôte et un utilisateur peut ensuite utiliser sshpour se connecter du client au serveur hôte en utilisant uniquement un nom d'utilisateur et un mot de passe. Notez cependant que l’authentification par clé publique est recommandée.

"Assurez-vous d'avoir un mot de passe fort avant d'installer un serveur SSH (vous souhaiterez peut-être désactiver complètement les mots de passe )"

  • Les comptes d'utilisateurs administratifs créés sur l'hôte disposeront de privilèges sudo, contrairement aux comptes d'utilisateur standard créés sur l'hôte.

Installez et configurez votre serveur OpenSSH sur l'hôte

Pour installer un serveur OpenSSH sur l'hôte:

sudo apt-get install openssh-server

Donnez à votre hôte une adresse IP statique pour pouvoir vous y connecter de manière fiable:

nm-connection-editor

Pour configurer votre serveur OpenSSH , "commencez par faire une sauvegarde de votre fichier sshd_config en le copiant dans votre répertoire personnel ou en effectuant une copie en lecture seule dans / etc / ssh en effectuant:"

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

"Une fois que vous avez sauvegardé votre sshd_configfichier, vous pouvez modifier n'importe quel éditeur de texte, par exemple:"

sudo -H gedit /etc/ssh/sshd_config

Vous devez redémarrer votre service ssh sur l'hôte pour que ces modifications prennent effet

sudo service ssh restart

Considérez les mesures de sécurité suivantes

  • N'activez pas le transfert de port sur votre routeur: lorsqu'un tiers demande à votre routeur de se connecter au port 22, etc., votre routeur ne se conforme pas à moins que vous ayez activé le transfert de port.
  • Désactiver la connexion root: commentez PermitRootLogin without-password; ajouter PermitRootLogin noà l'hôte/etc/ssh/sshd_config
  • Choisissez un port SSH non standard: commentez Port 22; ajouter Port <new-port-number>à l'hôte/etc/ssh/sshd_config
  • Autoriser uniquement les connexions locales: Ajouter ListenAddress 192.168.0.10
  • Autoriser certains utilisateurs sur certains ports: Ajouter AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>ou AllowUsers <username>@111.222.333.*à l'hôte/etc/ssh/sshd_config
  • Autoriser uniquement les connexions par clé RSA (sans mot de passe): ajoutez le contenu de ~/.ssh/id_rsa.pubchaque client en tant que nouvelle ligne d'hôte ~/.ssh/authorized_keys. Puis ajoutez PasswordAuthentication noà à l'hôte/etc/ssh/sshd_config
  • Tentatives de piratage des attaquants lents: utilisez ufw (pare-feu simple) sur l'hôte pour classer la limite des connexions entrantes à 10 / minute: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Pour plus d'idées, voir Garder l'accès SSH sécurisé

Si vous estimez que vous devez le faire, activez-le PasswordAuthenticationdans votre sshd_configfichier

Trouvez la ligne avec la phrase PasswordAuthenticationet faites-la lire:

PasswordAuthentication yes

Enregistrez votre nouveau sshd_configfichier, puis redémarrez le sshservice de l'hôte :

sudo service ssh restart

Si vous avez besoin d'un accès Internet, configurez la redirection de port sur votre routeur local pour diriger le trafic sur votre serveur OpenSSH.

Notez que le sshservice du port de l'hôte écoute dans le sshd_configfichier et configure votre routeur pour qu'il transfère le trafic TCP / UDP destiné à ce port à l'adresse IP de votre serveur OpenSSH.

Se connecter à l'hôte et se connecter via une ligne de commande ou un terminal

  • Pour ouvrir un terminal shell SFTP en tant <username>qu'hôte, ouvrez un terminal sur le client et entrez la commande suivante, en remplaçant 123.123.1.23par l'adresse IP de l'hôte:

    sftp <username>@123.123.1.23
    
    • Si vous avez modifié le numéro de port que le serveur OpenSSH de l'hôte écoute, procédez comme suit:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Pour ouvrir un terminal shell SSH en tant <username>qu'hôte, ouvrez un terminal sur le client et entrez la commande suivante, en remplaçant 123.123.1.23par l'adresse IP de l'hôte:

    ssh <username>@123.123.1.23
    
    • Si vous avez modifié le numéro de port que le serveur OpenSSH de l'hôte écoute, procédez comme suit:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Connectez-vous à l'hôte et connectez-vous via le gestionnaire de fichiers GUI (par exemple, Nautilus) pour obtenir un accès SFTP plus visuel et permettre les transferts de fichiers

  1. Ouvrez Nautilus sur le client
  2. Sélectionnez Fichier> Se connecter au serveur.
  3. Type: SSH
  4. Serveur: entrez l'adresse IP de l'hôte
  5. Port: numéro de port spécifié dans le sshd_configfichier de l'hôte
  6. Nom d'utilisateur: nom d'utilisateur
  7. Mot de passe: mot de passe

entrez la description de l'image ici

En 14.04:

  1. Ouvrez Nautilus sur le client
  2. Connecter au serveur
  3. Tapez: `ssh @ 123.123.1.23:

Créer des comptes d'utilisateur standard sur l'hôte avec des autorisations de fichier limitées en dehors de leur dossier de base

Les autorisations de fichier appropriées en place sur l'hôte garantissent que chaque utilisateur standard (sans privilèges sudo) que vous créez sur l'hôte sera propriétaire de son /home/new_userrépertoire, mais dispose d'autorisations limitées avec le reste de la structure de répertoires.

  • Des autorisations limitées ne signifient pas nécessairement qu'ils ne peuvent pas afficher les noms de fichiers et la structure des répertoires.

J'espère que c'est utile!

jtd
la source
9
Il me semble que cette réponse, tout en étant très complète, ne répond pas à la partie la plus difficile de la question des PO: "où ils ne peuvent pas accéder aux autres répertoires de niveau supérieur". Si implémenté comme ci-dessus, l'utilisateur serait capable de lire la grande majorité de la structure de répertoires.
ostergaard
2
Pour développer le commentaire de @ ajostergaard, cela crée un utilisateur Unix normal et lui permet un accès SSH et SFTP. Un utilisateur Unix normal (non root) peut toujours accéder à un très grand nombre de fichiers sensibles, tels que la configuration du serveur Web, et les visualiser. Ceci n’est certainement pas sécurisé et ne satisfait certainement pas à la limitation demandée par le PO.
Simon Woodside
50

Étape 1: Installez le paquet OpenSSH s'il n'est pas installé.

sudo apt-get install openssh-server

Étape 2: Créez un groupe distinct pour les utilisateurs SFTP.

sudo addgroup ftpaccess

Étape 3: Éditez le /etc/ssh/sshd_configfichier et apportez les modifications ci-dessous. Trouvez et commentez sous la ligne.

#Subsystem sftp /usr/lib/openssh/sftp-server

et ajoutez ces lignes à la fin du fichier.

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Étape 4: redémarrez le service sshd.

sudo service ssh restart

Étape 5: Ajoutez un utilisateur avec le groupe ftpaccess et créez un mot de passe.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Étape 6: Modifiez l'autorisation du répertoire de base.

sudo chown root:root /home/paul

Étape 7: Créez un répertoire dans home pour le téléchargement et modifiez l'autorisation avec le groupe.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

C'est ça .

Référez-vous: Configurer SFTP sur Ubuntu

ytgmuabm
la source
Cela semble être la bonne réponse. Je ne l'ai pas testé, mais au moins, il mentionnait la principale difficulté, à savoir limiter le chemin de navigation.
Mohammed Noureldin
Je l’ai testé et c’était beaucoup trop permissif, en raison des autorisations par défaut définies sur le dossier de départ (755). Je l’ai fait sudo chmod 711sur le dossier de départ et cela m’a permis de me connecter au dossier www uniquement. Cela semble bien jusqu'à présent, mais peut-être que d'autres peuvent ...
moodboom
0

Denyhosts est un autre outil que ceux mentionnés par "jtd" que vous voudrez peut-être regarder. Il peut bloquer automatiquement les tentatives de connexion répétées sur votre serveur SSH. Il est disponible pour être installé dans les dépôts Ubuntu.

firefly2442
la source
Paket denyhosts est uniquement disponible pour lucid (10.04LTS) et précis (12.04LTS). packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
Denyhosts n'est plus disponible dans les référentiels Ubuntu, bien qu'il puisse toujours être installé par une méthode différente, mais il n'a pas été mis à jour depuis longtemps. Ainsi, il n'est pas sage d'utiliser Denyhosts.
Faizan Akram Dar
0

Limiter l'accès à l'utilisateur

Ici, nous n'autoriserons que l'utilisateur à effectuer un transfert de fichier et nous désactiverons l'accès au terminal.

Pour cela, ajoutez les codes suivants au bas du fichier de configuration.

$ sudo nano /etc/ssh/sshd_config

Maintenant, le fichier va s'ouvrir et coller le code.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Remplacez-le filemgpar votre nom d'utilisateur. Puis enregistrez et fermez le fichier.

C'est ça.

Référence: Comment utiliser SFTP dans Ubuntu 16.04

Aimal
la source