我正在尝试创建一个 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