Redhat
為 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
任何想法,將不勝感激。謝謝!
將您的腳本移出使用者的主目錄。SELinux 正確地抱怨試圖執行位於使用者主目錄中的系統服務。
使用更標準的位置,例如
/usr/local/bin
:install -m755 /root/scripts/mybackupscript.sh /usr/local/bin
當然,編輯單元文件以匹配。
ExecStart=/usr/local/bin/mybackupscript.sh