3 Minuten Lesezeit (535 Worte)

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

Principal Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Montag, 07. Oktober 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.