Redhat

為 systemd 腳本創建 selinux 上下文?

  • February 5, 2021

我正在嘗試創建一個執行我編寫的自定義腳本的 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

任何想法,將不勝感激。謝謝!

將您的腳本移出使用者的主目錄。SELinux 正確地抱怨試圖執行位於使用者主目錄中的系統服務。

使用更標準的位置,例如/usr/local/bin

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

當然,編輯單元文件以匹配。

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

引用自:https://serverfault.com/questions/1052453