Frage Wie deaktiviert man SELinux für Apache httpd nur auf meinem Fedora 14?


Folgend dieser Link Ich kann SELinux komplett von meinem Fedora 14 abschalten. Aber ich frage mich, wie ich SELinux nur für den httpd Daemon deaktivieren könnte? Ich habe kein system-config-selinux installiert und aufgrund der Firewall-Richtlinien muss ich nach den RPMs suchen pkgs.org um ein beliebiges Paket zu installieren. Gibt es einen Weg, das zu klären?

Bearbeiten:

Summary:

SELinux is preventing /opt/ibm/cognos/c10/cgi-bin/cognos.cgi "execute" access to
/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so.

Detailed Description:

SELinux denied access requested by /opt/ibm/cognos/c10/cgi-bin/cognos.cgi.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi is mislabeled.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi default SELinux type is bin_t, but its
current type is bin_t. Changing this file back to the default type, may fix your
problem.

If you believe this is a bug, please file a bug report against this package.

Allowing Access:

You can restore the default system context to this file by executing the
restorecon command. restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'.

Fix Command:

/sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:usr_t:s0
Target Objects                /opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so [
                              file ]
Source                        cognos.cgi
Source Path                   /opt/ibm/cognos/c10/cgi-bin/cognos.cgi
Port                          <Unknown>
Host                          mm2fedora.syd.cog
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.9.7-3.fc14
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Plugin Name                   restore_source_context
Host Name                     mm2fedora.syd.cog
Platform                      Linux mm2fedora.syd.cog 2.6.35.6-45.fc14.i686 #1
                              SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686
Alert Count                   18
First Seen                    Fri 15 Apr 2011 02:12:44 PM EST
Last Seen                     Fri 15 Apr 2011 02:33:11 PM EST
Local ID                      409e250f-049f-49c0-89f6-7155e4643868
Line Numbers                  

Raw Audit Messages            

node=mm2fedora.syd.cog type=AVC msg=audit(1302841991.999:22392): avc:  denied  { execute } for  pid=28242 comm="cognos.cgi" path="/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so" dev=dm-0 ino=138263 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

node=mm2fedora.syd.cog type=SYSCALL msg=audit(1302841991.999:22392): arch=40000003 syscall=192 success=no exit=-13 a0=0 a1=1bc08 a2=5 a3=802 items=0 ppid=27923 pid=28242 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="cognos.cgi" exe="/opt/ibm/cognos/c10/cgi-bin/cognos.cgi" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Wie empfohlen, führe ich den vorgeschlagenen Fix-Befehl aus: /sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi' viele Male aber leider. Indem ich SELinux vollständig deaktiviere, kann ich sehen, dass diese Web-App funktioniert. Ich recherchiere gerade selbst über dieses Thema, wie ich SELinux global aktivieren und nur für httpd deaktivieren kann. Das muss nicht der beste Ansatz sein, aber das ist nur ein Testfall, der für mich und mein Team in Ordnung wäre.

Der Hinweis, den ich von Fedora 13 bekommen habe SELinux FAQ ist hier Ich persönlich glaube, dass es einen Weg mit System-Config-Selinux gibt, ich kenne die Details einfach nicht ...


4
2018-04-15 05:13


Ursprung


unglaublich, wie Selinux oft eine Nervensäge sein kann. Es ist so kontraproduktiv! - Cyril N.


Antworten:


Für Fedora 14, wie in el6, kann man das http SELinux-Modul einfach entladen, indem man läuft

semodule -r httpd

Das wird wahrscheinlich dazu führen, dass httpd läuft initrc_t oder unconfined_t.

Wenn das für F14 nicht funktioniert, können Sie den SELinux-Boolean (den 'alten' Weg, von el5) wie folgt abschalten:

setsebool httpd_disable_trans 1

und benutzen

setsebool -P httpd_disable_trans 1

um es dauerhaft zu machen


3
2018-04-15 07:43



httpd_disable_trans existiert in F14 nicht. - Ignacio Vazquez-Abrams
Dann geh für Option 1 :) - wzzrd
Von der Abteilung für Sie-lernen-etwas-Alltägliches: Ich habe gestern gesehen, wie Dan Walsh eine Präsentation hielt, in der er die neue Art der Sperrung von Anwendungen für neuere Versionen von Fedora und EL6 erklärte. Sie legen keinen booleschen Wert mehr fest, um den Übergang zu deaktivieren (was manchmal eine Kaskade in booleschen Werten verursacht, die gesetzt werden muss, damit alles funktioniert), aber Sie setzen einen bestimmten Typ in den zulässigen Modus. Dazu führen Sie den Befehl 'semanage permissive -a TYPE' aus (in Ihrem Fall 'semanage permissive -a httpd_t'). Dadurch bleibt SELinux für httpd_t aktiviert, jedoch im permissiven Modus. - wzzrd
@wzzrd: Alter ... danke! Du solltest das wahrscheinlich irgendwo neu posten. Ich habe diese Informationen seit zwei Tagen nicht mehr gefunden. Das Web ist voll von den früheren Möglichkeiten, dies über Booleans zu tun. Wie auch immer, danke nochmal! - Alexandre Bourlier
@wzzrd Das sollte wirklich eine Antwort sein. Es ist in der Tat das aktuell Weg, dies zu tun. - Michael Hampton♦


Konvertieren meines früheren Kommentars in eine Antwort auf die populäre Nachfrage;)

