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!
À 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.
Il y a un Shell scponly qu'est-ce que cela fait. Il peut aussi chroot.
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.
Vous pouvez modifier/etc/passwd et donner à cet utilisateur un faux Shell afin qu'il ne puisse pas utiliser ssh.
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.
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.
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.
Toutes les réponses sont malheureusement extrêmement trompeuses: veuillez procéder comme suit:
Créez d'abord un utilisateur sftp et un groupe sftp
Créez un répertoire séparé en tant que racine pour les fichiers SFTP: Sudo mkdir -p /home/sftpdir
#$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
Redémarrez et vérifiez l'état du service sshd
Sudo service sshd restart
état sshd du service
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
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
enfin testez et vous ne devriez pas pouvoir vous connecter.
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