web-dev-qa-db-fra.com

Créer un contexte SELINUX pour SystemD Script?

J'essaie de créer un service SystemD qui exécute un script personnalisé que j'ai écrit. C'est juste un script de sauvegarde que j'utilise avec une minuterie SystemD. Lorsque j'essaie d'exécuter quelque chose de simple dans le fichier SystemD comme "/ usr/bin/free" ou quelque chose comme ça, ça marche parfaitement. Cependant, lorsque j'essaie d'exécuter mon script "/root/scripts/mybackupscript.sh", il échoue avec:

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

Si je mets Selinux sur permissif, cela commencera mon script sans problème.

Je sais donc que Selinux restreint SystemD d'exécuter mon script. Mais je ne sais pas comment utiliser Selinux. Comment créer un contexte SELINUX pour permettre à SystemD d'exécuter mon script?

Exemple: ce fichier SystemD ne fonctionne aucun problème:

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

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

[Install]
WantedBy=multi-user.target

Mais ce script échoue (sauf si je fixe SELINUX sur permissive, auquel cas il s'exécute bien):

[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

Toute idée serait appréciée. Merci!

2
user615862

Déplacez votre script du répertoire de base de l'utilisateur. SELINUX se plaint à juste titre d'essayer d'exécuter des services système situés dans les annuaires de la maison des utilisateurs.

Utilisez un emplacement plus standard, tel que /usr/local/bin:

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

Et bien sûr, éditez le fichier de l'unité pour correspondre.

ExecStart=/usr/local/bin/mybackupscript.sh
1
Michael Hampton