Befehl ausführen, nachdem mit sudo zu einem anderen Benutzer gewechselt wurde

Befehl ausführen, nachdem mit sudo zu einem anderen Benutzer gewechselt wurde

Ich versuche, diesen Befehl auszuführen:

echo hello | sudo su - dp-postgres

Aber ich verstehe Folgendes:

-bash: line 1: hello: command not found

Ich habe auch Folgendes versucht:

sudo su - dp-postgres -c 'echo hello'

Dabei werde ich jedoch nach dem Passwort des aktuellen Benutzers gefragt.

Ich muss wechseln dp-postgresund anschließend einen beliebigen Befehl als dp-postgresBenutzer ausführen.

Antwort1

sudoDer Befehl ermöglicht die Ausführung eines Befehls als anderer Benutzer. Standardmäßig wird nach dem aktuellen Benutzerkennwort gefragt. Dies ist das normale Verhalten (der Benutzer muss natürlich auch über die sudoNutzungsberechtigung verfügen). Wenn Sie die Kennwortabfrage verhindern möchten, müssen Sie Ihre /etc/sudoersDatei ändern und eine Option verwenden NOPASSWD, mit der Sie sudo ausführen können, ohne nach einem Kennwort gefragt zu werden.

Für Ihren Befehl können Sie Folgendes tun:

sudo su - dp-postgres <<-EOF
  echo hello
EOF

Ihr zweiter Befehl sollte auch funktionieren:

sudo su - dp-postgres -c 'echo hello'

Hier ist ein Beispiel :

$ sudo su - -c 'echo hello; id'
hello
uid=0(root) gid=0(root) groups=0(root)

Auf meiner Seite ist kein Passwort erforderlich, da der ursprüngliche Benutzer in der sudoGruppe ist und ungefähr Folgendes hat:

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

In der /etc/sudoersDatei.

Antwort2

Wie bereits an anderer Stelle beschrieben, sudoermöglicht dieser Befehl einem entsprechend autorisierten Benutzer, einen Befehl als jemand anderes auszuführen. Standardmäßigjemand anderesist root, kann aber (vorbehaltlich Autorisierung) jeder beliebige Benutzer sein. Außerdem sudowird standardmäßig nach dem Passwort des aktuellen Benutzers gefragt.

echo helloWenn Sie den Befehl als Benutzer ausführen möchten dp-postgres, können Sie Folgendes tun:

sudo -u dp-postgres echo hello

Wenn Sie die Anmeldeumgebung einrichten müssen, geben Sie Folgendes ein -i:

sudo -iu dp-postgres echo hello

rootBeachten Sie, dass diese beiden Beispiele nicht zuerst auf den Benutzer und dann auf den Benutzer ändern dp-postgres. Sie können also einen benutzerdefinierten Eintrag einrichten, sudoersum diesem dp-postgresBenutzer Zugriff zu gewähren, aber nicht auf root. Dies ist eine gute Lösung für eine Mehrbenutzerumgebung, in der der Zugriff auf rooteingeschränkt und/oder verwaltet werden soll. (Ich stelle jedoch fest, dass Sie bereits Zugriff auf haben root, sodass Sie durch einen zweiten, restriktiveren Eintrag nichts gewinnen.)

verwandte Informationen