Basiert PermitRootLogin auf der UID oder dem Benutzernamen?

17

Die Manpage gibt das an PermitRootLogin

Gibt an, ob sich root mit anmelden kann ssh(1).

Es ist jedoch nicht klar, ob diese Prüfung auf dem Benutzernamen ( "root") oder der UID ( 0) basiert .

Was passiert, wenn das Root-Konto in umbenannt wird "admin"? Kannst du dich "admin"wann anmelden PermitRootLogin=no?

Was passiert, wenn es zwei Konten mit der UID = 0 gibt, dh "root"und "admin"? Kann sich einer von beiden anmelden?

ge0rg
quelle

Antworten:

16

Es scheint, dass die Überprüfung der UID erfolgt ist (getestet am OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Setzen Sie PermitRootLogin auf off:

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

Stellen Sie sicher, dass ein Benutzer adminmit der UID 0 erstellt wurde:

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

Stellen Sie sicher, dass der Benutzer zum Anmelden am System verwendet werden kann:

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

Überprüfen Sie, ob wir uns mit SSH am System anmelden können:

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

Wenn wir PermitRootLogin aktivieren:

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

Und versuchen Sie sich anzumelden:

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
quelle
Interessanterweise wird UID 0, obwohl sie den Benutzernamen admin hat, immer noch wie root@pdv1in der Shell
angezeigt
1
@Dezza Kommt evtl. darauf an, dass die Auftragspositionen in / etc / passwd aufgelistet sind (wie in: finde den ersten Eintrag mit UID = 0).
TripeHound
19

Ich schätze den Ansatz von @mtak in der anderen Antwort, aber die Antwort ist auch ohne diese Versuche offensichtlich.

Es basiert auf dem UID, wie Sie im Quellcode von openssh sehen können:

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

Auch jede Authentifizierungsmethode zeigt so etwas

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

grep-wenn Sie weiter unten im Code nachsehen, werden Sie vielleicht feststellen, dass es keine strcmp('root', pw->pw_name)oder irgendeine Alternative gibt, wenn es für Sie ausreicht.

Jakuje
quelle
Woher wissen Sie , sshd ob eine UID 0 vorliegt? Sie verwenden keine Argumentation, um Ihre Aussage zu stützen.
MTAK
2
Unix definiert einen Superuser durch seine UID = 0. Als weiteres Beispiel kann ein Quellcode von openssh.
Jakuje
Der Kernel tut es, aber Sie gingen davon aus, dass OpenSSH es auch tat. Zum Beispiel erlaubt die Apache-Basisauthentifizierung keine Root-Anmeldung, oder? Vielen Dank für den Link. Ich habe Ihre Antwort dahingehend geändert.
MTAK
1
Wenn es anders gemacht würde, wäre es ein potenzielles Sicherheitsrisiko.
Jakuje
3
@ Bakuriu und warum würde es den pwKontext aus etwas anderem erstellen . Der opensshCode ist Open Source und interessierte Leser können den gesamten Code durchgehen. Ähnliche Konstruktionen sind für jede Authentifizierungsmethode im gesamten Code enthalten. Wenn Sie grepden Code durchgehen, werden Sie nie feststellen strcmp('root', pw->pw_name), ob er für Sie zuverlässiger wird.
Jakuje