Kurz und gut - Episode #14 Ein anderer Benutzer für PostgreSQL
Für PostgreSQL-Cluster gibt es den Benutzer postgres. Dieser wird bei der Installation mit angelegt und unter diesem Betriebssystembenutzer laufen dann die PostgreSQL-Cluster. Aber kann man einen PostgreSQL-Cluster auch unter einem anderen Benutzer laufen lassen?
Auf unserem Server läuft bereits ein PostgreSQL 15-Cluster unter dem Benutzer postgres.
dbserver:/home/postgres [PG14]$ ps -ef |grep postmaster |grep -v grep
postgres122710 13:44 ?00:00:01 /usr/pgsql-15/bin/postmaster -D /pgdata/PG15
Wie schaffen wir es jetzt, dass wir einen weiteren PostgreSQL-Cluster mit der gleichen Software, aber unter einem anderen Benutzer, laufen lassen?
Dazu müssen wir diesen neuen Benutzer erst einmal anlegen:
[root@dbserver ~]# groupadd -g 54333 postgres15
[root@dbserver ~]# useradd -d /home/postgres15 -g 54333 -m -u 54333 postgres15
Kontrolle:
[root@dbserver ~]# grep postgres /etc/group postgres:x:54332:barman postgres15:x:54333: [root@dbserver ~]# grep postgres /etc/passwd postgres:x:54332:54332::/home/postgres:/bin/bash postgres15:x:54333:54333::/home/postgres15:/bin/bash
Dann müssen wir das PGDATA-Verzeichnis für den neuen Cluster anlegen und die Zugriffsrechte entsprechend setzen:
[root@dbserver ~]# mkdir /pgdata/PG15A
[root@dbserver ~]# chown postgres15:postgres15 /pgdata/PG15A
Anlegen des Clusters als postgresql15:
[postgres15@dbserver ~]$ /usr/pgsql-15/bin/initdb --pgdata=/pgdata/PG15A The files belonging to this database system will be owned by user "postgres15". This user must also own the server process. The database cluster will be initialized with locale "en_US.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /pgdata/PG15A ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Europe/Berlin creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok initdb: warning: enabling "trust" authentication for local connections initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: /usr/pgsql-15/bin/pg_ctl -D /pgdata/PG15A -l logfile start
In der postgresql.conf des neuen Cluster müssen wir vor dem ersten Start noch Anpassungen vornehmen:
1. Änderung des Ports (auf einen noch nicht verwendeten Port):
port = 5437
# (change requires restart)
2. Anpassung des Socket-Verzeichnisses (da der Benutzer postgres15 in das Standard-Verzeichnis /var/run/postgresql nicht schreiben kann)
unix_socket_directories = '/tmp'
Anschließend können wir den neuen PostgreSQL-Cluster starten:
[postgres15@dbserver PG15A]$ /usr/pgsql-15/bin/pg_ctl start -D /pgdata/PG15A waiting for server to start....2023-10-31 15:31:19.863 CET [64869] LOG: redirecting Abmeldenput to logging collector process 2023-10-31 15:31:19.863 CET [64869] HINT: Future Abmeldenput will appear in directory "log". done server started
Kontrolle:
[postgres15@dbserver PG15A]$ ps -ef |grep 15 |grep pgdata |grep -v grep postgres 1227 1 0 13:44 ? 00:00:01 /usr/pgsql-15/bin/postmaster -D /pgdata/PG15 postgre+ 64869 1 0 15:31 ? 00:00:00 /usr/pgsql-15/bin/postgres -D /pgdata/PG15A
Wird der Cluster über einen systemd-Service gestartet (z. B. beim Booten des Servers), so muss die Service-Konfiguration noch angepasst werden:
root# systemctl edit postgresql-15
Einzufügen sind folgende Zeilen:
dbserver:/etc/systemd [PG15]$ cat /etc/systemd/system/postgresql-15.service.d/override.conf [Service] Environment=PGDATA=/pgdata/PG15A User=postgres15 Group=postgres15
Damit steht dem automatischen Start des neuen Clusters beim Systemstart unter dem Benutzer postgres15 nichts mehr im Wege.
Fazit
Es ist einfach möglich, einen PostgreSQL-Cluster unter einem anderen Benutzer als dem standardmäßigen Benutzer postgres laufen zu lassen. Wichtig sind dabei vor allen Dingen die richtigen Zugriffsrechte auf das Cluster-Verzeichnis PGDATA und das Socket-Verzeichnis.
Seminarempfehlung
POSTGRESQL ADMINISTRATION DB-PG-01
ZUM SEMINARPrincipal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare