Autoriser SFTP mais interdire SSH?

94

Je commence une très 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 ce n'est pas sécurisé et c'est à mon avis obsolète.

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

Donc, je n'aurais pas besoin d'installer un service FTP sur le serveur et tout serait génial!

Tommy B.
la source

Réponses:

121

À partir de la version 4.9, OpenSSH (non disponible dans centos 5.x mais la fonctionnalité ChrootDirectory était rétroportée) comporte un internal-sftpsous-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 sftponlygroupe. Vous devez modifier le répertoire utilisateur de l'utilisateur en /raison du chroot et il /home/userdevrait appartenir à root. Je définirais également /bin/falsecomme shell de l'utilisateur.

Rob Wouters
la source
Hou la la! Super génial! Je vais tester cela et revenir ici pour valider. Merci beaucoup!
Tommy B.
+1 pour la chose ChrootDirectory!
Kyle Hodgson le
1
Après cela, mon utilisateur sftponly ne peut pas accéder par ssh et peut se connecter par sftp. Cependant, il ne peut voir aucun fichier du tout! Malgré ces fichiers ont la permission pour cet utilisateur. :-(
Emilio Nicolás
3
Si vous voulez faire cela et trouver une entrée existante dans votre sshd_config avec "/ usr / lib / openssh / sftp-server", vérifiez ici: serverfault.com/questions/660160/… - internal-sftp est "plus récent , mieux et plus facilement "
Xosofox
19

Il y a une coquille qui explique cela. Il peut chroot aussi.

Pierre
la source
Cela serait très utile si vous avez besoin à la fois d'utilisateurs SFTP et d'utilisateurs SSH. Vous venez de remplacer le shell dans / etc / passwd pour ceux restreints uniquement à SFTP.
Dragos
4

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

En savoir plus sur RSSH

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

RPMs

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

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

Chris
la source
Agréable. C'est le moyen le plus simple de configurer sans toucher à sshd_config. Il suffit de changer le shell dans le fichier passwd et c'est fait.
Tomofumi
2

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

jcisio
la source
11
Avez-vous testé cela?
Splattne
8
Lorsque j'essaie de définir le shell sur /bin/falsessh ou sftp, cela ne fonctionne pas
Brad Mace
2
/ bin / false consiste à interdire toute connexion, ce n'est pas la bonne approche ici. La réponse acceptée par Rob Wouters est la suivante: vous devriez limiter les utilisateurs à SFTP uniquement, pas en changeant le shell. Si vous voulez changer la coquille, la réponse de Stone devrait être une bonne idée.
Jwbensley
1
alors QUEL shell devrait être utilisé en supposant que / bin / bash n’est pas acceptable et / bin / false ou / sbin / nologin refuser l’accès?
Putnik
1

J'utilise la méthode de spécification du shell utilisateur comme / bin / false comme mentionné. Cependant, vous devez vous assurer que / bin / shell est dans / etc / shells. Ensuite, ça marche ssh = pas de ftp = ok.

J'utilise également vsftpd et ajoute ce
chroot_local_user = YES à /etc/vsftpd/vsftpd.conf afin que les ftp-ers ne puissent pas voir la date autrement que la leur.

L'avantage de ces modifications simples est qu'il n'y a pas de configuration gênante en configuration ssh pour chaque utilisateur.

Denpick
la source
1

N'oubliez pas de trouver la ligne UsePAM yeset de la commenter:

#UsePAM yes

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

Hudson Santos
la source
0

Configurer ssh pour n’activer que sftp pour certains utilisateurs sélectionnés est une bonne idée et cela fonctionne correctement, à condition d’installer scponlyou rssh.

rsshfonctionne correctement, sauf si vous devez configurer la prison, dans ce cas, essayez de suivre les instructions fournies dans les manuels de CHROOT, ce qui est fou, conduisant à la "copie" de grandes parties des exécutables système et de la bibliothèque juste en dessous de "chaque utilisateur jail", y compris le rsshshell lui-même. C'est une méthode qui gaspille de l'espace.

scponly nécessite une compréhension approfondie de la configuration, ce qui entraîne un problème permanent de rejet de connexion en cas de configuration de la prison.

Le moyen le plus simple d’autoriser les fonctionnalités "ftp" avec le jail fonctionnant correctement, la prise en charge de SSL / TLS pour des transactions et des connexions sécurisées consiste à utiliser un VSFTPD "ancien mais fonctionnel", qui s’installe rapidement et proprement et offre toutes les possibilités de configuration selon vos besoins. mais pas des moindres: ça marche!

Maurizio.

Maurizio
la source
0

Malheureusement, toutes les réponses sont 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 le statut du service sshd

    sudo service sshd redémarrer

    statut sshd de 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."' | sudo tee -a / bin / sftponly

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

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -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

Andres Leon Rangel
la source