ssh / scp da server a server - imposta permessi (senza root)

1

Ho accesso come utente normale (non come root) a due server. Il server A è accessibile tramite ssh con un nome utente e una password, Server B è accessibile solo utilizzando una chiave e un pin. Ho bisogno di impostare uno script cron su Server B in modo che i dati possano essere trasferiti da Server B a Server A a intervalli regolari per l'elaborazione ( il processamento viene eseguito su Server A e al momento eseguo il trasferimento manualmente).

La domanda è: Qual è il modo più sicuro per farlo? Se imposto un ID ssh da Server B a Server A , come posso assicurarmi che se qualcuno dovesse ottenere l'accesso a Server B non potrebbe semplicemente eseguire ssh su Server A e hackerare Server A anche? Idealmente avrei bisogno di limitare l'accesso da Server B a Server A in una singola cartella; questo sarebbe stato streoightforward se avessi i permessi di root, ma io sono solo un utente regolare.

Qualche idea? Grazie

    
posta john 16.09.2015 - 20:02
fonte

2 risposte

1

Se il tuo server B ha un fusibile e sshfs installati e entrambi i server sono permanenti (fix ip, 24/7) la scelta migliore è quella di installare l'altra directory del server e copiare i file su quel canale .

Sul serverB:

$ mkdir $HOME/serverA
$ sshfs [email protected]:restricteddirectory serverA

da ora, gli script sul server B possono copiare i file in $ HOME / serverA. Questa è una soluzione ragionevolmente sicura. Poiché il canale è impostato manualmente, nessuna password, nessun file chiave non protetto può essere rubato. Inoltre, l'eventuale attacker non sarà in grado di uscire dalla directory ristretta su ServerA. Tutti gli obiettivi sono raggiunti. Il retro è che devi rimontare la directory ogni volta che (o) il server si riavvia. In ambiente aziendale questo potrebbe essere un problema minore, e puoi impostare uno script / cron per verificare la connessione e inviarti una mail se l'altro lato non è disponibile (quindi puoi accedere e risolvere il problema).

Se il server ha IP dinamico o offline spesso questo approccio non funzionerà. L'utilizzo di script automatici per l'accesso al serverA richiede di memorizzare la password o la chiave privata non protetta sul serverA, quindi non c'è modo di impedire che l'attaccante di successo del serverB raggiunga il serverA con il proprio livello di privilegio. (Tuttavia questo assolutamente non significa che (s) egli può "hackerare il Server A" .Sei utente non privilegiato, ma il tuo account sarà sicuramente compromesso.

In effetti, potresti provare a trafficare su schermo e ssh-agent per evitare di memorizzare le credenziali, ma prima dovrai affrontare uno dei problemi, se il serverB si riavvia devi effettuare il login e sistemare le cose.

L'unica soluzione veramente sicura che mi viene in mente in questo caso per utilizzare un archivio intermedio. Imposta un account in un terzo posto (serverC), limita l'accesso al serverA e l'indirizzo IP del serverB e puoi proxy facilmente tutti i dati. Al serverA i tuoi script pull otterranno i dati. Poiché non si accede mai al server A dal serverB, il proprio account non può essere violato anche se serverB viene compromesso in modo silenzioso a livello di root.

    
risposta data 17.09.2015 - 00:07
fonte
1

What is the most secure way to do this? If I set up an ssh id from Server B to Server A, how can I make sure that if someone were to gain access to Server B could not just simply ssh into Server A and hack Server A as well? Ideally I would need to restrict access from Server B to Server A to a single folder; this would have been streoightforward if I had root

Puoi utilizzare rsync con una chiave SSH di blocco per limitare l'accesso dal Server B al Server A. Ricevo le istruzioni da si scrive .

  1. Crea una coppia di chiavi SSH sul server B
  2. Aggiungi la chiave pubblica Server B SSH a ~ / .ssh / authorised_key sul server A
  3. Esegui il comando rsync sul server B per assicurarti che copi il file sul server A (se non sai come eseguire rsync, leggi questa guida ).

Rsync di tempra su SSH

Autorizza solo il comando rsync da eseguire tramite il tasto SSH

Modifica ~/.ssh/authorized_key e aggiungi il tuo comando rsync esatto in esecuzione sul server B

command="[YOUR RSYNC COMMAND WITH ALL OPTIONS]" ssh-rsa AAAAB3NzaC1y[...]

Disabilita port forwarding, pty e agent forwarding

Modifica ~/.ssh/authorized_key con il seguente

command="[YOUR RSYNC COMMAND WITH ALL OPTIONS]",no-pty,no-agent-forwarding,no-port-forwarding ssh-rsa AAAAB3NzaC1y[...]

Ora se provi a SSH dal Server B al Server A, non autorizzerà alcun accesso.

Nota: suppongo che tu possa utilizzare SSH sul server A usando la chiave SSH. Altrimenti, puoi eseguire questo processo in un altro modo: SSH dal Server A al Server B usando una chiave SSH e tira i file usando rsync.

    
risposta data 17.09.2015 - 00:38
fonte

Leggi altre domande sui tag