为 systemd 脚本创建 selinux 上下文?

为 systemd 脚本创建 selinux 上下文?

我正在尝试创建一个 systemd 服务来执行我编写的自定义脚本。这只是一个我与 systemd 计时器一起使用的备份脚本。当我尝试在 systemd 文件中执行一些简单的东西,如“/usr/bin/free”或类似的东西时,它运行完美。但是,当我尝试执行我的脚本“/root/scripts/mybackupscript.sh”时,它失败了:

Main process exited, code=exited, status=203/EXEC

如果我将 selinux 设置为 permissive,它将毫无问题地启动我的脚本。

所以我知道 selinux 限制 systemd 执行我的脚本。但我不知道如何使用 selinux。如何创建 selinux 上下文以允许 systemd 执行我的脚本?

示例:此 systemd 文件运行无问题:

[Unit]
Description=Logs system statistics to the systemd journal
Wants=myMonitor.timer

[Service]
Type=oneshot
ExecStart=/usr/bin/free

[Install]
WantedBy=multi-user.target

但是这个脚本失败了(除非我将 selinux 设置为 permissive,在这种情况下它可以正常执行):

[Unit]
Description=Logs system statistics to the systemd journal
Wants=myMonitor.timer

[Service]
Type=oneshot
ExecStart=/root/scripts/mybackupscript.sh

[Install]
WantedBy=multi-user.target

任何想法都值得感激。谢谢!

答案1

将脚本移出用户的主目录。SELinux 正确地抱怨尝试执行位于用户主目录中的系统服务。

使用更标准的位置,例如/usr/local/bin

install -m755 /root/scripts/mybackupscript.sh /usr/local/bin

当然还要编辑单元文件来匹配。

ExecStart=/usr/local/bin/mybackupscript.sh

相关内容