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
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 deChrootDirectory
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é avecChrootDirectory
.
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éralementsh
, et des nœuds de base/dev
Tels quenull
,zero
,stdin
,stdout
,stderr
ettty
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 (voirsftp-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.
Il existe des implémentations SFTP alternatives qui peuvent être utilisées avec OpenSSH:
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.