Kann ein Linux-Benutzer sein Passwort ändern, ohne das aktuelle Passwort zu kennen?

24

Ich ubunturichte ein paar Boxen ein und verwende Opscodes chefals Konfigurationswerkzeug. Es wäre ziemlich einfach, öffentliche Schlüssel für jeden Benutzer auf jedem dieser Server zu installieren und die Kennwortauthentifizierung zu deaktivieren.

Die Benutzer sollten jedoch auch über sudoBerechtigungen verfügen , für die standardmäßig ein Kennwort erforderlich ist.

Wenn ich die öffentlichen Schlüssel der Benutzer als Methode zur Zugriffsverwaltung verwenden und den Benutzern sudoBerechtigungen erteilen möchte, muss ich dann auch die Benutzer mit NOPASSWD: ALLin einrichten visduo, oder kann ein Benutzer bei Bedarf sein eigenes Kennwort ändern nur öffentliche Schlüsselauthentifizierung?

cwd
quelle
@sr - sieht nicht so aus, als wäre dies eine
gängige Vorgehensweise
Warum möchten Sie, dass Ihre Benutzer über Sudo-Berechtigungen verfügen? Ich hoffe, Ihnen ist bewusst, dass Sie damit einen Root-Zugang vergeben. Hier besteht möglicherweise die Möglichkeit, etwas Zeit zu investieren und nur eine Teilmenge von Befehlen in Verbindung mit sudo zuzulassen (was möglicherweise weniger unsicher wäre). Go man sudoersliefert Informationen darüber, dass bestimmte Befehle mit sudo ausgeführt werden können, ohne dass ein Benutzerkennwort erforderlich ist. Sie können / etc / sudoers sogar ein Shellscript hinzufügen, mit dem Sie pro Benutzer ein "Selbstpasswort" festlegen können, ohne ein vorheriges Passwort zu benötigen.
HumanityANDpeace
@humanityANDpeace - das merke ich. Alle unsere Teammitglieder benötigen Root-Zugriff auf die von uns verwalteten Cloud-Server. Wir verwenden jetzt chef, um die öffentlichen Schlüssel der Benutzer zu verwalten, und wir haben eine Sysadmin-Gruppe NOPASSWD: ALL, der die Teammitglieder angehören . Wenn Sie eine bessere Lösung vorschlagen können, posten Sie diese bitte als Antwort.
KWD

Antworten:

20

In der am häufigsten verwendeten Konfiguration von Sudo muss der Benutzer sein Kennwort eingeben. In der Regel hat der Benutzer sein Kennwort bereits zur Authentifizierung im Konto verwendet. Durch erneute Eingabe des Kennworts wird bestätigt, dass der legitime Benutzer seine Konsole nicht verlassen hat und entführt wurde.

In Ihrem Setup wird das Kennwort des Benutzers nur zur Authentifizierung bei sudo verwendet. Insbesondere wenn der SSH-Schlüssel eines Benutzers kompromittiert ist, kann der Angreifer keine Root-Rechte auf dem Server erlangen. Der Angreifer könnte einen Schlüsselprotokollierer in das Konto einfügen, aber dieser Schlüsselprotokollierer könnte von anderen Benutzern erkannt und sogar automatisch überwacht werden.

Ein Benutzer muss normalerweise sein aktuelles Kennwort kennen, um es in ein anderes Kennwort zu ändern. Das passwdProgramm überprüft dies (es kann so konfiguriert werden, dass dies in Ihrem Szenario nicht sinnvoll oder überhaupt wünschenswert ist). Root kann jedoch das Passwort jedes Benutzers ändern, ohne das alte zu kennen. Daher kann ein Benutzer mit sudo-Befugnissen sein eigenes Kennwort ändern, ohne es an der passwdEingabeaufforderung durch Ausführen eingeben zu müssen sudo passwd $USER. Wenn sudokonfiguriert ist, dass das Kennwort des Benutzers erforderlich ist, muss der Benutzer das Kennwort auf sudojeden Fall eingegeben haben.

Sie können die Kennwortauthentifizierung selektiv deaktivieren. In Ihrer Situation würden Sie die Kennwortauthentifizierung in ssh und möglicherweise in anderen Diensten deaktivieren. Die meisten Dienste auf den meisten modernen Geräten (einschließlich Ubuntu) verwenden PAM , um Authentifizierungsmethoden zu konfigurieren. Unter Ubuntu befinden sich die PAM-Konfigurationsdateien in /etc/pam.d. Kommentieren Sie die auth … pam_unix.soZeile in aus, um die Kennwortauthentifizierung zu deaktivieren /etc/pam.d/common-auth. Darüber hinaus stellen Sie sicher , haben Sie PasswordAuthentication noin /etc/ssh/sshd_configzu deaktivieren sshd der integrierten Passwort - Authentifizierung.

Möglicherweise möchten Sie einigen administrativen Benutzern erlauben, sich mit einem Kennwort anzumelden oder die Kennwortauthentifizierung in der Konsole zuzulassen. Dies ist mit PAM möglich (es ist ziemlich flexibel), aber ich konnte Ihnen nicht sagen, wie es mir schlecht geht. Stellen Sie eine separate Frage, wenn Sie Hilfe benötigen.

