在 pg_hba.conf 文件上创建符号链接后 PostgreSQL 无法工作

在 pg_hba.conf 文件上创建符号链接后 PostgreSQL 无法工作

我试图在/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和 I 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/)时,它才起作用,这是完全无用的(例如/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文件上保留符号链接?

感谢您的回答

答案1

好吧,经过对这个问题的更多研究,结果发现根本原因来自SELinux

我设法通过完全禁用 SELinux 让它工作(显然不推荐)

/usr/bin/setenforce Permissive

我也尝试过使用chconand semanage(文档)但没有任何成功

chcon -R -t postgresql_db_t /home
semanage fcontext -a -t postgresql_db_t /home

如果有人知道如何在不完全禁用 SELinux 的情况下做到这一点,我真的很想知道。

显然,对抗 SELinux 不是正确的出路,所以我放弃了我想要实现的目标,但学习起来非常有趣(我以前从未听说过 SELinux)。即使我的回答只是解释根本原因而没有给出解决方案,我认为这比“相信我,兄弟,不要这样做”...

相关内容