我试图在/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
我也尝试过使用chcon
and semanage
(文档)但没有任何成功
chcon -R -t postgresql_db_t /home
semanage fcontext -a -t postgresql_db_t /home
如果有人知道如何在不完全禁用 SELinux 的情况下做到这一点,我真的很想知道。
显然,对抗 SELinux 不是正确的出路,所以我放弃了我想要实现的目标,但学习起来非常有趣(我以前从未听说过 SELinux)。即使我的回答只是解释根本原因而没有给出解决方案,我认为这比“相信我,兄弟,不要这样做”...