Wie kann ich ssh erlauben, nur vom lokalen Netzwerk aus root zu werden?

38

Ich habe Google-Authenticator auf einem CentOS 6.5-Computer installiert und bestimmte Benutzer so konfiguriert, dass sie OTP bereitstellen.

Während der Bearbeitung /etc/ssh/sshd_config" PermitRootLogin" habe ich eine Direktive gesehen, die standardmäßig auskommentiert ist.

Ich würde gerne " PermitRootLogin no" setzen, aber trotzdem in der Lage sein, nur vom lokalen Netzwerk aus als root auf den Rechner zu ssh.

Ist das möglich?

Itai Ganot
quelle
5
Mach das niemals. Melden Sie sich als Benutzer bei SSH an und erhöhen Sie dann mit sudo die Berechtigungen. Wenn Sie dies tun, hinterlässt dies eine Papierspur und Sie wissen, welches Konto gefährdet wurde.
SnakeDoc
3
@SnakeDoc: Das ist eine Denkschule, aber sie ist nicht eindeutig und ich würde das Gegenteil argumentieren. sudo ist eine riesige komplexe Angriffsfläche und nichts, was ich jemals installiert haben möchte. SSH pubkey auth ist eine viel kleinere Angriffsfläche. Beide können protokolliert werden, aber die Protokollierung ist nicht sehr nützlich, wenn der Benutzer (root) Protokolle bearbeiten oder löschen kann. Dies ist immer der Fall, es sei denn, Sie melden sich bei einem externen, nur anhängbaren Speicher an.
R ..
1
@R .. Wenn Sie sudoers nach dem Prinzip der geringsten Berechtigung korrekt einrichten, sind diese von Ihnen beschriebenen Probleme größtenteils kein Problem. Kein Benutzer sollte in der Lage sein, sudo - suin root zu sshen oder etwas zu tun, was seine Benutzer nicht benötigen (in sudoers verwenden Sie die weiße Liste für Befehle). Wenn Sie root benötigen, müssen Sie sich physisch an der Konsole befinden - d. H. Root over SSH sollte niemals erlaubt sein ... Schlüssel oder nicht.
SnakeDoc
1
@ SnakeDoc: Sie irren sich. Sudo verfügt sowohl über seine eigenen komplexen Angriffsoberflächen als auch über eine grundlegende komplexe Angriffsoberfläche, die eine suid-Binärdatei darstellt, und zwar in Form des gesamten Status, der über execve vererbt wurde. In einigen Fällen wird ein Fehler im suid-Programm selbst (suid) nicht benötigt. Fehler in der zugrunde liegenden Infrastruktur wie dem Dynamic Linker (z. B. CVE-2010-3856) können ausreichend sein.
R ..
1
@R .. Sie gehen davon aus, dass Sie immer wissen, ob ein Schlüssel durchgesickert ist. Das ist eine verdammte Annahme. Darüber hinaus verfügt Ihr Angreifer nach dem ersten Zugriff über Root-Berechtigungen. Es ist immer noch besser, sie über einen nicht privilegierten Account zu schicken und sie dazu zu bringen, sich zum Root zu erheben. Auf diese Weise haben Sie einen Schlüssel, der durchgesickert sein muss, eine Passphrase zum Auflösen und dann ein reguläres Benutzerkontokennwort zum Auflösen. Und wenn der Angreifer all das übersteht, kann er nichts tun, da dieser Benutzer unter Sudoern mit sehr eingeschränkten Fähigkeiten eingerichtet ist. Sehen Sie den Vorteil jetzt? Erlaube keine direkte Root-Anmeldung über den Zeitraum von ssh .... Es ist gute Hygiene
SnakeDoc

Antworten:

54

Verwenden Sie den Matchconfig-Parameter in /etc/ssh/sshd_config:

# general config
PermitRootLogin no 

# the following overrides the general config when conditions are met. 
Match Address  192.168.0.*
    PermitRootLogin yes

Sehen man sshd_config

Sven
quelle
Warum habe ich nicht daran gedacht? Vielen Dank Kumpel
Itai Ganot
8
Sie können auch die Quelle für Authentifizierungsschlüssel einschränken ~root/.ssh/authorized_keys. Stellen Sie dem Schlüssel Folgendes voran from="192.168.0.0/24 ".
BillThor
9
Ich würde es ändern, um auch IPv6-Link-Local-Adressen zuzulassen. Die Funktionsweise von verbindungslokalen Adressen in IPv6 macht sie sehr robust gegenüber falsch konfigurierten Netzwerken. Das heißt, wenn Sie sich einloggen müssen, um eine falsche Netzwerkkonfiguration zu beheben, ist möglicherweise die Verwendung einer IPv6-Link-Local-Adresse die einzige verbleibende Option.
Kasperd
Zu Ihrer Information Wenn Sie zusätzlich die Direktive AllowUser verwenden , müssen Sie dies zusätzlich (und entgegen der Intuition) auch tunAllowUser root
Robert Riedl
14

Die Match addressMethode wurde bereits erwähnt, Sie können jedoch auch die Benutzer (oder Gruppen) einschränken, die sich an einem System anmelden dürfen. Verwenden Sie zum Beispiel Folgendes, um Anmeldungen auf den Benutzer itai(von überall) und root(von einem bestimmten Netzwerk aus) zu beschränken:

AllowUsers itai [email protected].*

Dies verhindert, dass sich alle anderen Benutzer (wie apache) über SSH anmelden.

Siehe auch das AllowUsersSchlüsselwort im Handbuch sshd_config (5) .

Lekensteyn
quelle
4
Ich bevorzuge AllowGroupsund füge alle Benutzer, die sich mit SSH anmelden können sollen, einer bestimmten Gruppe hinzu. Schätze, es ist Geschmackssache, aber das scheint weniger Bearbeitung von sshd_config zu sein (was zu einem geringeren Risiko führt, alle durcheinander zu bringen und auszusperren).
ein Lebenslauf vom
1
@ MichaelKjörling Außerdem bedeutet AllowGroups, dass Sie keine Bearbeitungsberechtigungen für sshd_config benötigen, wenn Ihr Team erweitert oder verkleinert wird. Dies könnte sogar mehr Führungskräften oder Praktikanten die Möglichkeit geben, dies zu tun.
Nzall
Gute Punkte, beachten Sie, dass Sie Optionen kombinieren können, haben AllowUsers itai [email protected].*und AllowGroups ssh-usersund Sie werden nicht versehentlich eine Sperre verursachen, falls der Praktikant versehentlich die Gruppe löscht :)
Lekensteyn