无法在 CentOS 8 上以非特权用户身份执行 systemd 服务

无法在 CentOS 8 上以非特权用户身份执行 systemd 服务

CentOS 7 和 8 在 systemd 和 selinux 方面可能存在变化,但我还不知道如何处理这个问题。

由于某些原因(跨发行版兼容),我们使用来自企业数据库. 安装程序在 CentOS 7 上工作正常但不再适用于 CentOS 8安装程序创建一个以用户 postgres(在我的情况下是 uid=1004)身份运行的 systemd 服务。

[Service]
Type=forking
TimeoutSec=120

User=postgres
Group=postgres
...

在安装程序结束时,使用 systemctl 启动服务。这在 CentOS 8 上现在失败了。当我执行 systemctl status 时,我看到了以下内容:

postgresql.service: Failed to execute command: Permission denied

在文件系统和用户权限方面一切都很好。

一旦我禁用 SELinux,它就开始工作了!

CentOS 7 上不需要这个。有人能告诉我在调用安装程序之前我可以做什么来使其执行正常吗?

附录

我可能找到了问题的真正原因。我正在安装到其他磁盘而不是根文件系统。如果我安装到根文件系统,安装程序就会开始工作。一旦 systemd 服务文件中的“ExecStart”指令的可执行文件位于另一个磁盘上,它就不再起作用。如何告诉系统允许这样做???

非常感谢你的启发。

答案1

不同的磁盘是否位于文件层次结构的不同部分?

强制使用 SElinux 会迫使您了解 selinux 以及如何创建文件上下文转换!尝试将例如 ntpd 的配置文件和 ntp 的日志文件更改为其他位置(例如:/services/ntpd/ntp.conf 和 /services/ntpd/ntp.log)会发生什么!

答案2

一周前,我终于找到了解决问题的方法。之前我的问题中没有提到这一点,因为我认为这无关紧要。

我当时正在安装到一个全新且空的单独磁盘。不是根文件系统。我发现在根文件系统上安装是可行的。

我然后做了

restorecon -r /新磁盘的挂载点

之后它就开始工作了!

我相信 CentOS 7 不需要这样做

答案3

您将层次结构从根目录(/)向下复制到当前安装的磁盘(即安装为 /tmp/tmp_mnt)?

restorecon -r 重置文件上下文...所以 ls -Z 是你的朋友

在 postgres 和 postgres 二进制文件的 systemd 单元文件上执行 ls -Z 很有趣。

centos7 和 centos8 之间的 SElinux 策略可能有所不同。

相关内容