
sudo -u user1 command ...
Wie kann ich erreichen, dass statt des Passworts des aktuellen Benutzers sudo
das Passwort von abgefragt wird ?user1
Hintergrund: Ich möchte dies in einem Git-Hook verwenden, der vom Benutzer ausgeführt wird git
, so etwas wie
echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"
Ich habe versucht, su www -c "command ..."
aber es sagt mir
remote: su: must be run from a terminal
wenn ich in das Repository pushe.
Antwort1
Sie möchten das Passwort eines Benutzers nicht wirklich unverschlüsselt im Dateisystem speichern, wenn Sie es vermeiden können. Es hängt ein wenig davon ab, wie sehr Sie sich auf die Portabilität des Codes in Git verlassen und was Sie im lokalen Dateisystem speichern können. Ich würde empfehlen, sudo mit NOPASSWD mit einem möglichst eingeschränkten Befehl zu verwenden. Sie würden einen Eintrag in /etc/sudoers erstellen, der etwa so aussieht:
git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite
Dabei deploySite
werden verschiedene Prüfungen durchgeführt, um sicherzustellen, dass der Benutzer in das richtige Verzeichnis geht und das deploy.sh
Skript keine verdächtigen Informationen enthält.
Wenn Sie darauf vertrauen, dass der Benutzer „git“ das Konto des Benutzers „www“ verantwortungsvoll nutzt, können Sie NOPASSWD:ALL verwenden. Damit gestatten Sie aber grundsätzlich jedem, der Zugriff auf das Hochladen auf „git“ hat, den Zugriff, alle gewünschten Befehle als Benutzer „www“ auszuführen.
Aber um die ursprüngliche Frage zu beantworten
Sie können sudo so einrichten, dass es nach dem Passwort des Zielbenutzers fragt, statt nach dem des aufrufenden Benutzers. Sie würden einen sudoers-Eintrag wie folgt einfügen:
Defaults:git targetpw
Dann muss der Benutzer „git“ beim Ausführen das Kennwort des Benutzers „www“ eingeben sudo -u www ...
.