PermitRootLogin è basato sull'UID o sul nome utente?


17

La pagina man lo afferma PermitRootLogin

Specifica se il root può accedere utilizzando ssh(1).

Tuttavia, non è chiaro se questo controllo si basa sul nome utente ( "root") o sull'UID ( 0).

Cosa succede se l'account di root viene rinominato "admin"? Saranno "admin"in grado di accedere quando PermitRootLogin=no?

Cosa succede se ci sono due account con UID = 0, ovvero "root"e "admin"? Uno dei due sarà in grado di accedere?

Risposte:


16

Sembra che il controllo sia eseguito su UID (testato su OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Disattiva PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

Assicurati che un utente di nome adminsia creato con UID 0:

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

Assicurarsi che l'utente possa essere utilizzato per accedere al sistema:

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

Verifica se possiamo accedere al sistema usando SSH:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

Se attiviamo PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

E prova ad accedere:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

È interessante notare che anche se UID 0 ha il nome utente admin, viene comunque visualizzato come root@pdv1nella shell
Dezza,

1
@Dezza Forse dipende dalle righe dell'ordine elencate in / etc / passwd (come in: trova la prima voce con UID = 0).
TripeHound,

19

Apprezzo l'approccio di @mtak nell'altra risposta, ma la risposta è ovvia anche senza queste prove.

Si basa su UID, come puoi vedere nel codice sorgente di openssh:

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

Inoltre, ogni metodo di autenticazione mostra qualcosa di simile

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grep-Più avanti nel codice, potresti notare che non ci sono strcmp('root', pw->pw_name)o alcune alternative, se sarà abbastanza per te.


Come conosci i sshd controlli per UID 0? Non stai usando alcuna argomentazione a supporto della tua affermazione.
martedì

2
Unix definisce un superutente con il suo UID = 0. Come altro esempio può essere un codice sorgente di openssh.
Jakuje,

Il kernel lo fa, ma pensavi che anche OpenSSH lo facesse. Ad esempio, l'autenticazione di base di Apache non consente anche l'accesso come root, vero? Grazie per il link, ho modificato la tua risposta per includerla.
martedì

1
Se lo facesse in un altro modo, sarebbe un potenziale rischio per la sicurezza.
Jakuje,

3
@Bakuriu e perché creerebbe il pwcontesto da qualcos'altro. Il opensshcodice è open source e i lettori interessati possono consultare l'intero codice. Costruzioni simili sono presenti in tutto il codice per ogni metodo di autenticazione. Se tugrep attraversi il codice, non troverai mai strcmp('root', pw->pw_name), se lo renderà più affidabile per te.
Jakuje,
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.