Domanda

Vorrei permettere all'utente di impostare un tunnel SSH ad una macchina in particolare su una determinata porta (diciamo 5000), ma voglio limitare l'accesso dell'utente, per quanto possibile.(Autenticazione con pubblico/privato coppia di chiavi).

So che ho bisogno di modificare le pertinenti ~/.ssh/authorized_keys, ma non so esattamente cosa metterci (altro che la chiave pubblica).

È stato utile?

Soluzione

Su Ubuntu 11.10, ho scoperto di poter blocco comandi ssh, inviata con e senza l'opzione-T, e il blocco di scp copia, consentendo l'inoltro della porta per passare attraverso.

In particolare ho un redis-server su "host", legato a localhost:6379 che vorrei condividere in modo sicuro tramite tunnel ssh per altri host che hanno un file di chiavi e ssh con:

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

Questo farà sì che il redis-server "localhost" porta 6379 su "host" per apparire in locale sul host in esecuzione il comando ssh, rimappata a "localhost" porta 16379.

Sul telecomando "host" Qui è quello che ho usato per authorized_keys:

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost

No pty viaggi più tentativi ssh che desidera aprire un terminale.

Il permitopen spiega che cosa sono le porte possono essere inoltrati, in questo caso la porta 6379 il redis-porta del server volevo avanti.

Il comando="/bin/echo do-not-send-comandi" riecheggia "do-not-send-comandi" se qualcuno o qualcosa riesce a inviare comandi all'host tramite ssh-T o altrimenti.

Da un recente Ubuntu man sshd, authorized_keys / comando viene descritto come segue:

comando="command" Specifica che il comando viene eseguito ogni volta che questo tasto è utilizzato per l'autenticazione.Il comando fornito dall'utente (se del caso) è ignorati.

I tentativi di usare scp sicuro la copia dei file potrebbe fallire anche con un'eco di "do-not-send-comandi" ho trovato sftp non funziona anche con questa configurazione.

Penso che la shell ristretta suggerimento in alcune risposte precedenti, è anche una buona idea.Inoltre, direi che sono d'accordo che tutto dettagliate qui potrebbe essere determinato dalla lettura di "l'uomo sshd" e la ricerca di esso per "authorized_keys"

Altri suggerimenti

Probabilmente si vorrà impostare la shell dell'utente per la shell ristretta.Annullata la variabile PATH dell'utente ~/.bashrc o ~/.bash_profile, e non sarà in grado di eseguire qualsiasi comando.In seguito, se si decide che si desidera consentire all'utente(s) per eseguire un set limitato di comandi, come less o tail per esempio, allora si può copiare il permesso comandi di una directory separata (come /home/restricted-commands) e aggiornare il PERCORSO alla directory.

Oltre authorized_keys opzione come no-X11 forwarding, vi è in realtà esattamente quello che si sta chiedendo:permitopen="host:port".Utilizzando questa opzione, l'utente può impostare un tunnel per l'host specificato, la porta.

Per i dettagli del file AUTHORIZED_KEYS formato di fare riferimento al uomo sshd.

La mia soluzione è quello di fornire all'utente che possono essere di tunneling, senza una shell interattiva, settare il guscio in /etc/passwd per /usr/bin/tunnel_shell.

Basta creare il file eseguibile /usr/bin/tunnel_shell con un loop infinito.

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

Completamente spiegato qui: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/

Io sono in grado di impostare il file authorized_keys con la chiave pubblica del registro in.Quello che io non sono sicuro circa le ulteriori informazioni di cui ho bisogno per limitare ciò che conto è consentito fare.Per esempio, so che posso mettere i comandi come:

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

Si vorrebbe una riga nel file authorized_keys che assomiglia a questo.

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 

Se si desidera consentire l'accesso solo per un comando specifico, come svn-si può anche specificare il comando autorizzato file di tasti:

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

Da http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks

Ecco un bel post che ho trovato utile:http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

L'idea è:(con il nuovo nome utente limitato come "sshtunnel")

useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

Da notare l'uso di rbash (limitato bash) per limitare ciò che l'utente può fare:l'utente non è in grado di cd (change directory) e non è possibile impostare le variabili di ambiente.

Quindi si modifica il PERCORSO dell'utente di env variabile in /home/sshtunnel/.profile per niente - un trucco che renderà la bash non trovare eventuali comandi da eseguire:

PATH=""

Infine abbiamo impedire all'utente di modificare qualsiasi file impostando le autorizzazioni seguenti:

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile

Ho fatto un programma in C che assomiglia a questo:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

Ho impostato il restricted shell utente di questo programma.

Non credo che l'utente limitato può eseguire qualsiasi cosa, anche se non l' ssh server command, perché i comandi sono eseguiti utilizzando la shell, e questo guscio non eseguire nulla.

Vedere questo post sull'autenticazione delle chiavi pubbliche.

Le due cose principali che dovete ricordare sono:

  1. Assicurarsi che si chmod 700 ~/.ssh
  2. Aggiungere la chiave pubblica del blocco autorizzato-chiavi

Si genererà un tasto sul computer degli utenti tramite qualsiasi client ssh che stanno utilizzando.stucco per esempio, ha un programma di utilità per fare questa cosa esatta.Sarà generare una chiave privata e pubblica.

Il contenuto del file con la chiave pubblica generata sarà inserito nel file authorized_keys.

Successivo è necessario assicurarsi che il client ssh è configurato per utilizzare la chiave privata che ha generato la chiave pubblica.È abbastanza dritto in avanti, ma leggermente differente a seconda del client utilizzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top