Ich muss zugeben, dass ich in einigen Fällen Server ohne Passwörter mag. Ein typischer Server ist für jeden anfällig, der physischen Zugriff darauf hat. In einigen Fällen ist es daher sinnvoll, das Kennwort physisch zu sperren und seitdem jedem physischen Zugriff zu vertrauen .
Grundlegendes Konzept
Wenn ich einen solchen Server physisch erreiche, sollte ich theoretisch in der Lage sein, Verwaltungsaufgaben ohne Passwort auszuführen, indem ich einfach root
als Login eingebe und nicht nach einem Passwort gefragt werde. Das gleiche kann für Benutzerkonten gelten, auf die jedoch physisch nicht wirklich zugegriffen werden kann. Daher werden für den (gelegentlichen) lokalen Zugriff keine Systemkennwörter benötigt.
Beim Remotezugriff auf den Server, entweder für die Verwaltung oder für das Benutzerkonto, wird voraussichtlich immer ein privater SSH-Schlüssel verwendet. Es ist sehr einfach, einen SSH-Schlüssel für ein gerade erstelltes Konto einzurichten, sodass für den (regulären) Remotezugriff keine Systemkennwörter erforderlich sind.
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
Die Schlussfolgerung ist, dass wir für solche Anwendungsfälle theoretisch keine Systemkennwörter benötigen . Die Frage ist also, wie wir die System- und Benutzerkonten so konfigurieren, dass dies auf konsistente und sichere Weise geschieht.
Details zum lokalen Zugriff
Wie stellen wir sicher, dass auf das Root-Konto lokal ohne Passwort zugegriffen werden kann? Ich glaube nicht , können wir verwenden , passwd -d
wie das wird Root - Zugriff zu freizügig und ein unpriviliged Benutzer machen könnte schalten kostenlos Wurzel, die falsch ist. Wir können es nicht verwenden, passwd -l
da es uns daran hindert, uns einzuloggen.
Beachten Sie, dass beim lokalen Zugriff ausschließlich die lokale Tastatur verwendet wird. Daher darf eine gültige Lösung keinen Benutzerwechsel (ob mit su
oder sudo
) zulassen .
Details zum Fernzugriff
Bis vor kurzem funktionierte die obige Lösung, jetzt begann SSH, nach gesperrten Benutzerkonten zu suchen. Wir können wahrscheinlich nicht passwd -d
aus den gleichen Gründen verwenden. Wir können es nicht verwenden, passwd -u
da es sich nur darüber beschwert, dass es zu dem führen würde, was es passwd -d
tut.
Für diesen Teil gibt es eine Problemumgehung mit einem Scheinkennwort.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Es könnte auch möglich sein, die Überprüfung gesperrter Konten in SSH vollständig zu deaktivieren, aber es wäre besser, die Unterstützung gesperrter Konten beizubehalten und sie nur zu entsperren.
Schlussnoten
Was mich interessiert, ist eine Lösung, mit der Sie sich lokal und alle Konten, einschließlich Root-Konten, aus der Ferne anmelden können, ohne Kennwörter. Andererseits darf eine Lösung die Sicherheit nur auf ausdrücklich beschriebene Weise beeinträchtigen, insbesondere nicht, indem Remotebenutzern der Zugriff auf das Root-Konto oder das Konto anderer Benutzer gewährt wird. Die Lösung sollte ausreichend robust sein, damit sie indirekt keine Sicherheitsprobleme verursacht.
Eine akzeptierte und prämierte Antwort kann die detaillierte Konfiguration einzelner Tools beschreiben oder nicht, muss jedoch die wichtigsten Punkte enthalten, um die angegebenen Ziele zu erreichen. Beachten Sie, dass dies wahrscheinlich nicht durch herkömmliche Verwendung von Tools wie gelöst werden passwd
, ssh
, su
, sudo
und dergleichen.
Weitere Ideen nach dem Lesen der ersten Antworten
Nur eine Idee - der lokale Root-Zugriff könnte durch Starten von Root-Shells anstelle von Anmeldeprozessen erfolgen. Es ist jedoch weiterhin erforderlich, nur die Kennwortauthentifizierung und nicht die Authentifizierung mit öffentlichem Schlüssel zu sperren.
Antworten:
Anforderungen, für die ich Lösungen anbieten werde, als Stichpunkte:
Die folgenden Beispiele basieren auf Debian, da ich das hier zum Testen habe. Ich sehe jedoch keinen Grund, warum die Prinzipien nicht auf einen Vertrieb (oder ein PAM-basiertes * ix-Derivat) angewendet werden können.
Anmeldung an der Root-Konsole ohne Passwort
Ich denke, die Art und Weise, wie ich das angehen würde, wäre, PAM und die
/etc/securetty
Konfigurationsdatei zu nutzen.Voraussetzung ist ein "ausreichend sicheres" Root-Passwort. Dies ist für die Konsolenanmeldung nicht erforderlich, ist jedoch vorhanden, um Brute-Force-Cracking-Versuche unrealistisch zu machen. Das Konto ist ansonsten ein ganz normales Root-Konto.
In habe
/etc/pam.d/login
ich die folgenden Standardzeilen für die Authentifizierung (die mit dem Schlüsselwort beginnenauth
):Die referenzierte
common-auth
Include-Datei enthält die folgenden relevanten Zeilen:Die
common-auth
Datei weist PAM an, eine Regel (die Verweigerung) zu überspringen, wenn eine "UNIX-Anmeldung" erfolgreich ist. In der Regel bedeutet dies eine Übereinstimmung in/etc/shadow
.Die
auth ... pam_securetty.so
Leitung ist so konfiguriert, dass Root-Anmeldungen mit Ausnahme der in angegebenen tty-Geräte verhindert werden/etc/securetty
. (Diese Datei enthält bereits alle Konsolengeräte.)Durch
auth
leichtes Ändern dieser Zeile ist es möglich, eine Regel zu definieren, die ein Root-Login ohne Passwort von einem in angegebenen tty-Gerät erlaubt/etc/securetty
. Dersuccess=ok
Parameter muss so geändert werden, dass er bei einer erfolgreichen Übereinstimmungok
durch die Anzahl derauth
zu überspringenden Zeilen ersetzt wird . In der hier gezeigten Situation ist diese Nummer3
, die zurauth ... pam_permit.so
Zeile springt :Passwortloses Root-Remote-Login von vorautorisierten Benutzern
Dies ist ein einfaches Hinzufügen von SSH-Schlüsseln für die berechtigten Benutzer, die der Stammdatei hinzugefügt
authorized_keys
werden.Passwortlose Remote-Anmeldung für bestimmte Konten von vorautorisierten Benutzern
Dies ist auch eine einfache Aufnahme von SSH-Schlüsseln für autorisierte Benutzer, die der entsprechenden Benutzerdatei hinzugefügt
.ssh/authorized_keys
werden. (Der typische Remote-Benutzer chris möchte sich passwortfrei beim lokalen Benutzer chris anmelden .)Beachten Sie, dass Konten nach der Erstellung im standardmäßig gesperrten Zustand bleiben können (dh nur
!
im Kennwortfeld für/etc/shadow
), aber eine Anmeldung mit SSH-Schlüssel zulassen können. Dazu muss der Benutzer root den Schlüssel in der.ssh/authorized_keys
Datei des neuen Benutzers ablegen. Was nicht so offensichtlich ist, ist, dass dieser Ansatz nur verfügbar ist, wenn eingestelltUsePAM Yes
ist/etc/ssh/sshd_config
. PAM unterscheidet zwischen!
"Konto für Kennwort gesperrt, aber andere Zugriffsmethoden sind möglicherweise zulässig" und!...
"Konto gesperrt. Zeitraum". (WennUsePAM No
gesetzt, berücksichtigt OpenSSH das Vorhandensein des!
Starts des Kennwortfelds, um ein gesperrtes Konto darzustellen.)Passwortlose Remote-Anmeldung für jedes Konto von vorautorisierten Benutzern
Mir war nicht ganz klar, ob Sie diese Einrichtung wollten oder nicht. Bestimmte autorisierte Benutzer könnten sich ohne Passwort bei jedem lokalen Konto anmelden.
Ich kann dieses Szenario nicht testen, glaube aber, dass dies mit OpenSSH 5.9 oder höher erreicht werden kann, mit dem mehrere
authorized_keys
Dateien definiert werden können/etc/ssh/sshd_config
. Bearbeiten Sie die Konfigurationsdatei, um eine zweite Datei mit dem Namen aufzunehmen/etc/ssh/authorized_keys
. Fügen Sie die öffentlichen Schlüssel Ihrer ausgewählten autorisierten Benutzer zu dieser Datei hinzu, und stellen Sie sicher, dass die Berechtigungen im Besitz von root sind und nur root Schreibzugriff gewähren (0644).quelle
.ssh/authorized_keys
Datei enthält den relevanten öffentlichen Schlüssel. Hilft das?!
im Kennwortfeld in eine einzige angezeigt/etc/shadow
. Laut Manpage zeigt dies ein gültiges Konto an, für das kein Passwort passen kann.Es hört sich so an, als ob Sie echte (Nicht-Root-) Benutzerkonten mit SSH-Schlüsseln und uneingeschränktem
NOPASSWD
Zugriff über möchtensudo
(was heutzutage in den meisten Linux-Distributionen standardmäßig verfügbar ist und es auch trivial ist, manuell zu installieren). Sie können für jedes Benutzerkonto leere Kennwörter festlegen (was nicht remote funktioniert). Anschließend wird der Benutzer entweder ausgeführtsudo -s
oder der Benutzer~/.bash_profile
enthält lediglich diesen Befehl.Sudo
Fügen Sie jeden Benutzer zur
sudo
UNIX-Gruppe hinzu (z. B.usermod -a -G sudo USERNAME
haben ältere Systeme dafür weniger intuitive Möglichkeiten; im schlimmsten Fall bearbeiten Sie sie/etc/groups
direkt).In
/etc/sudoers
oder/etc/sudoers.d/local
möchten Sie eine Zeile wie diese:Wenn Sie einen automatischen Root-Zugriff wünschen, fügen Sie diesen dem Benutzerprofil hinzu. Denn
bash
das wäre~/.bash_profile
:Auf diese Weise können Sie sehen, wer angemeldet ist (versuchen
who
oderlast
), und Sie können sich anmelden/var/log/auth.log
.Passwortloses Login
Auf viel älteren Systemen können Sie den Hash einfach bearbeiten
/etc/passwd
(oder auf etwas älteren Systemen/etc/shadow
) und entfernen, so dass z . B.bob:$1$salt$hash:12345:0:99999:7:::
gerecht wirdbob::12345:0:99999:7:::
. Das war alles was du brauchst. Moderne Systeme mögen das nicht. Es gibt wahrscheinlich auch andere Möglichkeiten, dies zu tun, aber die Art und Weise, wie ich es gerade überprüft habe, ist wie folgt (Quelle: Leo's Random Stuff ) :Eröffnen
/etc/shadow
und beobachten Sie ein Konto mit echten Informationen. Dies umfasst drei Elemente, die durch Dollarzeichen ($
) getrennt sind. Diese repräsentieren den Hash-Mechanismus, dann das Salz , dann den Hash. Beachte das Salz und führe Folgendes aus:(Dies verwendet MD5 als Hashing-Mechanismus. Es ist ein leeres Passwort, daher sollte es Ihnen nichts ausmachen.) Wenn Sie zur Eingabe eines Passworts aufgefordert werden, drücken Sie die Eingabetaste. Speichern Sie diese Zeichenfolge, einschließlich aller nachfolgenden Punkte, und fügen Sie sie nach dem ersten Doppelpunkt in die Zeile des Benutzers ein
/etc/shadow
(dies sollte den vorhandenen Inhalt zwischen dem ersten und dem zweiten Doppelpunkt ersetzen). (Bitte nichtSALT
als Salz verwenden!)SSH
Ihre
ssh
Daemon-Konfiguration befindet sich entweder in/etc/sshd_config
oder/etc/ssh/sshd_config
. Aus Sicherheitsgründen empfehle ich die folgenden Zeilen:Siehe die sichere Secure Shell writeup für zusätzliche Sicherheitsmaßnahmen , die Sie zu Ihrer ssh - Konfiguration hinzufügen können , um besser aushärten es gegen anspruchsvolle Angreifer.
Jetzt können sich Ihre Benutzer aufgrund leerer Passwörter nicht mehr über einloggen
ssh
(dies ist eine notwendige Sicherheitsmaßnahme). Dies bedeutet, dass sie sich nur mit SSH-Schlüsseln anmelden können.Jeder Benutzer sollte für jedes seiner Client-Systeme ein SSH-Schlüsselpaar erstellen, z
Dies erzeugt einen privaten Schlüssel bei
$HOME/.ssh/id_rsa
und einen öffentlichen Schlüssel bei$HOME/.ssh/id_rsa.pub
. Lassen Sie sich von diesem Benutzer die öffentlichen Schlüssel senden und an die des Servers anhängen$HOME/.ssh/authorized_keys
(beachten Sie, dass sich jeder Benutzer$HOME/.ssh
beispielsweise im Modus 700 befinden mussmkdir -p ~user/.ssh && chmod 700 ~user/.ssh
).Benutzer, die keine SSH-Schlüssel möchten, können zum physischen System weitergeleitet werden. Dort werden sie mit ihrem leeren Kennwort angemeldet. Anschließend können sie über
passwd
die Shell ein Kennwort eingeben und so den Remotezugriff zulassen.(Ich habe diese Technik tatsächlich verwendet, um den Leuten den Zugriff auf eine Sammlung von Systemen zu ermöglichen, als ich eine IT-Abteilung leitete. Sie zwang die Benutzer, SSH-Schlüssel zu verwenden, und ich musste ihnen keine Passwörter geben. Ihre Initiale
~/.bash_profile
hatte unten zwei Zeilen:passwd
und dann,mv ~/.bash_profile.real ~/.bash_profile
damit sie beim ersten Login ein neues Passwort setzen.)Risiken
Sie setzen volles Vertrauen in Ihre Benutzer. Es gibt nichts, was einen Benutzer daran hindert, mit der
~/.ssh/authorized_keys
Datei eines anderen Benutzers in Konflikt zu geraten und somit Ihre Fähigkeit zu ändern, den Zugriff zu widerrufen und zu überwachen. Dies ist jedoch unvermeidbar, wenn Sie den vollständigen Root-Zugriff gewähren.Fazit
Jeder Benutzer ist jetzt Mitglied der sudo- Gruppe und hat vollständigen kennwortlosen Zugriff auf eine Root-Shell. Diese Benutzer haben keine Passwörter für ihre Konten und können sich remote mit ssh-Schlüsseln anmelden.
Wenn Sie einen Ihrer Mitarbeiter verlieren, können Sie sein Konto entfernen. Wenn einer der Laptops Ihrer Mitarbeiter gestohlen wird, können Sie den SSH-Schlüssel dieses Laptops aus der
authorized_keys
Datei dieses Benutzers entfernen . Wenn Sie eine Sicherheitsverletzung haben, haben Sie Protokolle, die anzeigen, wer angemeldet ist.quelle
passwd -d
in der Frage, sodasssu
auf diesen Benutzer ohne Passwort gewechselt werden kann. Der Abschnitt zu Risiken beschreibt zwei Dinge (das Durcheinander mit den Daten anderer Benutzer und das Erhalten von Root-Zugriff), deren Entfernung der eigentliche Punkt der Frage ist. Daher ist dies keine Antwort auf die Frage, obwohl die einzelnen Abschnitte gut geschrieben sind.