Legen Sie das sudo-Passwort anders fest als das Login-Passwort

29

Als privilegierter Benutzer versuche ich, das sudoPasswort auf ein anderes als das beim Login verwendete zu setzen.

Ich habe einige Nachforschungen angestellt, aber keine Antwort gefunden. Hat sudoUnterstützung , die Art der Konfiguration?

Wenn Sie jemals Ihr Passwort verlieren, verlieren Sie alles. Jemand könnte sich anmelden und sich rootmit demselben Passwort bewerben .

sudohat die Option, nach einem rootPasswort zu fragen, anstatt nach einem aufgerufenen Benutzerpasswort ( rootpw), aber das Teilen eines rootPassworts ist definitiv keine Option. Deshalb haben wir es eingerichtet sudo.

Ich habe config 2FAin der Vergangenheit, es hat super funktioniert, aber auch den Automatisierungszweck zunichte gemacht. Wenn Sie beispielsweise einen privilegierten Befehl mit einem expectSkript auf einem Dutzend Server ausführen möchten, 2FAkönnen Sie dies durch Hinzufügen nicht tun.

Die nächste Lösung, die ich gefunden habe, besteht darin, den privaten SSH-Schlüssel und die Setup-Passphrase nur mit einem Schlüssel zuzulassen, der sich vom sudo(Anmelde-) Passwort unterscheidet. Trotzdem ist es nicht bequem, weil Sie sich in einer Notsituation nicht mit einem PC anmelden können, auf dem dieser Schlüssel nicht vorhanden ist.

Shâu Shắc
quelle
1
Warum brauchst du das genau? Vielleicht liegt das Problem woanders. Wäre es nicht besser, eine Dual-Factor-Authentifizierung für die Anmeldung bei einem System mit einem privilegierten Konto und dann 'NOPASSWD' zu haben, damit sudo nicht nach einem Passwort fragt? Dann sollten Sie natürlich ein separates lokales Notfallkonto mit sicherem Passwort haben, um sich anmelden zu können, wenn das Netzwerk ausgefallen ist (kein SSH-Zugriff).
Jirib

Antworten:

30

Wenn Sie anstelle des Benutzerpassworts nach dem Root-Passwort fragen möchten, können Sie verschiedene Optionen eingeben /etc/sudoers. rootpwInsbesondere wird es nach dem root-Passwort fragen. Es gibt runaspwund targetpwauch; Einzelheiten finden Sie auf der Hilfeseite sudoers (5).

Ansonsten führt sudo die Authentifizierung (wie alles andere auch) über PAM durch. PAM unterstützt die anwendungsspezifische Konfiguration. Sudos Konfiguration ist in (zumindest auf meinem Debian-System) /etc/pam.d/sudound sieht so aus:

$ cat sudo 
#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

Mit anderen Worten, es wird standardmäßig wie alles andere im System authentifiziert. Sie können diese @include common-authZeile ändern und PAM (und damit sudo) eine alternative Kennwortquelle verwenden lassen. Die nicht auskommentierten Zeilen in common-auth sehen ungefähr so ​​aus (standardmäßig ist dies anders, wenn Sie z. B. LDAP verwenden):

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

Sie können z. B. Ihre alternativen Kennwörter pam_userdb.soanstelle von verwenden pam_unix.sound in einer Berkeley DB-Datenbank speichern.

Beispiel

Ich habe das Verzeichnis /var/local/sudopass, Eigentümer / Gruppe root:shadow, Modus erstellt 2750. Darin habe ich eine Passwort-Datenbankdatei erstellt, die verwendet wurde db5.1_load(das ist die Version von Berkeley DB, die unter Debian Wheezy verwendet wird):

# umask 0027
# db5.1_load -h / var / local / sudopass -t hash -T passwd.db
anthony
WMaEFvCFEFplI
^D

Dieser Hash wurde mit mkpasswd -m desdem Passwort "password" generiert . Sehr sicher! (Leider scheint pam_userdb nichts besseres zu unterstützen als das alte crypt(3)Hashing).

Bearbeiten /etc/pam.d/sudound entfernen Sie nun die @include common-authZeile und platzieren Sie diese stattdessen:

auth    [success=1 default=ignore]      pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

