Permettre à l'utilisateur de configurer un tunnel SSH, mais rien d'autre
J'aimerais permettre à un utilisateur de mettre en place un tunnel SSH à une machine sur un port particulier (disons, 5000), mais je veux limiter l'application de cet utilisateur autant que possible. (Authentification sera public/privé paire de clés).
Je sais que j'ai besoin de modifier pertinentes ~/.ssh/authorized_keys, mais je ne suis pas sûr exactement ce que le contenu d' (autres que la clé publique).
Vous devez vous connecter pour publier un commentaire.
Sur Ubuntu 11.10, j'ai trouvé que je pouvais le bloc de commandes ssh, envoyé avec et sans l'option-T, et de bloquer scp copie, tout en permettant la redirection de port pour aller à travers.
Plus précisément, j'ai un redis-server sur "somehost" lié à localhost:6379 que je souhaite partager en toute sécurité via les tunnels ssh à d'autres hôtes qui ont un keyfile et ssh avec:
Ce sera la cause de la redis-le serveur "localhost" port 6379 sur "somehost" apparaissent localement sur l'ordinateur hôte de l'exécution de la commande ssh, réadressé à "localhost" port 16379.
Sur la télécommande "somehost" Voici ce que j'ai utilisé pour authorized_keys:
La non-pty voyages plus ssh tentatives qui veulent ouvrir un terminal.
La permitopen explique quels sont les ports peuvent être transférées, dans ce cas, le port 6379 le redis-server port je voulais avant.
La commande="/bin/echo do-not-send-commandes de" l'écho de retour "do-not-send-commandes" si quelqu'un ou quelque chose ne réussit pas à envoyer des commandes à l'ordinateur hôte via ssh -T ou autrement.
D'un récent Ubuntu
man sshd
, authorized_keys /commande est décrite comme suit:Tentatives d'utilisation de scp sécurisé des fichiers de la copie échoue également avec un écho de "do-not-send-commandes" j'ai trouvé sftp échoue également avec cette configuration.
Je pense que le shell restreint suggestion, faite dans certaines réponses précédentes, est également une bonne idée.
Aussi, je suis d'accord que tout détaillé ici pourrait être déterminée à partir de la lecture de "l'homme sshd" et la recherche qui y est pour "authorized_keys"
no-pty
ne permettent pas d'ouvrir interactive seesion il ne fait rien pour empêcher l'exécution d'une commande, de sorte que l'utilisateur peut modifierauthorized_keys
fichier si il a accès à quelque chose commessh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.no-pty
~user/.ssh/authorized_keys
serait détenue paruser
, etuser
gérer les clés autorisées utilisé pour accéder au compte. SSH est pointilleux sur les autorisations, et peut imposer des attentes sur~/.ssh/
et de son contenu. J'ai fait unsudo chown root: .ssh/authorized_keys
et il semble avoir cessé de me connecter, mais je sais par expérience que l'utilisateur n'avez pas besoin de posséder ce fichier -root
pouvez le gérer si vous préférez./sbin/nologin
pour un utilisateur semble bien fonctionner avec-N
et la redirection de port (si tous les gens de la connexion à ce compte doivent être traités de la même manière).Vous aurez probablement souhaitez définir le shell de l'utilisateur à le shell restreint. Unset la variable de CHEMIN d'accès de l'utilisateur ~/.bashrc ou ~/.bash_profile, et ils ne seront pas en mesure d'exécuter toutes les commandes. Plus tard, si vous décidez que vous voulez pour permettre à l'utilisateur(s) à exécuter un ensemble limité de commandes, comme
less
outail
par exemple, vous pouvez copier le permis de commandes à un répertoire séparé (comme/home/restricted-commands
) et de mettre à jour le CHEMIN pour pointer vers ce répertoire.ssh use@host "/bin/bash"
, n'est ce pas?user@host
a rbash de la coquille. Voir Le Shell Restreint/bin/bash
échoue, car il contient des barres obliques.less
est probablement une mauvaise idée, car à partir de là, vous pouvez échapper à un droit illimité shell avec!/bin/bash
. Voir pen-testing.sans.org/blog/2012/06/06/... pour les autres exemples. Afin de permettre à des commandes individuelles doit être fait très, très prudemment, si, à tous.Outre authorized_keys option comme le no-X11-forwarding, en fait il y a exactement un vous demandez: permitopen="host:port". En utilisant cette option, l'utilisateur ne peut configurer un tunnel à l'hôte et le port spécifiés.
Pour les détails du fichier AUTHORIZED_KEYS format reportez-vous à l'homme sshd.
command="..."
option si vous souhaitez restreindre l'accès au shell de.ssh/authorized_keys
.Ma solution est de fournir à l'utilisateur qui ne peut être tunneling, sans un shell interactif, de jeu de shell dans /etc/passwd à /usr/bin/tunnel_shell.
Il suffit de créer le fichier exécutable /usr/bin/tunnel_shell avec un boucle infinie.
Entièrement expliquée ici: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
tunnel_shell
, vous aurezshell -> /bin/bash tunnel_shell
de sorte que vous peut bien sûr s'échapper et à revenir à la coque, mais si vous avez définitunnel_shell
que le shell de l'utilisateur, vous n'aurez qu'/bin/bash tunnel_shell
en cours d'exécution, sans coquille pour s'échapper, autant que je peux voir. Je l'ai testé et je ne pouvais pas échapper avec ctrl-z. Si vous ne de l'essayer et pourrait s'échapper, pourriez-vous poster le programme d'installation? De même, si vous avez connaissance de la documentation qui dit que ça devrait fonctionner comme ça, pourriez-vous poster ça?Vous voulez une ligne dans votre fichier authorized_keys qui ressemble à ceci.
Si vous voulez faire autoriser l'accès uniquement pour une commande spécifique-comme svn -- vous pouvez également spécifier à la commande dans les clés autorisées fichier:
De http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
Ici, vous avez un joli post que j'ai trouvé utile:
http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/
L'idée est la suivante: (le nouveau nom d'utilisateur restreint comme "sshtunnel")
Notez que nous utilisons rbash (restricted-bash) pour restreindre ce que l'utilisateur peut faire: l'utilisateur ne peut pas cd (change directory) et ne peut pas définir les variables d'environnement.
Puis nous avons modifier le CHEMIN d'accès utilisateur env variable dans
/home/sshtunnel/.profile
pour rien - un truc qui va faire bash trouve pas les commandes à exécuter:Enfin nous interdire à l'utilisateur de modifier les fichiers en définissant les autorisations suivantes:
J'ai fait un programme en C qui ressemble à ceci:
J'ai défini l'utilisateur restreint shell pour ce programme.
Je ne pense pas que l'accès restreint utilisateur peut exécuter quoi que ce soit, même si elles ne
ssh server command
, car les commandes sont exécutées à l'aide de la coque et cette coquille ne pas exécuter quoi que ce soit.Voir ce post sur l'authentification des clés publiques.
Les deux principales choses que vous devez retenir sont:
chmod 700 ~/.ssh
Vous permettra de générer une clé sur l'ordinateur de l'utilisateur via n'importe quel client ssh ils sont utilisant. pUTTY par exemple a un utilitaire pour faire cette chose exacte. Il va générer une clé privée et publique.
Le contenu du fichier de clé publique générée sera placé dans le fichier authorized_keys.
Ensuite, vous devez vous assurer que le client ssh est configuré pour utiliser la clé privée qui a généré la clé publique. C'est assez simple, mais diffère légèrement en fonction du client utilisé.