PermitRootLogin est-il basé sur l'UID ou le nom d'utilisateur?

17

La page de manuel indique que PermitRootLogin

Spécifie si root peut se connecter en utilisant ssh(1).

Cependant, il n'est pas clair si cette vérification est basée sur le nom d'utilisateur ( "root") ou l'UID ( 0).

Que se passe-t-il si le compte root est renommé "admin"? Pourra "admin"se connecter quand PermitRootLogin=no?

Que se passe-t-il s'il y a deux comptes avec UID = 0, c'est "root"-à- dire et "admin"? L'un d'eux pourra-t-il se connecter?

ge0rg
la source

Réponses:

16

Il semble que la vérification soit effectuée sur UID (testé sur OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Désactivez PermitRootLogin:

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

Assurez-vous qu'un utilisateur nommé adminest créé avec l'UID 0:

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

Assurez-vous que l'utilisateur peut être utilisé pour se connecter au système:

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

Vérifiez si nous pouvons nous connecter au système en utilisant SSH:

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

Si nous activons PermitRootLogin:

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

Et essayez de vous connecter:

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:~# 
mtak
la source
Il est intéressant de noter que même si l'UID 0 a le nom d'utilisateur admin, il apparaît toujours comme root@pdv1dans le shell
Dezza
1
@Dezza Dépend peut-être des lignes de commande qui sont listées dans / etc / passwd (comme dans: trouver la première entrée avec UID = 0).
TripeHound
19

J'apprécie l'approche de @mtak dans l'autre réponse, mais la réponse est évidente même sans ces essais.

Il est basé sur le UID, comme vous pouvez le voir dans le code source de openssh:

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

De plus, chaque méthode d'authentification montre quelque chose comme

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

grep- plus loin dans le code, vous remarquerez peut-être qu'il n'y a pas strcmp('root', pw->pw_name)ou une alternative, si cela vous suffit.

Jakuje
la source
Comment connaissez- vous les sshdcontrôles de l'UID 0? Vous n'utilisez aucune argumentation pour appuyer votre déclaration.
mtak
2
Unix définit un superutilisateur par son UID = 0. Un autre exemple peut être un code source de openssh.
Jakuje
Le noyau le fait, mais vous supposiez qu'OpenSSH aussi. Par exemple, l'authentification de base Apache ne permet pas également la connexion root, n'est-ce pas? Merci pour le lien, j'ai modifié votre réponse pour l'inclure.
mtak
1
S'il le faisait d'une autre manière, ce serait un risque potentiel pour la sécurité.
Jakuje
3
@Bakuriu et pourquoi cela créerait le pwcontexte à partir d'autre chose. Le opensshcode est open source et les lecteurs intéressés peuvent parcourir l'intégralité du code. Des constructions similaires sont partout dans le code pour chaque méthode d'authentification. Si vous grepparcourez le code, vous ne le trouverez jamais strcmp('root', pw->pw_name), s'il le rendra plus fiable pour vous.
Jakuje