Beachten Sie, dass pam_userdb .dbder übergebenen Datenbank eine Erweiterung hinzufügt , sodass Sie die Option auslassen müssen .db.

Laut Dannysauer in einem Kommentar müssen Sie möglicherweise die gleiche Bearbeitung auch vornehmen /etc/pam.d/sudo-i.

In sudo muss ich jetzt passwordanstelle meines echten Anmeldekennworts Folgendes verwenden:

anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nes hat funktioniert'
[sudo] Passwort für Anthony: passwordRETURN

es funktionierte
derobert
quelle
Stellen Sie sicher, dass Sie auch "sudo-i" konfigurieren, das in neueren Versionen von sudo häufig für "sudo -i" verwendet wird (wenn der Anbieter nichts geändert hat).
Dannysauer
Können Sie die PAM-Konfiguration näher erläutern?
Shâu Shắc
@ ShâuShắc Ich habe ein Beispiel hinzugefügt, einschließlich PAM-Konfigurationsänderungen.
Derobert
Vielen Dank. Aber ich finde db51-utils nirgends in RedHat / Centos oder Quellen, ist es nur in Debian-Varianten verfügbar?
Shâu Shắc
3
Das "the ancient crypt(3)hashing" auf modernen Versionen von glibc unterstützt sha-512, z. mkpasswd -m sha-512. pam_userdb.so kann damit gut umgehen.
Andrew Domaszek
6

Für Redhat / Centos kann die Anforderung mit den folgenden Schritten erfüllt werden:

Benutzerdefinierten Benutzer erstellen und übergeben:

# db_load -t hash -T /usr/local/etc/passwd.db
user
pass
^d

Bearbeiten Sie die Datei sudo pam.d so, dass sie wie folgt aussieht:

$ cat /etc/pam.d/sudo

auth            required        pam_userdb.so db=/usr/local/etc/passwd
account         required        pam_userdb.so db=/usr/local/etc/passwd
password        include         system-auth

session         optional        pam_keyinit.so revoke
session         required        pam_limits.so

Ich bin immer noch auf der Suche nach dem Weg zur Konfiguration, so dass nur ein bestimmter Benutzer / eine bestimmte Gruppe mit dieser benutzerdefinierten Methode authentifiziert werden muss, andere können immer noch mit der normalen System-Authentifizierungsmethode authentifiziert werden. Kann mir jemand einen Rat geben?

Shâu Shắc
quelle
Dies sollte mit der vollständigen Aktionssyntax in PAM möglich sein. zB [user_unknown=ignore,success=ok,default=bad]... aber du musst damit spielen (und die PAM-Dokumente lesen), um es richtig zu machen
derobert
Dies kann auch erreicht werden, indem pam_succeed_ifein Modul übersprungen wird, wenn sich der Benutzer in einer Liste von Gruppen befindet, oder wenn dies nicht der Fall ist, zwei Module übersprungen werden.
dannysauer
Also generell so etwas: /// auth [success = ignore default = 1] pam_succeed_if.so user in danny: frank /// auth ausreichend danny_frank_module.so /// auth ausreichend not_danny_frank.so
dannysauer
3

Ich glaube nicht, dass sudo ein solches Setup unterstützt. Mit der Aufforderung zur Eingabe des sudo-Kennworts soll sichergestellt werden, dass es sich bei der Person, die den sudo-Befehl ausgibt, um dieselbe Person handelt, die angemeldet ist. Die einfachste Möglichkeit besteht darin, den derzeit angemeldeten Benutzer aufzufordern, sich erneut zu authentifizieren.

Mit anderen Worten, der Zweck der Aufforderung zur Eingabe des sudo-Passworts besteht nicht darin, Autorität , sondern Identität herzustellen . Anhand der ermittelten Identität und der sudo-Konfiguration kann entschieden werden, ob der betreffende Benutzer über die erforderlichen Berechtigungen oder Zugriffsrechte verfügt.

ein CVn
quelle
3
Sudo nicht (außer in dem Fall, dass Sie das Root-Passwort oder einen bestimmten Benutzer oder das Passwort des Zielbenutzers fragen möchten), PAM jedoch. Und sudo verwendet PAM.
Derobert
1

