Upon enabling SELINUX, I noticed that the postgres service hadn't started. When I checked the logs I noticed the following error message:
[root@webserver data]# systemctl status postgresql.service ● postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sun 2018-07-22 23:18:52 UTC; 8s ago Process: 2903 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=1/FAILURE) Process: 2897 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Jul 22 23:18:51 webserver.novalocal systemd[1]: Starting PostgreSQL database server...
Jul 22 23:18:51 webserver.novalocal pg_ctl[2903]: postgres cannot access the server configuration file "/var/lib/pgsql/data/postgresql.conf": Permission denied
Jul 22 23:18:52 webserver.novalocal pg_ctl[2903]: pg_ctl: could not start server Jul 22 23:18:52 webserver.novalocal systemd[1]: postgresql.service: control process exited, code=exited status=1 Jul 22 23:18:52 webserver.novalocal systemd[1]: Failed to start PostgreSQL database server. Jul 22 23:18:52 webserver.novalocal systemd[1]: Unit postgresql.service entered failed state. Jul 22 23:18:52 webserver.novalocal systemd[1]: postgresql.service failed.
To view the SELinux security context:
[root@webserver var]# ls -Z /var/lib/pgsql/data/ drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 base drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 global drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_clog -rw-------. postgres postgres system_u:object_r:unlabeled_t:s0 pg_hba.conf -rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_ident.conf drwx------. postgres postgres unconfined_u:object_r:postgresql_log_t:s0 pg_log drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_multixact drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_notify drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_serial drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_snapshots drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_stat_tmp drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_subtrans drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_tblspc drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_twophase -rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 PG_VERSION drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_xlog
-rw-------. postgres postgres system_u:object_r:default_t:s0 postgresql.conf
-rw-------. postgres postgres system_u:object_r:postgresql_db_t:s0 postmaster.opts
We can see that the postgresql.conf file was incorrectly assigned a type of default_t.
I noticed there were several other files in the postgresql data folder that had a similar problem. To fix the type for all files under the data folder run the following command:
chcon -R system_u:object_r:postgresql_db_t:s0 /var/lib/pgsql/data/**
Rechecking the SElinux contexts:
[root@webserver var]# ls -Z /var/lib/pgsql/data/
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 base
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 global
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_clog
-rw-------. postgres postgres system_u:object_r:unlabeled_t:s0 pg_hba.conf
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_ident.conf
drwx------. postgres postgres unconfined_u:object_r:postgresql_log_t:s0 pg_log
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_multixact
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_notify
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_serial
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_snapshots
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_stat_tmp
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_subtrans
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_tblspc
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_twophase
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 PG_VERSION
drwx------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_xlog
-rw-------. postgres postgres system_u:object_r:postgresql_db_t:s0 postgresql.conf
-rw-------. postgres postgres system_u:object_r:postgresql_db_t:s0 postmaster.opts
Now that it's fixed, turn on postgresql
service postgresql start