Autenticazione facile multi-livello per sudo

Ho un server FreeBSD con password SSH abilitato. Vorrei abilitare la sudo , ma non voglio che un potenziale attaccante sia una password lontana dall'accesso alla radice. La mia soluzione attuale sta accedendo come root usando una chiave pubblica (l'authentication di password remota è distriggersta per la root) e il mio utente normale non è in ruota e il sudo non è installato.

In passato ho usato password uniche per l'accesso a sudo (potrei pubblicare il sistema per accedere al sistema, ma sudo richiedeva un OTP e avevo un timeout di 30 minuti per permettermi di realizzare il lavoro senza riesaminare tutti i file tempo). Ciò è una gran quantità di problemi, tuttavia, alless con OPIE / S / Key. Con un token hardware potrebbe essere OK, ma non ne ho uno a questo punto.

Ho cercato qualcosa che mi permettesse di autenticare sudo con una chiave pubblica SSH tramite l'inoltro degli agenti. pam_ssh incluso con FreeBSD non sembra farlo – autentica solo verificando se l'utente può decrittografare una chiave privata sul server. Ho trovato pam_ssh_agent_auth , ma ho pochi riferimenti ad altri. Ora è a 0,9, ma sono un po 'esitante a fidarmi del gateway per radicare in un programma che non riesco a trovare molte prove di persone in uso.

Così, le mie domande sono fondamentalmente 2:

  1. pam_ssh_agent_auth è usato in natura e affidabile?
  2. C'è un'altra buona soluzione per consentire a sudo di continuare ad avere una barriera oltre la password di accesso? Ho pensato di avere un secondo account con accesso sudo e nessuna authentication di password, ma questo sembra anche un po 'ingombrante.

2 Solutions collect form web for “Autenticazione facile multi-livello per sudo”

Hai già risolto questo problema tramite OTP (più sicurezza = più cerchi) e non posso commentare pam_ssh_agent_auth. Ma sembra che la tua vera preoccupazione non sia con il sudo ma con l'accesso a livello di networking. In altre parole, sembri interessato ai privilegi concessi agli utenti di un particolare host o host, anziché un account di sistema particolare. Se è così, prendere in considerazione l'implementazione di uno schema di port-bussare di fronte al demone SSH, in modo tale che SSH sia accessibile solo da specifici IP e da qualcuno che conosca il colpo segreto. Dopo di che, l'authentication di vecchia chiave pubblica a chiave pubblica da host noti dovrebbe essere sufficiente. Se un attaccante può ancora guadagnare l'accesso alla shell a quel punto, probabilmente l'outmatched comunque.

L'unico altro scenario che posso pensare è quello di utilizzare un proxy ssh in un host attendibile che puoi rimbalzare le connessioni da quando sei in una networking non attendibile (e dal momento che sei in bsdworld, puoi anche utilizzare una prigione il tuo host che fa esattamente quello). Per quanto mi riguarda, each casella che un attaccante ha accesso alla shell è completamente compromesso, periodo. Sia che hanno ottenuto crediti di radice o less, è completamente sospetto. Il tuo sforzo può essere meglio speso per impedire che questa prima incursione di successo.

Cheers, -G

Michael,

Quello che vuoi get può essere eseguito in due modi:

Uno come hai scoperto è quello di utilizzare pam_ssh_agent_auth o si potrebbe desiderare di utilizzare il suo "povero cugino" :

ssh a localhost alleati con l'inoltro di chiave SSH. Le istruzioni passo per passo in questo punto fanno riferimento a un server Ubuntu, ma tutti i comandi dovrebbero essere ok con il tuo FreeBSD in quanto sono caratteristiche di OpenSSH.

1. aggiungere la chiave a ssh-agent:

 user@workstation:~$ ssh-add Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa) 

2. Copiare la chiave nell'account utente nel server di destinazione

 user@workstation:~$ ssh-copy-id destination-server user@destination-server's password: Now try logging into the machine, with "ssh 'destination-server'", and check in: ~/.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. 

3. Prova il login chiave basato:

 user@workstation:~$ ssh -A destination-server Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64) * Documentation: http://www.ubuntu.com/server/doc Last login: Mon Aug 8 20:38:48 2011 from 192.168.123.123 user@destination-server:~$ 

4. Ora copiamo le chiavi SSH a: /root/.ssh/

 user@destination-server:~$ sudo cp ~/.ssh/authorized_keys /root/.ssh/ [sudo] password for user: user@destination-server:~$ sudo ls -l /root/.ssh/au* total 4 -rw------- 1 root root 392 2011-08-08 20:44 authorized_keys 

5. Ritorna alla vita di vita normale controlliamo l'esistenza di un SSH Auth Socket:

 $ echo $SSH_AUTH_SOCK /tmp/ssh-bUhwiw3004/agent.3004 

6. Tempo di divertimento! Nota: tenere presente che la SSHd può essere configurata per negare l'accesso alla radice. Ricordarsi di abilitarlo

 user@destination-server:~$ ssh root@localhost Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64) * Documentation: http://www.ubuntu.com/server/doc Last login: Mon Aug 8 21:07:29 2011 from eedev.local root@destination-server:~# id uid=0(root) gid=0(root) groups=0(root) 

7. La festa non è finita … Puoi chill-out e giocare con l'installazione un po 'utilizzando usando alias:

Nota: tenete presente che la relazione SSH e tty tende ad essere fastidiosa

 user@destination-server:~$ alias sshudo='ssh -4 -t root@localhost' user@destination-server:~$ sshudo id uid=0(root) gid=0(root) groups=0(root) Connection to localhost closed. user@destination-server:~$ sshudo vi /etc/sudoers 

E voilà!

 Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64) * Documentation: http://www.ubuntu.com/server/doc ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "/etc/motd" 4 lines, 114 characters 

8. Prima di andare … Fine sintonizzare:

 user@destination-server:~$ sshudo vi /root/.ssh/authorized_keys 

Aggiungere il from="localhost" alla parte anteriore della chiave SSH che stai utilizzando. questo limiterà l'accesso remoto dell'utente utilizzando tale chiave e il test:

 user@destination-server:~$ sshudo id user@destination-server:~$ uid=0(root) gid=0(root) groups=0(root) user@destination-server:~$ Connection to localhost closed. 

Esci e prova la restrizione

 user@destination-server:~$ exit Connection to destination-server closed. user@workstation:~$ ssh root@destination-server root@destination-server's password: 

Spero che questo ti aiuti.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.