Frage Was ist der Unterschied zwischen Sudo su - postgres und sudo -u postgres?


PostgreSQL Benutzer Peer-Authentifizierung standardmäßig auf Unix-Sockets, wobei der Unix-Benutzer der gleiche wie der PostgreSQL-Benutzer sein muss. So benutzen Leute häufig su oder sudo werden die postgres Superuser.

Ich sehe oft Leute, die Konstrukte benutzen wie:

sudo su - postgres

eher, als

sudo -u postgres -i

und ich frage mich warum. Ähnlich habe ich gesehen:

sudo su - postgres -c psql

anstatt

sudo -u postgres psql

Ohne das Führen sudo das su Versionen wären sinnvoll, wenn Sie auf einer alten Plattform ohne wären sudo. Aber warum auf einem weniger als prähisorischen UNIX oder Linux würden Sie verwenden sudo su ?


25
2018-06-02 08:07


Ursprung


Verwandt auf Schwesterseite DBA Stack Exchange: Wechseln Sie Benutzer zu "Postgres" Benutzer auf MacOS Ergebnisse in "su: Sorry" Fehler - Basil Bourque


Antworten:


Vergessen sudo su

Es gibt keinen Nutzen für die Verwendung sudo suEs ist eine anachronistische Angewohnheit, von der man gewohnt war, sie zu benutzen su. Leute fingen an zu heften sudo im Vordergrund, als Linux-Distributionen kein Root-Passwort mehr einstellten und machten sudo Die einzige Möglichkeit, auf das root-Konto zuzugreifen. Anstatt ihre Gewohnheiten zu ändern, haben sie nur benutzt sudo su. (Ich war einer von ihnen bis vor relativ kurzer Zeit als ich Boxen mit benutzt habe sudoers configs zwang mich, meine Gewohnheit zu ändern).

Benutzen sudo -u

Für eine Login-Shell sudo -u postgres -i ist vorzuziehen sudo su - postgres. Es erfordert nicht, dass der Benutzer root Zugriff in hat /etc/sudoersSie brauchen nur das Recht, Nutzer zu werden postgres. Außerdem können Sie so bessere Zugriffskontrollen erzwingen.

Für die Ausführung von Befehlen

sudo -u postgres psql -c "SELECT 1"

ist der Alternative überlegen:

sudo su - postgres -c "psql -c \"SELECT 1\""

Dadurch müssen Sie Anführungszeichen und andere Shell-Metazeichen nicht doppelt entschlüsseln, ebenso wenig wie die anderen Sicherheitsvorteile, dass root nicht benötigt wird. Du wirst wahrscheinlich zufällig beim Schreiben landen:

sudo su - postgres -c psql -c "SELECT 1"

manchmal, das wird nicht richtig funktionieren.

Schließlich ist es viel einfacher, Umgebungsvariablen über zu setzen sudo, z.B.

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

als über su. (Hier die PATH Einstellung ist erforderlich, damit initdb kann das richtige finden postgres ausführbar).

So. Vergiss das su Befehl existiert. Du brauchst es nicht mehr. Um die Angewohnheit zu ändern, alias es zu etwas, das einen Fehler ausgibt. (Einige Init- und Paket-Setup-Skripts werden weiterhin verwendet su also kannst du es nicht entfernen, obwohl).

Siehe auch:


26
2018-06-02 08:07