Come visualizzare tutti i tasti authorized_keys SSH per un server unix

10

Come potrei visualizzare tutti i client SSH autorizzati da un server Unix?

So che cat ~/.ssh/authorized_keys mostra le chiavi autorizzate se sei loggato da root. Gli altri utenti possono impostare anche le proprie chiavi autorizzate? In tal caso, come visualizzerei tutte le chiavi autorizzate del sistema?

    
posta user2761030 17.04.2015 - 16:37
fonte

3 risposte

8

Per rispondere alle tue domande in ordine:

  1. Puoi vedere tutte le chiavi autorizzate eseguendo il seguente script con i privilegi di root.

    #!/bin/bash
    for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
        if [ -s "${X}/.ssh/authorized_keys" ]; then
            echo "### ${X}: "
            cat "${X}/.ssh/authorized_keys"
            echo ""
        fi
    done
    
  2. Qualsiasi utente valido può creare un file $HOME/.ssh/authorized_keys e aggiungere un numero qualsiasi di chiavi pubbliche. Qualcuno con la chiave privata corrispondente sarà quindi in grado di accedere come quel particolare utente. Il processo sshd segue è come il seguente. Quando arriva una nuova connessione, sshd chiede al client il nome utente. Se il nome utente esiste in /etc/passwd , sshd legge quindi il nome della directory home dell'utente dal sesto campo in /etc/passwd . Quindi controlla se .ssh/authorized_keys esiste nella directory home di quell'utente e se le autorizzazioni sono impostate correttamente sia nella directory .ssh che nel file authorized_keys. Se tali condizioni sono soddisfatte, sshd tenterà quindi di autenticare la chiave privata del client contro la chiave pubblica memorizzata in $HOME/.ssh/authorized_keys . Se il client possiede la chiave privata corrispondente, sshd gli consentirà l'accesso.

  3. Puoi utilizzare lo script sopra.

S.L. Barth è un punto eccellente per l'accesso alla root. È considerato un rischio consentire l'accesso root tramite ssh. La pratica generalmente accettata è creare un account utente, concedere l'accesso root con sudo o uno strumento simile e disabilitare gli accessi root tramite ssh aggiungendo la seguente riga a /etc/ssh/sshd_config e riavviando sshd.

PermitRootLogin no

Le probabilità sono quasi al 100% che se la tua macchina è su Internet che " Hail Mary Cloud " busserà alla tua porta. Per Linux, iptables e sshd in cui si accettano accessi basati su password, probabilmente si desidera installare e configurare qualcosa come fail2ban così è più difficile per gli attaccanti potenziare la tua macchina.

E, dato che stiamo già parlando di chiavi SSH, e poiché questo è stato pubblicato oggi, probabilmente vorresti aggiungi UseRoaming no alla sezione Host * nel tuo /etc/ssh/ssh_config

    
risposta data 14.01.2016 - 22:03
fonte
2

Il comando cat ~/.ssh/authorized_keys mostra il file authorized_keys dell'utente attualmente connesso. Quando accedi come root o usando sudo , questo ti darà il file authorized_keys dell'utente root.

Il file authorized_keys, almeno su Ubuntu, è solitamente di proprietà dell'utente. Quindi l'utente attualmente loggato (root o no) può vederlo.
La directory .ssh si trova nella directory home dell'utente e di solito è di loro proprietà con privilegi di lettura, scrittura ed esecuzione; quindi normalmente un utente dovrebbe poter aggiungere il proprio file authorized_keys.

Per vedere tutte le chiavi autorizzate, puoi semplicemente creare uno script che itera su tutte le home directory e / root e stampa il file .ssh / authorized_keys. Ovviamente questo script richiederà privilegi sudo.

Come nota a margine, su Ubuntu l'account root di solito è disabilitato, perché è un bersaglio preferito degli aggressori. Potrebbe non contenere un file authorized_keys per questo motivo.

    
risposta data 17.04.2015 - 16:48
fonte
0

IMO è una buona idea anche controllare il file ~/.ssh/authorized_keys2 . Da link :

For backward compatibility ~/.ssh/authorized_keys2 will still used for authentication and hostkeys are still read from the known_hosts2.

Codice migliorato da Liczyrzepa:

#!/bin/bash
for X in $(cut -f6 -d ':' /etc/passwd |sort |uniq); do
  for suffix in "" "2"; do
    if [ -s "${X}/.ssh/authorized_keys$suffix" ]; then
      echo "### ${X}: "
      cat "${X}/.ssh/authorized_keys$suffix"
      echo ""
     fi;
   done;
done
    
risposta data 17.02.2017 - 18:02
fonte

Leggi altre domande sui tag