web-dev-qa-db-fra.com

Autoriser SFTP mais interdire SSH?

Je démarre une toute petite société d'hébergement pour quelques amis et petits clients, rien de grand.

Je veux donner à mes "clients" le droit de gérer leurs fichiers sur le serveur. Je déteste le FTP car il n'est pas sécurisé et c'est à mon avis obsolète.

Je voudrais donc autoriser mes utilisateurs à se connecter via SFTP mais pas leur permettre de se connecter via SSH. (Je sais, je sais, SFTP utilise SSH). Mais je me demandais simplement, est-ce possible?

Je n'aurais donc pas à installer de service FTP sur le serveur et tout serait génial!

96
Tommy B.

À partir de la version 4.9 OpenSSH (non disponible dans centos 5.x mais la fonctionnalité ChrootDirectory a été rétroportée) a un internal-sftp sous-système:

Subsystem sftp internal-sftp

Et puis bloquer d'autres utilisations:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Ajoutez vos utilisateurs au groupe sftponly. Vous devez remplacer le répertoire principal de l'utilisateur par / à cause du chroot et /home/user devrait appartenir à root. Je définirais également /bin/false comme Shell de l'utilisateur.

126
Rob Wouters

Il y a un Shell scponly qu'est-ce que cela fait. Il peut aussi chroot.

19
Stone

Checkout rssh qui est un faux shell qui autorise sftp mais refuse ssh

En savoir plus sur RSSH

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Vous pouvez configurer rssh pour autoriser/refuser différents comportements comme sft, scp, etc.

4
Chris

Vous pouvez modifier/etc/passwd et donner à cet utilisateur un faux Shell afin qu'il ne puisse pas utiliser ssh.

2
jcisio

N'oubliez pas de trouver la ligne UsePAM yes et commentez-le:

#UsePAM yes

Sans désactiver cela, votre serveur SSH se bloquerait lors du rechargement/redémarrage. Comme vous n'avez pas besoin de fonctions sophistiquées de PAM, c'est très bien.

1
Hudson Santos

J'utilise la méthode de spécification de l'utilisateur Shell comme/bin/false comme mentionné. Cependant, vous devez vous assurer que/bin/Shell se trouve dans/etc/shells. Ensuite, cela fonctionne ssh = no ftp = ok.

J'utilise également vsftpd et j'ajoute ceci
chroot_local_user = YES vers /etc/vsftpd/vsftpd.conf afin que les ftp-ers ne puissent pas voir de date autre que la leur.

L'avantage de ces modifications simples n'est pas une configuration ennuyeuse pour la configuration ssh pour chaque utilisateur.

1
denpick

Configurer ssh pour activer uniquement sftp pour certains utilisateurs sélectionnés est une bonne idée et cela fonctionne correctement, à condition que vous installiez scponly ou rssh.

rssh fonctionne très bien, sauf si vous avez besoin de configurer la prison, dans ce cas, essayez de suivre les instructions fournies par les manuels CHROOT est fou, conduisant à "copier" de grandes parties des exécutables du système et de la bibliothèque juste en dessous de "chaque prison utilisateur", y compris rssh Shell lui-même. C'est une méthode qui fait perdre de l'espace.

scponly a besoin d'une compréhension approfondie de la configuration conduisant à un problème omniprésent de refus de connexion en cas de configuration de prison.

La manière simple d'autoriser les fonctionnalités "ftp" avec le bon fonctionnement de la prison, la prise en charge SSL/TLS pour les transactions et la connexion sécurisées consiste à utiliser un VSFTPD "ancien mais fonctionnel", qui s'installe rapidement et proprement et offre toute la configurabilité selon les besoins et, enfin mais pas des moindres: ça marche!

Maurizio.

0
Maurizio

Toutes les réponses sont malheureusement extrêmement trompeuses: veuillez procéder comme suit:

  1. Créez d'abord un utilisateur sftp et un groupe sftp

  2. Créez un répertoire séparé en tant que racine pour les fichiers SFTP: Sudo mkdir -p /home/sftpdir

  3. Avoir un fichier sshd_config testé qui autorise SSH sur le port 22 mais aussi SFTP sur un port aléatoire pour des raisons de sécurité
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Redémarrez et vérifiez l'état du service sshd

    Sudo service sshd restart

    état sshd du service

  2. Créez un fichier Shell. Ajouter une exécution pour faire écho à un message de notification

    Sudo touch/bin/sftponly echo -e '#!/Bin/sh\necho "Ce compte est limité à l'accès SFTP uniquement."' | T-shirt Sudo -a/bin/sftponly

  3. Donner des autorisations d'exécution et ajouter au fichier shells

    Sudo chmod a + x/bin/sftponly echo "/ bin/sftponly" | T-shirt Sudo -a/etc/shells

  4. enfin testez et vous ne devriez pas pouvoir vous connecter.

  5. Un modèle pour utiliser le client SFTP avec une clé SSH et une verbosité de base:

    sftp -v -oPort = $ RANDOM_PORT -i ~/.ssh/$ SSH_KEY.pem sftpuser @ $ Host

0
Andres Leon Rangel