l'autenticazione con chiave pubblica non riesce SOLO quando sshd è demone


33

Non ho idea di come questo accada. La distro è Scientific Linux 6.1 e tutto è impostato per eseguire l'autenticazione tramite chiave pubblica. Tuttavia, quando sshd è in esecuzione come demone (servizio sshd start), non accetta le chiavi pubbliche. (Per ottenere questo pezzo di registro, ho modificato lo script sshd per aggiungere l'opzione -ddd)

debug1: trying public key file /root/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug3: mm_answer_keyallowed: key 0x7f266e1a8840 is not allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
debug3: Wrote 64 bytes for a total of 1853
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 1

Se sshd viene eseguito in modalità debug /usr/sbin/sshd -ddd, l'autenticazione funziona come un incantesimo:

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: d7:3a:08:39:f7:28:dc:ea:f3:71:7c:23:92:02:02:d8
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: key 0x7f85527ef230 is allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug3: Wrote 320 bytes for a total of 2109
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
Postponed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0

Qualche idea?? Qualcuno ha visto qualcosa del genere?

Gli appunti:

Le autorizzazioni per i file sono state ricontrollate:

# ll -d .ssh
drwx------. 2 root root 4096 Oct 14 10:05 .ssh
# ll .ssh
total 16
-rw-------. 1 root root  786 Oct 14 09:35 authorized_keys
-rw-------. 1 root root 1675 Oct 13 08:24 id_rsa
-rw-r--r--. 1 root root  393 Oct 13 08:24 id_rsa.pub
-rw-r--r--. 1 root root  448 Oct 13 12:51 known_hosts

Mi è stato chiesto se sshd può accedere ai file di root in "modalità demone". La risposta più vicina a questa domanda è:

# netstat -ntap | grep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      19847/sshd 
# ps -ef | grep 19847
root     19847     1  0 09:58 ?        00:00:00 /usr/sbin/sshd

Se sshd funziona come root, non so come non sia possibile accedere ai propri file. SELinux potrebbe essere la causa?


1
Lo script sshd init fa qualcosa di interessante? (Dovrebbe essere /etc/init.d/sshd?) Che non stai facendo sulla riga di comando? Invece di 'service sshd start' prova 'sh -x /etc/init.d/ssh start'.
PT

Risposte:


42

Sì, SELinux è probabilmente la causa. La .sshdir è probabilmente etichettata erroneamente. Guarda /var/log/audit/audit.log. Dovrebbe essere etichettato ssh_home_t. Verificare con ls -laZ. Esegui restorecon -r -vv /root/.sshse necessario.


1
Sì, SELinux era la causa: tipo = AVC msg = audit (1318597097.413: 5447): avc: negato {read} per pid = 19849 comm = "sshd" name = "authorized_keys" dev = dm-0 ino = 262398 scontext = unconfined_u : system_r: sshd_t: s0-s0: c0.c1023 tcontext = unconfined_u: object_r: admin_home_t: s0 tclass = file Funziona dopo aver eseguito "restorecon -r -vv /root/.ssh". Molte grazie.
user666412

1
grazie GRAZIE GRAZIE per la correzione della riga di comando di selinux che ho cercato per anni perché era possibile poter ssh come root sul mio server redhat enterprise 6.2 usando l'autenticazione con chiave ssh, ma non sono riuscito a collegarmi come utente non root senza dover inserire una password. "ssh -v" non indicava nulla di insolito. Avevo controllato e ricontrollato le protezioni dei file su /home/example/.ssh Non è stato fino a quando non ho eseguito "/ usr / sbin / sshd -d" e per qualche motivo che ha funzionato normalmente ho capito che stava succedendo qualcos'altro, e ho provato un'altra ricerca su Google e l'ho trovato. Quindi, i sintomi erano che potevo vedere come
Paul M

1
Ho dovuto farlo su tutto il filesystem, cioè restorecon -r /YMMV.
Irfy,

1
Ho provato questo, ma ancora non funziona. nel registro di controllo ho type=AVC msg=audit(1434642809.455:94717): avc: denied { search } for pid=27032 comm="sshd" name="/" dev=dm-2 ino=2 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir- non sono sicuro di cosa significhi
Yehosef il

1
La risposta è stata nel name="/"- ho dovuto eseguire il restorecon -r /come suggerito da @Irfy.
Yehosef,

3

Ho avuto lo stesso problema. Nel mio caso, Restorecon e Chcon non hanno funzionato.

Non volevo disabilitare selinux. Dopo molte ricerche, ho finalmente pensato che fosse perché la mia directory home era montata da un'altra parte (NFS). Ho trovato questa segnalazione di bug che mi ha indicato.

Ho corso:

> getsebool use_nfs_home_dirs
use_nfs_home_dirs --> off

per confermare use_nfs_home_dirs era spento e quindi:

sudo setsebool -P use_nfs_home_dirs 1

accenderlo.

Ora posso ssh sulla mia macchina usando la mia chiave e senza inserire una password. Attivare il booleano use_home_nfs_dirs è stato quello che ci è voluto.


1

Per aggiungere alla risposta di Mark Wagner, se stai usando un percorso di directory home personalizzato (cioè no /home), devi assicurarti di aver impostato il contesto di sicurezza SELinux. Per fare ciò, se si hanno directory home dell'utente, ad esempio /myhome, eseguire:

semanage fcontext -a -e /home /myhome
restorecon -vR /myhome

Se sei su CentOS, dovrai eseguirlo per ottenere semanage:sudo yum install policycoreutils-python
sm4rk0

0

Sembra che tu usi chiavi diverse durante il test delle connessioni, 0x7f266e1a8840 vs 0x7f85527ef230. Prova a connetterti usando 'ssh -v example.com' a sshd in esecuzione come demone e in modalità debug e cerca le chiavi utilizzate da ssh attorno alla stringa "Offerta chiave pubblica RSA".


Sì, c'erano id_rsa e id_dsa. La chiave DSA è sparita e rifarò il test.
user666412

Il valore menzionato in debug3: mm_answer_keyallowed: key 0xFFFFFFFFFFcambierà ogni volta che sshd riceve una nuova connessione. Per confermare ciò, trova un server in cui SSH funziona, avvia sshd LOGLEVEL per eseguire il debug3, riavvia sshd, esegui tail -f /var/log/secure |grep mm_answer_keyallowede poi accedi alcune volte, aspettando qualche secondo (o minuti) tra ogni connessione. Vedrai che il valore cambia ogni volta. E in realtà mi sembra un contatore.
Stefan Lasiewski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.