H00035: Zugriff auf "file.php" verweigert, wie kann ich SELinux richtig einrichten?

615
ReynierPM

Ich habe in den letzten Tagen mit dieser Ausgabe zu kämpfen und kann bis jetzt keine Lösung finden. Das Problem in wenigen Worten ist (Fehlermeldung):

H00035: Zugriff auf index.php wurde verweigert, weil für eine Komponente des Pfads Suchberechtigungen fehlen

Wo läuft diese App?

  • Der Host ist Windows 10
  • Dies ist eine VM, die in VirtualBox ausgeführt und von Vagrant verwaltet wird
  • CentOS Linux Release 7.5.1804 (Core)
  • Apache / 2.4.33 (IUS)
  • PHP 7.2.6 (Nein, das ist wichtig, aber nur für den Fall)
  • SELinux: Erzwingen

Was ich bisher ausprobiert habe:

  • Lief die folgenden Befehle in der Box: Hat es funktioniert? NEIN ( hier gefunden )

    find /var/www -type d -exec chmod 755 {} \; find /var/www -type f -exec chmod 664 {} \; 
  • Lief die folgenden Befehle in der Box: Hat es funktioniert? NEIN ( hier gefunden )

    chcon -R -t httpd_sys_content_t /var/www 

Habe alles hier drin versucht, es hat funktioniert? NO .

Was habe ich ausprobiert und funktioniert? SELinux deaktivieren !!! Es ist also sicher eine SELinux-Fehlkonfiguration.

Berechtigungen bei /var/wwwsieht wie folgt aus:

# namei -mo /var/www/api/public/index.php f: /var/www/api/public/index.php dr-xr-xr-x root root / drwxr-xr-x root root var drwxrwxr-x vagrant vagrant www drwxrwxr-x vagrant vagrant api drwxrwxr-x vagrant vagrant public -rwxrwxr-- vagrant vagrant index.php 

Was kann ich sonst noch versuchen, um das Problem zu beheben? Ich weiß, der einfache Weg wäre "Deaktivieren von SELinux", aber ich möchte es nicht tun, es wäre besser zu lernen, wie man die Dinge richtig macht :)

Diese Box wurde mit Puphpet erstellt und ich kann sie teilen. Lassen Sie mich wissen, wenn Sie es zu Testzwecken benötigen.

UPDATE # 1:

@ hbruijns Antwort brachte mich auf die Idee, den Besitzer von vagrantApache zu wechseln, www-dataund das H00035ist weg, jedoch habe ich einen neuen.

// Before synced_folder: folder1: owner: vagrant group: vagrant source: ../../www/html target: /var/www sync_type: default  // After synced_folder: folder1: owner: www-data group: www-data source: ../../www/html target: /var/www sync_type: default 

Der Fehler, wie er gerade ist:

(13) Genehmigung verweigert: [Client 192.168.50.1:2048] AH00529: /var/www/api/public/.htaccess pcfg_openfile: Die htaccess-Datei kann nicht geprüft werden / 'ist ausführbar

Dies ist die Ausgabe von @ hbruijns Antwort:

# ls -lZ /var/www/ drwxrwxr-x. www-data www-data system_u:object_r:vmblock_t:s0 api/ -rwxrwxr--. www-data www-data system_u:object_r:vmblock_t:s0 index.html* 

Ich habe den gleichen Befehl noch einmal ausgeführt: find /var/www -type f -exec chmod 664 {} \;Er hat jedoch nichts geändert, was bedeutet, dass die Berechtigungen die gleichen bleiben wie zuvor.

Irgendwelche Ideen?

0

2 Antworten auf die Frage

1
HBruijn

Das Problem beruht wahrscheinlich auf der Tatsache, dass Sie einen Teil des Host-Dateisystems als / var / www-Daten in Ihrer VirtualBox-VM verfügbar machen.

Offensichtlich verfügt Windows nicht über die erforderlichen Dateiattribute, um SELinux-Kontexte bereitzustellen.

Daher verwendet Ihre VM stattdessen einen Standardsicherheitskontext.

Der Standardsicherheitskontext für ein "unbekanntes" Dateisystem ist kein Kontext, der gut zum Ausführen eines Webservers passt.
Überprüfen Sie mit ls -lZ /var/www/. Dein Webserver braucht so etwas

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html 

und derzeit bekommen Sie wahrscheinlich etwas anderes wie:

drwxrwxrwx. vagrant vagrant system_u:object_r:vmblock_t:s0 /var/www/api 

Sie können versuchen, den korrekten SELinux-Kontext als Mount-Option manuell zu erzwingen:

mount -o remount,context="system_u:object_r:httpd_sys_content_t:s0" /var/www 

und wenn das wie beabsichtigt funktioniert (überprüfen Sie mit ls -Z), können Sie wahrscheinlich hinzufügen, dass die Mount-Optionen / etc / fstab oder Ihre Vagrant-Datei sind

Der Befehl schlägt fehl: # mount -o remount, context = "system_u: object_r: httpd_sys_content_t: s0" / var / www unbekannt mount-Option relatime` nicht sicher, wie er behoben werden kann ReynierPM vor 5 Jahren 0
Könnten Sie sich auch mein Update im OP ansehen? ReynierPM vor 5 Jahren 0
0
JoeWalt

restorecon -vRF /var/wwwstellt den Standardsicherheitskontext für alle Dateien unter / var / www wieder her. Wenn Sie die selinux-Richtlinien nicht geändert haben, sollte dies behoben werden. Wenn Sie die Dateien an eine andere Stelle verschoben haben, können Sie diese Kontexte folgendermaßen ändern:

semanage fcontext -a -e /var/www /somewhere/www restorecon -vRF /somewhere/www 

In Ihrem Fall sollte dies nicht notwendig sein, da / var / www bereits Standard-Labels (z. B. Kontexte) definiert hat, ein anderes Verzeichnis jedoch nicht. Daher müssen Sie diese ändern und dann anwenden. Sie können mit einer Idee von Pfadnamen Kontext Zuordnungen erhalten grep www /etc/selinux/targeted/contexts/files/file_contexts,

Außerdem wirkt sich chmod nur auf diskretionäre Steuerelemente (Dateiberechtigungen) aus, nicht auf die obligatorischen Steuerelemente (Richtlinien) von selinux. Beide müssen richtig sein, damit es funktioniert, aber wenn Sie Selinux deaktiviert haben und es funktioniert hat, sollten Sie es nicht noch einmal tun müssen.

Darüber hinaus sollte / var / log / messages alle selinux-Fehler protokollieren und Ihnen mitteilen, welches Objekt den Zugriff blockiert. Wenn Sie eine temporäre 'setenforce 0' ausführen, wechselt selinux in den permissiven Modus, sodass alle Aktionen funktionieren. Sie erhalten jedoch weiterhin die Protokollfehler, die Sie alle beheben können, bevor Sie sie wieder einschalten. Wenn dies fehlschlägt, schauen Sie sich die Installation der Pakete setroubleshoot und setroubleshoot-server an, wodurch Sie noch mehr Informationen erhalten.