如何授予 CentOS 上 postgres 对 /var/run 的访问权限?

如何授予 CentOS 上 postgres 对 /var/run 的访问权限?

在我的 中安装postgres-9.3via后,其默认配置将套接字放入目录中。我有(也安装了 via),默认情况下由 管理,并启用了选项。这意味着在 上运行的任何 Web 应用程序都无法访问,因此请连接到。我已更改 postgres 配置,因此它应该将其套接字放入 中,就像 中一样。yumCentOS 7/tmphttpdyumsystem.dPrivateTmphttpd/tmppostgres/var/run/postgresUbuntu

现在的问题是,postgres没有足够的权限写入/var/run。我的第一个想法是这样做:

chown postgres:postgres /var/run/postgres

但是/var/run重启后目录会被清理,所以这个方法行不通。我的问题是:

如何以能够持续重启的方式授予用户/var/run/postgres访问权限?postgres我不想更改套接字位置,也不想更改httpdsystem.d配置。我只想postgres能够写入/var/run/postgres。任何帮助都将不胜感激。

答案1

你确定该套接字只存在/tmp于 CentOS 7 上吗?

Fedora 的最新版本有两个套接字副本,一个在/run/postgresql(这是/var/run/postgresql链接解析后的实际位置),这是现代系统上的首选版本,另一个在,/tmp供期望在那里找到它的传统客户端使用。

无论如何,如果您确实需要确保在启动时创建目录,那么请使用一个tmpfiles.d文件,例如/usr/lib/tmpfiles.d/postgresql.confFedora 中附带的文件,其中包含:

d /var/run/postgresql 0755 postgres postgres -

答案2

目录/var/run是 CentOS 7 中的符号链接。PostgreSQL/run的套接字目录是/run/postgresql。它是一个临时目录,在启动时创建。

随着 systemd 的出现,一种名为systemd-tmp文件已被引入来管理临时文件和目录。

Systemd-tmpfiles 在启动期间创建临时目录并设置其所有者、组和权限。CentOS 7 在 中具有针对 PostgreSQL 的 systemd-tmpfiles 配置/usr/lib/tmpfiles.d/postgresql-96.conf。默认情况下,该文件包含以下行:

d /run/postgresql 0755 postgres postgres -

您可以通过编辑该行来更改权限、所有者和组。但是,进行此类更改的推荐方式不是直接编辑 下的文件/usr/lib/tmpfiles.d/,而是将配置文件复制到/etc/tmpfiles.d/,然后在该副本中进行必要的更改。

答案3

只需将您想要的命令放入 /etc/rc.local 文件中,它们将在每次启动过程结束时执行。

相关内容