Unterschiedliches SSH / Login-Passwort vom SUDO-Passwort

9

Ich möchte ein anderes Passwort verwenden, um meinen Benutzer in den Sudo-Status zu versetzen, als das Passwort, mit dem ich mich bei meinem Konto anmelde (entweder über GUI, Shell oder SSH). Ist das möglich?

BEARBEITEN: Da das Festlegen des Root-Passworts die Anmeldung als Root ermöglichen würde, ist dies kein guter Weg. Ich würde ein benutzerspezifisches Sudo-Passwort anstelle eines systemweiten Root-Passworts bevorzugen.

Richard
quelle
1
Können Sie das näher erläutern - warum möchten Sie das tun?
Doug Harris
1
Ich bin der Meinung, dass sich die Frage gut genug erklärt, aber das Ziel ist es, die Anmeldung über lange, schwierige Passwörter sicher zu machen und dann ein anderes Passwort für den Sudo-Zugriff zu verwenden, damit die Kompromittierung des Benutzerkontos nicht automatisch den Sudo-Zugriff ermöglicht.
Richard
Ich habe gehört, dass es möglich ist, Sudo über rsa / dsa-Schlüssel zu machen, die jede gewünschte Passphrase haben können.
Rob

Antworten:

2

von Mann Sudoers:

rootpw          If set, sudo will prompt for the root password instead of the
                password of the invoking user.  This flag is off by default.

runaspw         If set, sudo will prompt for the password of the user defined
                by the runas_default option (defaults to root) instead of the
                password of the invoking user.  This flag is off by default.

Oder Sie können einfach passwortbasierte Anmeldungen über ssh vollständig verbieten. Für die Remote-Anmeldung ist ein mit Passphrasen verschlüsselter Schlüssel erforderlich. Dann können Sie das Passwort für sudo verwenden. Die relevante Option ist

von man sshd_config

 PasswordAuthentication
         Specifies whether password authentication is allowed.  The default
         is “yes”.
Chas. Owens
quelle
Danke für deine Hilfe, Chas. Owens. Ich befürchte, ein Nebeneffekt Ihrer Lösung ist, dass das Root-Konto ein Passwort hat und es daher möglich ist, sich als root anzumelden, was keine Tür ist, die ich offen lassen möchte. Ich würde ein benutzerspezifisches Sudo-Passwort anstelle eines systemweiten Root-Passworts bevorzugen.
Richard
Sie können die Root-Anmeldung auch über sshd_config deaktivieren
Rob
1

suchst du das stattdessen bei sudoers man?

   targetpw        If set, sudo will prompt for the password of the user
                   specified by the -u option (defaults to root) instead of the
                   password of the invoking user. 
johnshen64
quelle
Danke für deine Hilfe, johnshen64. Ich befürchte, ein Nebeneffekt Ihrer Lösung ist, dass das Root-Konto ein Passwort hat und es daher möglich ist, sich als root anzumelden, was keine Tür ist, die ich offen lassen möchte. Ich würde ein benutzerspezifisches Sudo-Passwort anstelle eines systemweiten Root-Passworts bevorzugen.
Richard
Dieser Benutzer muss kein Root-Benutzer sein. Er verwendet standardmäßig nur root, wenn Sie ihn nicht angeben. Sie können es experimentieren, um zu sehen, ob es für Sie wäre. Unix ist ziemlich offen und wenn diese für Sie immer noch nicht funktionieren, können Sie sogar ein Wrapper-Skript schreiben oder sogar sudo ändern (wenn Sie c kennen), um genau das zu tun, was Sie wollen.
Johnshen64
@ johnshen64 Ich denke, er lehnt die Tatsache ab, dass für alle Benutzer das gleiche Passwort verwendet wird.
Chas. Owens
Ich verstehe, aber für jeden Benutzer kann ein Administrator erstellt werden, z. B. $ {USER} foradmin, sodass ein Benutzer immer -u $ {USER} foradmin angibt. Um dies zu erzwingen, muss sudo jedoch noch durch ein benutzerdefiniertes Skript ersetzt werden.
Johnshen64
1

Wie wäre es, wenn Sie die Kennwortanmeldung über SSH deaktivieren und die Anmeldung mit öffentlichem Schlüssel zulassen, bei der Sie Ihr schwer zu erratendes Kennwort festlegen können. Dann kann das lokale Passwort kürzer sein und von sudo verwendet werden.

Abgesehen davon müssen Sie /etc/pam.d/sudoein anderes (oder zusätzliches) Modul konfigurieren , um auf den ersten Blick pam_dialpassdas zuzulassen, was Sie benötigen.

Sie können auch die LDAP-Konfiguration für das eine und die lokalen Kennwörter für das andere konfigurieren. Es hängt alles davon ab, wie viele Änderungen Sie vornehmen können und wollen, welche Module verfügbar sind usw.

Bram
quelle
Danke für deine Hilfe, Bram. Ihr erster Vorschlag würde funktionieren, außer dass die Authentifizierung mit öffentlichen Schlüsseln möglicherweise nicht möglich ist, es sei denn, Sie sind bereit, Schlüsseldateien zu übertragen.
Richard
1

LÖSUNG 1: newgrp

Eine einfache Möglichkeit, Ihren Anwendungsfall anzusprechen, besteht darin, ihn :NOPASSWDin Kombination mit einer Gruppe und einem Gruppenpass zu verwenden:

Fügen Sie Sudoern eine Zeile hinzu:

%rudo   ALL=(ALL:ALL) NOPASSWD:ALL

Erstellen Sie eine passwd-geschützte Gruppe:

groupadd rudo
gpasswd  rudo # Enter passwd

Wenn Sie sich jetzt als nicht privilegierter Benutzer anmelden (vorausgesetzt, Sie sind noch nicht in der rudoGruppe), melden Sie sich bei der rudoGruppe an. An diesem Punkt werden Sie zur Eingabe des Kennworts aufgefordert.

login user
newgrp rudo

Jetzt können Sie ohne sudoKennwort ausführen , solange Sie in der Gruppe angemeldet bleiben.


LÖSUNG 2: runaspw

Ein besserer, möglicherweise sicherer Weg, dies zu tun, verwendet runaspw. runaspwist mit der runas_defaultOption verknüpft, sodass Sie diese Option ebenfalls hinzufügen müssen.

Angenommen, Sie haben bereits den Standardgruppeneintrag %sudo:

%sudo   ALL=(ALL:ALL) ALL

Fügen Sie diese Zeilen zur sudoers-Datei hinzu:

Defaults:%sudo  runas_default=sudo
Defaults:%sudo  runaspw

Fügen Sie nun einen neuen sudoBenutzer mit einem Passwort hinzu:

useradd sudo -d /nonexistent -s /usr/sbin/nologin -MNr
passwd sudo

Jetzt werden Benutzer der Sudo-Gruppe aufgefordert, das Passwort des Sudo-Benutzers einzugeben, aber nur Benutzer in der Sudo-Gruppe können sudo ausführen (im Gegensatz zur obigen Gruppenlösung, bei der jeder in der Gruppe oder mit dem Gruppenpasswud sudo kann).

Ein kleines Problem ist, dass der Standard-Runas-Benutzer jetzt sudoso ist, dass Sie als sudo als root explizit root angeben müssen:

sudo -u root <cmd>

Aber einfach genug, um einen alias ( alias sudo='sudo -u root') - oder indirekten sudo-Befehl zu definieren .

Spinkus
quelle