CentOS 7 pg_ctl:无法访问目录“/var/lib/pgsql/data”:权限被拒绝

CentOS 7 pg_ctl: could not access directory "/var/lib/pgsql/data": Permission denied

PostgreSQL 10.6 和 CentOS 7

pg_ctl status
pg_ctl: could not access directory "/var/lib/pgsql/data": Permission denied`

如果 /var/lib/pgsql/data 拥有 postgres:postgres 的所有权,pg_ctl 不会访问它吗?

drwx------   3 postgres postgres   94 Nov 14 06:43 pgsql

如何在不产生漏洞的情况下修复此问题?为什么会抛出错误?

附加信息(编辑):

su - postgres
cd /var/lib
/var/lib/pgsql: drwx------  3 postgres postgres   94 Nov 14 06:43 pgsql
/var/lib/pgsql/10: drwx------ 4 postgres postgres  33 Nov 14 06:38 10
/var/lib/pgsql/10/data:  drwx------ 20 postgres postgres 4096 Nov 15 03:47 data

这需要很少的故障排除步骤来查明真正的问题。

  1. 在 Linux 中找到该位置的 user/owner 和文件权限:
Ls - al /var/lib/pgsql/data/

ls - al /var/lib/pgsql/

  1. 尝试换成postgres用户,访问1

    中的目录

    # su - postgres

下面的 links 应该填写几个步骤的空白来检查事情。在 #2 link 上,您没有移动目录,但您看到确保目录为 ready/accessible

的步骤

https://wiki.postgresql.org/wiki/First_steps

https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-16-04

更新

从评论来看,pg ctl 似乎是 运行 作为用户 x... 并且缺少足够的权限

在不太了解您的环境的情况下,最好让 postgres 成为 运行s pg ctl 的用户,因为它已经在做相关的事情了..

在 UNIX 中,每个进程 运行 具有启动可执行文件的用户的权限,而不是可执行文件的所有者(除非设置了 SETUID 标志).

所以谁拥有 pg_ctl 并不重要,但当您 运行 它时,您必须是用户 postgres