Warum wird dem Benutzer eine Shell für PostgreSQL gegeben?

10

cat /etc/passwd |grep postgre

postgres:x:115:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

apt-cache show postgresql

Package: postgresql
Priority: optional
Section: database
Installed-Size: 65
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PostgreSQL Maintainers <pkg-postgresql-public@lists.alioth.debian.org>
Architecture: all
Source: postgresql-common (136)
Version: 9.1+136
Depends: postgresql-9.1
Filename: pool/main/p/postgresql-common/postgresql_9.1+136_all.deb
Size: 5468
MD5sum: 34f5a1373ad5cd0b6f5aa3e7af06c9e7
SHA1: 6f271758bd51c23614b12fd63fb711ecfa43e9e5
SHA256: e8921a22b560e81f57a2a00001e31ba1036f67a8e7f151bf8f977b4919fc559a

Kann ich das Ersetzen /bin/bashmit /bin/false?

Smile.Hunter
quelle
1
@Jorge Castro Meine Frage ist, warum es eine Shell für den Benutzer von PostgreSQL gibt, nicht, warum es einen Benutzer für PostgreSQL gibt. Ich habe gesehen, dass andere Benutzer wie MySQL diese nicht benötigt haben.
Smile.Hunter

Antworten:

4

Es gibt eine Shell, weil wir PostgreSQL über die Befehlszeile als PostgreSQL-Benutzer verwenden.


quelle
Dann haben wir MySQL nicht als MySQL-Benutzer verwendet, oder? Ich denke, dass dieser Benutzer für das interne System verwendet wurde. Dies bedeutet, dass ich das nicht entfernen sollte, /bin/bashdamit mein PostgreSQL korrekt läuft. Trotzdem danke!
Smile.Hunter
2

Postgres wird aus Sicherheitsgründen unter einem speziellen Betriebssystembenutzerkonto ausgeführt. Dieses Konto wird auf Ihrem Computer erstellt, wenn das Installationsprogramm ausgeführt wird. Sofern es nicht in der Befehlszeile überschrieben wird, wird es als "postgres" bezeichnet.

Unter Unix-ähnlichen Betriebssystemen wie Linux und Mac OS X wird das Konto ohne Kennwort eingerichtet, und Benutzer müssen sich im Allgemeinen nie wieder darum kümmern. Quelle .

Es ist auch keine gute Praxis, die passwd-Datei manuell zu bearbeiten. Sie sollten den folgenden Befehl verwenden:

sudo passwd postgres
ThiagoPonte
quelle
2
Vielen Dank, aber ich möchte wissen, warum es eine "Bash-Shell" für einen Benutzer für PostgreSQL gibt. Ich habe erfahren, dass diese Berechtigung dazu führt, dass sich jemand bei postgresql angemeldet hat, und dann irgendwie eine Bash-Shell erhalten hat, die für einen Service-Benutzer keinen Sinn ergibt nie angemeldet bei. (Ich sehe andere Benutzer für andere Dienste wie Apache2, MySQL, sie benötigten keine Bash-Shell für ihre Benutzer)
Smile.Hunter
1

Wenn ein Serveradministrator verwendet sudound nicht darauf achtet, zu welcher Umgebung und zu welcher Aufgabe dies führt, werden bei der Arbeit an der Datenbank möglicherweise Dateien an unbeabsichtigten Speicherorten oder mit unbeabsichtigten Berechtigungen erstellt.

Durch das Zuweisen einer Shell zum Benutzer können sich Administratoren als Postgres anmelden und die Arbeit an der Shell dieses Benutzers ausführen. Das Herausfinden sudoals Quelle unspezifischer Serverfehlermeldungen wäre zu viel Kopfzerbrechen.

Wenn Sie dies nicht benötigen und sicher sind, dass Sie Postgres-Binärdateien niemals so fehleranfällig aufrufen, können Sie die Shell sicher entfernen:

usermod --shell /bin/false postgres

Denken Sie daran, dass Sie, wenn Sie in der Lage sind, root zu werden, immer noch jeder werden können, einschließlich Benutzer ohne gültige Shells:

su --shell /bin/bash postgres

Maßgebliche Quelle:

Manchmal möchten Sie sich als dieser Benutzer anmelden, um bestimmte Arten von speziellen Administrationen oder Korrekturen durchführen zu können. Wenn Sie beispielsweise jemals pg_resetxlog ausführen müssen, möchten Sie wahrscheinlich als postgres angemeldet sein, es sei denn, Sie sind sehr sicher, dass Ihre su- oder sudo-Aufrufe korrekt sind und die Berechtigungen des Datenbankverzeichnisses nicht auf seltsame Weise durcheinander bringen. - Peter Eisentraut, PostgreSQL-Entwickler

angst
quelle
Diese Antwort ist besser als die akzeptierte Antwort. Es ist nicht erforderlich, dass eine Anmeldeshell Befehle als bestimmter Benutzer ausführen kann (dies würde sudo tun). Viele Ubuntu-Subsysteme haben / bin / false oder / usr / sbin / nologin als Anmeldeshell und funktionieren einwandfrei, ohne neue Möglichkeiten für den Remotezugriff auf ein System zu eröffnen.
Arielf