我正在尝试在/var/lib/pgsql/data/pg_hba.conf
(Fedora 上的默认路径)上创建一个指向位于其他地方的真实文件的符号链接,例如/var/lib/pgsql/data/pg_hba.conf -> /home/pg_hba.conf
(此示例的命令:)sudo ln -sf /home/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf
。
我将/home/pg_hba.conf
权限 ( -rw-------
)、所有者 ( postgres
) 和组 ( postgres
) 设置为与原始文件一样/var/lib/pgsql/data/pg_hba.conf
,我什至尝试过chmod 777
。当我切换到用户postgres
和我cat /var/lib/pgsql/data/pg_hba.conf
(现在是一个符号链接)时,它成功地打印了文件的内容/home/pg_hba.conf
。
但是,当我尝试应用更改时,sudo systemctl restart postgresql
出现以下错误
postgresql.service 的作业失败,因为控制进程退出并显示错误代码。
有关详细信息,请参阅“systemctl status postgresql.service”和“journalctl -xeu postgresql.service”。
我检查了日志,但没有其他有用的信息。
只有当我将我的符号链接指向同一目录 ( /var/lib/pgsql/data/
) 中的一个文件时,它才有效,这完全没用 (ex: /var/lib/pgsql/data/pg_hba.conf -> /var/lib/pgsql/data/pg_hba.conf.bak
)
如果我指向其他任何地方它都不起作用,即使在/var/lib/pgsql
其中实际上是用户的主目录postgres
!
我是 Linux 的新手,所以我尝试用我的文件创建一个符号链接~/.bashrc
只是为了尝试(例如:)~./bashrc -> /home/.bashrc
我echo "TEST!"
在这个文件中写了一个并应用了新的配置. ~/.bashrc
并且它工作得很好,我的TEST!
已成功打印出来.
那么与 PostgreSQL 有什么关系呢?如何修复此错误并在pg_hba.conf
文件上保留符号链接?
谢谢你的回答
好吧,经过对这个问题的更多研究,原来根本原因来自SELinux。
我设法通过完全禁用 SELinux 使其工作(显然不推荐)
我也尝试过
chcon
和semanage
(文档)但没有成功如果有人知道如何在不完全禁用 SELinux 的情况下执行此操作,我真的很想知道。
显然,与 SELinux 作斗争不是正确的选择,所以我放弃了我想要实现的目标,但学习起来非常有趣(我以前从未听说过 SELinux)。即使我的回答只是解释根本原因而没有给出解决方法,我认为这比“相信我兄弟,不要这样做”更有建设性......