J'ai besoin d'effectuer une sauvegarde d'un serveur sur mon ordinateur en utilisant Duplicity:
duplicity /etc sftp://[email protected]//home/backup
Avant cela, je dois autoriser l'accès sans mot de passe en procédant comme suit:
$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh [email protected]
Ma question est, comment puis-je restreindre la commande à ce transfert SFTP uniquement dans la clé publique générée?
command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
Et puisque je suis sur une adresse IP dynamique, comment puis-je surmonter le problème de "l'hôte connu manquant" chaque fois que mon IP change?
ssh
sftp
key-authentication
account-restrictions
Débordement de question
la source
la source
Réponses:
Il existe 2 méthodes pour ce faire.
1. - Restriction via sshd
Cette méthode implique la mise en place de la fonction SFTP au sein de votre démon SSH,
sshd
. Ceci est contrôlé via le/etc/ssh/sshd_config
fichier de configuration. REMARQUE: cela restreindra l'utilisateur,backup
pour qu'il ne soit autorisé à SFTP que sur le serveur.2. - Restriction via les touches autorisées
Cette méthode n'implique aucune modification du
sshd_config
fichier. Vous pouvez limiter un utilisateur + une clé SSH à une seule commande via lacommand=
fonctionnalité que vous avez déjà mentionnée dans votre question. L'astuce réside dans la commande que vous incluez. Vous pouvez placer le serveur SFTP dans cettecommand=
ligne, ce qui a le même effet que la configuration du serveur SFTP dans votresshd_config
fichier.REMARQUE: si l'utilisateur dispose d'un accès en écriture à
~/.ssh/authorized_keys
, il peut le lire et / ou le modifier. Par exemple, ils pourraient le télécharger, le modifier et le re-télécharger en supprimant lecommmand=...
, lui accordant un accès sans entrave aux commandes, y compris le shell. Si l'utilisateur dispose d'un accès en écriture~/.ssh
, il peut également simplement dissocier et recréer le fichier, ou lechmod
créer pour accéder en écriture. Il existe de nombreuses solutions possibles, telles que ranger les~/.ssh/authorized_keys
fichiers dans un endroit non accessible en écriture, comme avec:C'est plus délicat mais réalisable en utilisant également la
from=
fonctionnalité dans leauthorized_keys
fichier. Ici, nous limitons l'accès à partir de l'hôte uniquementsomehost.dyndns.org
.Les paramètres supplémentaires après le
command=
sont également importants, car ils limiteront encore plus l'utilisation de la clé SSH.ventilation des fonctionnalités
from='hostname1,hostname2,''
- Restreint l'accès à partir des modèles IP ou de nom d'hôte spécifiéscommand='command'
- Exécute la commande spécifiée après l'authentificationno-pty
- N'attribue pas de pty (ne permet pas la connexion interactive)no-port-forwarding
- Ne permet pas la redirection de portno-X11-forwarding
- l'utilisateur ne pourra pas supprimer les interfaces graphiques d'affichage X11no-agent-forwarding
- l'utilisateur ne pourra pas transmettre via cet hôte à d'autres hôtes internesPour se débarrasser du message sur les "hôtes connus manquants", vous pouvez ajouter cette option SSH au client lorsqu'il se connecte comme ceci:
Consultez la page de manuel
ssh_config
pour plus de détails sur ce commutateur.Restreindre le shell de l'utilisateur
Pour les deux solutions ci-dessus, vous souhaiterez probablement verrouiller l'
backup
utilisateur en limitant également le shell de cet utilisateur dans le/etc/passwd
fichier. En règle générale, vous souhaiterez le définirscponly
, mais il existe également d'autres choix pour cela. Voir cette Q&R U&L intitulée: " Avez-vous besoin d'un shell pour SCP? " Pour savoir comment procéder.L'utilisation de
/sbin/nologin
peut également être utilisée si vous choisissez d'utiliser la fonction chrootsshd_config
comme indiqué au n ° 1 ci-dessus. Cependant, si vous choisissez d'utiliser la méthode décrite au # 2 , vous devrez probablement utiliserscponly
ou autre chose pour le shell de l'utilisateur/etc/passwd
.BONUS - Prolonger # 2 ci-dessus
Si vous devez exposer un ensemble de commandes pour cet utilisateur, vous pouvez également le faire. Créez un script comme celui-ci
/home/backup/commands.sh
:Vous configurez ensuite le
authorized_keys
fichier comme suit:L'
backup
utilisateur peut ensuite exécuter ces commandes comme suit:Les références
la source
/sbin/nologin
empêchera le serveur d'accéder à mon ordinateur avec SFTP. J'ai essayé ça.known_hosts
fichier ssh . Marki a fourni la bonne solution dans son commentaire. Lefrom
paramètre dans leauthorized_keys
fichier sur mon ordinateur C restreint uniquement l'emplacement à partir duquel S peut se connecter à C./sbin/nologin
fonctionne si j'utilise la commande forceinternal-sftp
au lieu de celle/usr/libexec/openssh/sftp-server
que vous avez spécifiée sur le certificat. Je suppose que ce sont deux sous-systèmes différents. Et créer un répertoire chroot pour le premier est beaucoup plus simple.Shell restreint
Vous devez affecter un shell restreint tel scponly ou rssh.
Lorsque vous utilisez scp ou sftp, vous vous connectez au site distant via ssh, puis le shell distant exécute un processus scp ou sftp. Ce dont vous avez besoin est un shell restreint qui ne permet qu'à scp ou sftp de verrouiller la connexion.
la source