Gilles 'SO - hör auf böse zu sein'
quelle
Eine bequeme Möglichkeit, PAM in Kombination mit der SSH-Schlüsselauthentifizierung zu verwenden, ist pam_ssh_agent_auth. Dies hat den Vorteil, dass die Kennworteingabeaufforderung durch die (theoretisch noch sicherere) Schlüsselauthentifizierung ersetzt wird, die SSH sowieso verwenden kann
Tobias Kienzler,
Sie sagen also, Sie sudo passwdwürden das Passwort für den aktuellen Benutzer ändern, nicht für den sudo-Benutzer?
still_dreaming_1
1
@ still_dreaming_1 Nein, ich sage, dass ein Benutzer, der Befehle ausführen sudokann, sein eigenes Passwort ändern kann. Der genaue Befehl spielt eigentlich keine Rolle, aber um genauer zu werden, wäre es, sudo passwd bobwo bobder Name des Benutzers oder etwas Äquivalentes ist. Ohne Argument sudo passwdwürde sich in der Tat das Passwort für root ändern.
Gilles 'SO- hör auf böse zu sein'
7

Sie können das Modul pam_ssh_agent_auth verwenden . Es ist ziemlich einfach zu kompilieren und dann einfach den Eintrag hinzuzufügen

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

vor den anderen auth(oder include) Einträgen in/etc/pam.d/sudo

und

Defaults    env_keep += "SSH_AUTH_SOCK"

zu /etc/sudoers(via visudo).

Jetzt kann sich jeder Benutzer entweder sudoüber einen (weitergeleiteten oder lokalen) SSH-Agenten oder über sein Passwort authentifizieren. Es kann ratsam sein, Ihre Benutzer zu bitten, die Funktion so zu verwenden ssh-add -c, dass für jeden sudoAnruf mindestens eine Bestätigung erforderlich ist.

Tobias Kienzler
quelle
Zu einem verwandten Thema gibt es pam_ssh , mit dem Sie Ihre SSH-Passphrase anstelle der UNIX- Passphrase für die Anmeldung verwenden, einen Agenten automatisch starten und den Schlüssel hinzufügen können. Auf diese Weise haben Sie die Möglichkeit , sich einmal anzumelden .
Tobias Kienzler
1

Ja, es ist unglaublich unsicher und ermöglicht einem Benutzer auch den Zugriff auf die Kennwörter anderer Benutzer, aber da sie sudo haben, können Sie nicht viel tun.

Grundsätzlich machen Sie folgendes:

$ sudo -i

Jetzt sind wir root. Wir haben Zugang zu allem.

# passwd $username

$ username kann ein beliebiger Benutzername sein.

Geben Sie ein neues UNIX-Passwort ein:

Geben Sie das neue UNIX-Kennwort erneut ein: passwd: Kennwort erfolgreich aktualisiert

Boom, Passwort geändert. Auch hier unglaublich unsicher, weil man jeden ändern kann, aber es funktioniert, aber es funktioniert. Ich empfehle es nicht, sondern biete diese Antwort als Beispiel dafür an, was nicht zu tun ist.

jrg
quelle
sieht gut aus, aber können Sie näher erläutern, was hier vor sich geht?
KWD
4
Auf das sudo -iaktuelle Benutzerpasswort kann nicht verzichtet werden.
Kravemir
@Miro. Es ist wie du sagst. Trotzdem sudo bashkönnte ein Passwort bei diesem Setup ja in der /etc/sudoersDatei fehlen. Ich denke, @jrg konzentriert sich wie gesagt mehr auf das Problem der Unsicherheit mit sudo hier
humanityANDpeace
1
Ehrlich gesagt, müssen Sie nicht sudo -i, Sie können direkt zu sudo passwd $username@Miro springen , Sie müssen das aktuelle Benutzerpasswort nicht kennen. Sie müssen nur das Root - Passwort zu verwenden sudo wissen
Antony
0

Mit dem Kennwort soll sichergestellt werden, dass Hacker, die den Schlüssel eines Benutzers erhalten oder ein unbeaufsichtigtes Terminal finden, keinen Root-Zugriff erhalten. Aus diesem Grund würde ich keine Lösung empfehlen, die passwortloses sudo beinhaltet.

Ich schlage vor , Sie halten es einfach: vielleicht eine E - Mail einen Benutzer das Standardkennwort mit strengen Anweisungen , um es zu ändern , so schnell wie möglich, oder auch ein Skripts in ihrem einfügen .profileoder .loginoder etwas , so dass es ein neues Passwort an ihrem ersten Login verlangt. Es kann sich nach Abschluss des Vorgangs selbst deaktivieren und Sie können expectdas vorhandene Kennwort eingeben, damit die Benutzer es nicht mehr kennen müssen.

ams
quelle
0
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

> Dies sollte Benutzern ermöglichen, die sich nur mit öffentlichen Schlüsseln anmelden und keine Kennwörter für die Anmeldung verwenden können. Er wird jedoch gezwungen sein, das Passwort zu ändern, wenn er sich zum ersten Mal anmeldet ... aber ohne ihm vorher ein falsches Passwort mitteilen zu müssen ... Die Benutzer werden einfach aufgefordert, das Passwort zurückzusetzen und können es anschließend nur für sudo verwenden Sie können sich jedoch nicht mit diesem Kennwort anmelden (ssh). Beachten Sie, dass der Trick hier darin besteht, Benutzern kein Dummy-Passwort mitzuteilen, das sie dann zum Zeitpunkt der Anmeldung eingeben müssten, wenn sie ihr Passwort ändern müssten ... Kurz gesagt, keine Kommunikation von admin (root) an den eigentlichen Benutzer ist erforderlich.

hart
quelle