Question 1
Ma question est, comment puis-je restreindre la commande à ce transfert SFTP uniquement dans la clé publique générée?
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.
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
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 la command=
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 cette command=
ligne, ce qui a le même effet que la configuration du serveur SFTP dans votre sshd_config
fichier.
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
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 le commmand=...
, 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 le chmod
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:
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Question 2
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?
C'est plus délicat mais réalisable en utilisant également la from=
fonctionnalité dans le authorized_keys
fichier. Ici, nous limitons l'accès à partir de l'hôte uniquement somehost.dyndns.org
.
from = "somehost.dyndns.org", command = "/ usr / libexec / openssh / sftp-server", no-port-forwarding, no-X11-forwarding, no-agent-forwarding, no-pty ssh-dss AAAAC8ghi9ldw == sauvegarde @ hôte
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és
command='command'
- Exécute la commande spécifiée après l'authentification
no-pty
- N'attribue pas de pty (ne permet pas la connexion interactive)
no-port-forwarding
- Ne permet pas la redirection de port
no-X11-forwarding
- l'utilisateur ne pourra pas supprimer les interfaces graphiques d'affichage X11
no-agent-forwarding
- l'utilisateur ne pourra pas transmettre via cet hôte à d'autres hôtes internes
Pour 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:
$ ssh -o StrictHostKeyChecking=no ....
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éfinir scponly
, 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 chroot sshd_config
comme indiqué au n ° 1 ci-dessus. Cependant, si vous choisissez d'utiliser la méthode décrite au # 2 , vous devrez probablement utiliser scponly
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
:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
Vous configurez ensuite le authorized_keys
fichier comme suit:
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
L' backup
utilisateur peut ensuite exécuter ces commandes comme suit:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
Les références