Sie befürchten, dass Ihr Kontopasswort weitergegeben werden kann. Die Lösung besteht darin, das Anmeldekennwort nicht so zu verwenden, dass es offengelegt werden kann. Mit ssh wird das Passwort auf der Leitung verschlüsselt, also ist es in Ordnung. Die Benutzer deaktivieren die Kennwortauthentifizierung mit ssh, um Angriffe auf das Erraten von Kennwörtern zu verhindern und nicht um die Vertraulichkeit von Kennwörtern zu schützen. Wenn Sie für irgendetwas anderes dasselbe Kontokennwort verwenden, stellen Sie sicher, dass Sie einen sicheren, verschlüsselten Kanal verwenden, um das Kennwort bereitzustellen. Wenn Sie sich Sorgen über einen Keylogger machen, verwenden Sie keine nicht vertrauenswürdigen Computer mehr, um sich anzumelden.

Wenn jemand Ihr SSH-Passwort erhalten kann, kann er wahrscheinlich auch das alternative Sudo-Passwort erhalten. Sie sollten also Zeit investieren, um Ihre Verbindungen sicherer zu machen, als Zeit damit zu verbringen, die Dinge nur zur Illusion von mehr Sicherheit komplizierter zu machen.

dannysauer
quelle
0

Ich habe keinen sofortigen Zugriff auf ein System, auf dem ich dies testen und die Details herausarbeiten kann, aber ich habe eine Idee:

  • (Angenommen, Ihr normales Anmeldekonto lautet shau.)
  • Erstellen Sie ein zweites Konto: shau2. (Ich bin nicht sicher, ob Sie möchten, dass es die gleiche UID wie hat shau.)
  • Konfigurieren Sie shau2mit NOPASSWD Sudo-Berechtigungen.
  • Richten Sie einen Alias ​​oder ein Shell-Skript ein su shau2 -c sudo "$@". Dies sollte nach shau2dem Passwort fragen . Wenn das richtig eingegeben wurde, wird es ausgeführt sudoals shau2 (was nicht nach einem Passwort fragen sollte).
  • Entfernen Sie shaudie sudo-Berechtigungen von.

Leider müssten Sie dies für jeden Benutzer wiederholen, der über sudo-Berechtigungen verfügt.

Scott
quelle
0

Vielen Dank an Shâu Shắc für die Antwort ! Diese Lösung funktioniert auch mit LinuxMint 17.1 Cinnamon 32bit (ich habe nur das db-utilPaket installiert , um es auszuführen db_load).

Aber ich bin sehr verwirrt mit der resultierenden passwd.dbDatei. Ich habe das Gleiche wie in Ihrer Antwort getan (aber mit David und Jones sehen sie auffälliger aus):

# db_load -t hash -T /usr/local/etc/passwd.db
david
jones
^d

Eingegebene Anmeldeinformationen werden jedoch in der Hash-Datei als einfacher Text gespeichert:

# grep 'jones.*david'  /usr/local/etc/passwd.db
Binary file /usr/local/etc/passwd.db matches

Sie können auch sehen , david und Jones über mcedit :

Bildbeschreibung hier eingeben

Ja, es ist möglich, die Berechtigungen von einzuschränken /usr/local/etc/passwd.db. Benutzername und Passwort, die im Klartext gespeichert sind, sind jedoch schlecht.


Selbst mit einem separaten sudo- Passwort gibt es einige potenzielle Sicherheitslücken (standardmäßig im Distributions-Setup). Daher gilt für su kein separates Passwort (daher ist es möglich, die Root-Sitzung mit suund dem Login-Passwort zu starten ). Auch ein separates Passwort wird vom Policy Kit nicht beachtet (es ist möglich, Synaptic mit einem synaptic-pkexecPasswort zu starten und sich anzumelden. Dann Pakete löschen ...). Diese Probleme können durch zusätzliche Optimierung der Konfigurationsdateien behoben werden.

Im Allgemeinen scheint es, dass ein sicheres, separates Sudo-Passwort nur mit Hilfe eines benutzerdefinierten PAM-Moduls (möglicherweise vergleicht ein solches Modul das Passwort und den SHA-512-Hash, der aus einer Datei gelesen wurde) oder der SELinux-Funktionalität erreicht werden kann.

PS: Entschuldigung, es sollte ein Kommentar sein. Aber es geht als Antwort wegen des Textformats. Danke für Ihr Verständnis.

flaz14
quelle