Von der Abteilung für Sie-lernen-etwas-Alltägliches: Ich sah Dan Walsh geben   eine Präsentation gestern, in der er den neuen Weg der   Einschränkungen für Anwendungen in neueren Versionen von Fedora und   EL6. Sie legen keinen booleschen Wert mehr fest, um den Übergang zu deaktivieren (was   verursacht manchmal eine Kaskade in booleschen Werten, für die festgelegt werden muss   alles zu arbeiten), aber Sie geben einen bestimmten Typ in permissive Modus.   Dazu führen Sie den Befehl 'semanage permissive -a TYPE' aus (in   Ihr Fall 'semanage permissive -a httpd_t'). Dies lässt SELinux eingeschaltet   für httpd_t, aber im permissiven Modus. - wzzrd 20. Mai 11 um 8:45 Uhr


3
2017-12-12 14:26





Ich bin nicht sicher, wie Sie SELinux für einen einzelnen Dienst ausschalten - ich vermute, Sie können nicht.

Sie können runcon jedoch verwenden, um den Apache-Prozess so zu konfigurieren, dass er in einem unbeschränkten Kontext ausgeführt wird.

Sie können sich runcon als sudoers für selinux vorstellen. Sie können angeben, in welchem ​​Kontext ein Prozess ausgeführt werden soll.

Sie müssten Ihr Apache-Startskript ändern, indem Sie Folgendes hinzufügen:

runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

In den Teil des httpd Startskripts, das Apache aufruft.

Auf meinem Fedora FC14 Host würde ich diese Zeile ändern:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

So etwas zu lesen:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $httpd $OPTIONS

PS Ich habe dies nicht wirklich in meinem Apache Start-up-Skript getestet, also ist das obige raten, wo genau ich es setzen müsste, aber ich habe definitiv runcon verwendet, damit Prozesse zuvor unbeschränkt laufen können, also wird es funktionieren Sie müssen nur den richtigen Ort finden.


1
2018-04-15 06:54





Es gibt keinen booleschen Wert, um SELinux für httpd global zu deaktivieren. Nachdem du das gesagt hast, solltest du das lesen httpd_selinux(8)man-Seite für die relevanten Dateikontexte, die Sie verwenden sollten; in deinem Fall willst du httpd_sys_script_exec_t oder httpd_unconfined_script_exec_tund kann verwenden chcon um es vorübergehend zu testen, und semanage um es dauerhaft zu setzen.


1
2018-04-15 07:36





Die Frage ist nicht ganz klar - was genau ist deine Absicht?
Ich gehe davon aus, dass Sie nicht versuchen, den HTTP-Port zu öffnen, da dies mit der Firewall statt mit Selinux selbst geschehen würde.
Vielleicht möchten Sie also dem httpd-Daemon erlauben, in ein Verzeichnis zu schreiben, das nicht unter dem üblichen Dokumentenstamm steht?
Wenn dies der Fall ist, müssen Sie die Selinux-Berechtigungen lesen und für die Verzeichnisse festlegen, auf die Sie zugreifen möchten.
Hier ist ein Ort, um darüber zu lesen:
http://wiki.centos.org/HowTos/SELinux

Es ist relevant, weil sowohl Fedora als auch Centos mit Red Hat verwandt sind, also wird dies wahrscheinlich helfen.

[Bearbeiten]
Bitte versuchen Sie Folgendes:
chcon -t textrel_shlib_t ThePathToTheFile

Das hat PabloTwo in diesem Beitrag vorgeschlagen:
http://www.fedoraforum.org/forum/showthread.php?t=252552

Es wurde auch von IBM in diesem Post vorgeschlagen:
https://www-304.ibm.com/support/docview.wss?uid=swg21454550


1
2018-04-15 06:12



Meine Absicht ist es, SELinux laufen zu lassen, während ich die Funktion auf httpd deaktiviere, da es verhindert, dass meine Anwendung auf andere Moduldateien zugreift. Das heißt, mein CGI-Skript hat keinen Ausführungszugriff auf andere .so-Dateien, was für mich schwer zu beheben ist. - Michael Mao
Könnten Sie die genaue Fehlermeldung und auch die Ausgabe von "ls -Z xxx.so" posten? Wie der Artikel, den ich erwähnt habe, sagte, du könntest Selinux als "permissiv" anstatt als "deaktiviert" setzen, dann benutze die Logs, um zu sehen, was zu tun ist. Ich bitte Sie dringend, den oben erwähnten Artikel zu lesen. - Beel


Ich hatte auch das gleiche Problem, als ich GBrowse2 benutzte. GBrowse2 speichert temporäre Dateien in Nicht-Webroot-Speicherorten und legt Sperren für Sitzungen außerhalb der Webroot fest. Da GBrowse2 auf Apache läuft, erlaubt SELinux dint es httpd, auf Verzeichnisse außerhalb von Webroot zuzugreifen. Ich folgte dem Link im vorherigen Post:

" Hier ist ein Ort, um darüber zu lesen: http://wiki.centos.org/HowTos/SELinux "

Obwohl es nicht die vollständigen Anweisungen gibt, wie das Problem zu lösen ist, hat es mir sehr geholfen (Abschnitt 4: SELinux Access Control). Es gab mir eine Vorstellung davon, wie SELinux zwischen Webroot- und Nicht-Webroot-Dateien unterscheidet. Sie müssen den Typ des Nicht-Webroot-Ordners / der Datei in den Ordner ändern, der mit dem Prozesstyp httpd kompatibel ist. Dieser Typ kann mithilfe der Befehle festgelegt werden, die in den SELinux-Fehlerdetails angegeben sind (Befehle "semanage" und "restorecon"). Nachdem der Typ des Nicht-Webroot-Ordners korrigiert wurde, konnte der GBrowse2 problemlos neue Dateien im Ordner ohne Webroot erstellen, dessen Typ geändert wurde.


1
2017-11-08 23:31