ACLs und SELinux-Kontexte sind völlig unterschiedlich. Es gibt ein gutes Tutorial hier für CentOS
Um zu sehen, ob SELinux tatsächlich Ihren Zugriff blockiert, verwenden Sie dies sestatus
$ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28
Enforcing
In meiner Ausgabe heißt es, dass SELinux Out-of-Context-Zugriffe aktiv blockiert.
Stellen Sie SELinux vorübergehend auf permissive using ein # sudo setenforce Permissive
$ sudo setenforce Permissive [sudo] password for trogdor: $ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: permissive Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28
Der permissive Modus weist Sie immer noch auf Verstöße gegen den SELinux-Kontext hin, blockiert sie jedoch nicht. Dies ist ein guter Weg, um zu prüfen, ob SELinux tatsächlich das Problem ist. Wenn dies der Fall war und jetzt alles funktioniert, setzen Sie SELinux wieder auf Erzwingen mit sudo setenforce Enforcing
. (Nebenbei bemerkt ändern Änderungen an SELinux mit setenforce den Neustart nicht).
Wenn SELinux das Problem ist, müssen Sie den richtigen Kontext für die Skripts finden oder vielleicht eine einfache Korrektur mit einem Boolean.
Wenn Sie sich in Ihrem Home-Verzeichnis befinden, kann es genauso einfach sein, einen SELinux-Boolean einzustellen. Zum Anzeigen von Booleschen Objekten gibt es hier eine Beschreibung von CentOS-Booleans , aber ich stelle fest, dass das unten stehende Beispiel für user_exec_content nicht dort aufgeführt ist. Ein praktischeres Werkzeug für boolesche Beschreibungen ist semanage boolean -l
# getsebool -a | grep exec ... user_exec_content --> off ... #sudo semanage boolean -l ... user_exec_content (off, off) Allow user to exec content ...
Das erste Aus zeigt seinen aktuellen Status an, dass es derzeit deaktiviert ist. Beim nächsten Ausschalten wird der Standardwert angezeigt. Dies bedeutet, dass er nach dem Neustart oder der Neusprache des Dateisystems immer noch deaktiviert ist.
In diesem Fall verwenden Sie #setsebool -P user_exec_content on
das Flag -P, um die boolesche Änderung auch nach Neustarts zu übernehmen
Wenn es sich um ein Kontextproblem handelt, sind gute Kontexte viel angenehmer, da sie intuitiver sind. Es scheint Versuch, Irrtum und Erfahrung zu sein, was mit den SELinux-Booleschen tatsächlich was tut, zum Beispiel keine Ahnung, was user_exec_content tatsächlich tut.
Verwenden Sie das Flag -Z mit ls, um den Kontext Ihrer Dateien anzuzeigen, z. ls -alZ.
$ ls -alZ -rwxrwxr-x. trogdor trogdor unconfined_u:object_r:user_home_t:s0 backup.sh
Hier ist user_home_t der Kontext für backup.sh. Angenommen, Sie haben ein anderes Verzeichnis mit den richtigen Kontexten zum Ausführen von Skripts. Sie können diesen Kontext mithilfe des folgenden Befehls in das Verzeichnis ./scripts spiegeln:
# chcon -R --reference /onethatworks ./scripts
Um zu überprüfen, wurde die Änderung verwendet ls -alZ ./scripts
restorecon -Rv ./scripts
sollte das Dateisystem neu benennen und alle Dateien und Verzeichnisse rekursiv in die aktualisierten Kontexte umbenennen. In diesem Fall werden lediglich das Skriptverzeichnis und dessen Inhalt erstellt.
Wenn dies funktioniert, überstehen die hier vorgenommenen Änderungen den Neustart nicht, und Sie können die folgenden Änderungen verwenden, um die Änderungen dauerhaft zu machen.
# semanage fcontext -a -s system_u -t <context_that_worked> "./scripts(/.*)?
Eine weitere Option zum Verwalten von SELinux ist die Installation, policycoreutils-gui
damit Sie durch Eingabe auf eine Selinux-Konfigurations-GUI zugreifen können # system-config-selinux
. Durch das Filtern mit 'script' habe ich festgestellt, dass viele Skripte bin_t als Kontext verwenden. Sie können damit auch den Erzwingungsmodus ändern. Meine Skripte in meinem Home-Verzeichnis user_home_t
laufen problemlos mit, aber ich vermute, Sie sind woanders, wenn Sie diese Probleme haben.