web-dev-qa-db-fra.com

OpenSSH: différence entre sftp interne et serveur sftp

Pourquoi y a-t-il deux façons de configurer SFTP avec OpenSSH et quand l'utiliser? Y a-t-il une différence entre eux?

Je veux dire que le premier utilise une bibliothèque d'OpenSSH et le second dit "utiliser l'interne", donc c'est aussi OpenSSH?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
89
Denny Crane

sftp-server Et internal-sftp Font tous deux partie d'OpenSSH. sftp-server Est un binaire autonome. internal-sftp Est juste un mot-clé de configuration qui indique à sshd d'utiliser le code de serveur SFTP intégré à sshd, au lieu d'exécuter un autre processus (généralement le sftp-server).

Le internal-sftp A été ajouté beaucoup plus tard (OpenSSH 4.9p1 en 2008?) Que le binaire autonome sftp-server, Mais c'est la valeur par défaut maintenant. sftp-server Est maintenant redondant et est conservé pour une compatibilité ascendante.

Je pense qu'il n'y a aucune raison d'utiliser le sftp-server Pour de nouvelles installations.


Du point de vue fonctionnel, sftp-server Et internal-sftp Sont presque identiques. Ils sont construits à partir du même code source.

Le principal avantage de internal-sftp Est qu'il ne nécessite aucun fichier de support lorsqu'il est utilisé avec la directive ChrootDirectory .

Citations de la page man sshd_config(5) :

  • Pour directive Subsystem :

    La commande sftp-server Implémente le sous-système de transfert de fichiers SFTP.

    Alternativement, le nom internal-sftp Implémente un serveur SFTP en cours. Cela peut simplifier les configurations à l'aide de ChrootDirectory pour forcer une racine de système de fichiers différente sur les clients.

  • Pour directive ForceCommand :

    La spécification d'une commande de internal-sftp Forcera l'utilisation d'un serveur SFTP en cours de traitement qui ne nécessite aucun fichier de prise en charge lorsqu'il est utilisé avec ChrootDirectory.

  • Pour directive ChrootDirectory :

    ChrootDirectory doit contenir les fichiers et répertoires nécessaires pour prendre en charge la session de l'utilisateur. Pour une session interactive, cela nécessite au moins un shell, généralement sh, et des nœuds de base /dev Tels que null, zero, stdin , stdout, stderr et tty périphériques. Pour les sessions de transfert de fichiers utilisant SFTP, aucune configuration supplémentaire de l'environnement n'est nécessaire si le serveur sftp en cours est utilisé, bien que les sessions qui utilisent la journalisation puissent nécessiter /dev/log À l'intérieur du répertoire chroot sur certains systèmes d'exploitation (voir sftp-server Pour plus de détails).

Un autre avantage de internal-sftp Est une performance, car il n'est pas nécessaire d'exécuter un nouveau sous-processus pour cela.


Il peut sembler que sshd pourrait utiliser automatiquement internal-sftp, Lorsqu'il rencontre sftp-server, Car la fonctionnalité est identique et internal-sftp Présente même les avantages ci-dessus. Mais il y a des cas Edge, où il y a des différences.

Quelques exemples:

  • L'administrateur peut s'appuyer sur une configuration de shell de connexion pour empêcher certains utilisateurs de se connecter. Le passage à internal-sftp Contournerait la restriction, car le shell de connexion n'est plus impliqué.

  • En utilisant sftp-server Binaire (étant un processus autonome), vous pouvez utiliser certains hacks, comme exécuter le SFTP sous Sudo .

  • Pour SSH-1 (si quelqu'un l'utilise encore), la directive Subsystem n'est pas du tout impliquée. Un client SFTP utilisant SSH-1 indique explicitement au serveur quel fichier binaire le serveur doit exécuter. Les anciens clients SFH SSH-1 portent donc le nom sftp-server Codé en dur.

104
Martin Prikryl

Il existe des implémentations SFTP alternatives qui peuvent être utilisées avec OpenSSH:

8
ptman

Vous pouvez verrouiller une clé autorisée sur le serveur sftp externe.

command = "/ usr/libexec/openssh/sftp-server" ssh-rsa AAAA… == [email protected]

Lorsque vous le faites, votre utilisateur peut sftp, mais ne peut pas scp ou ssh:

$ sftp Host:/etc/group /tmp[.____.[Connexion à l'hôte ... 
 Récupération de/etc/group vers /tmp/group[.____. diplomatique/etc/group 100% 870 0,9 Ko/s 00:00

Tenter de faire autre chose se bloquera simplement:

$ scp Host:/etc/group /tmp[.____.[Tuer par le signal 2..

Hélas, il n'est pas facile de verrouiller une clé sur un chroot à moins que sshd_config ne soit modifié. Ce serait vraiment cool pour un utilisateur de pouvoir se passer de l'intervention du gestionnaire de système.

6
Charles Fisher