Wie bringe ich SELinux dazu, Apache und Samba im selben Ordner zuzulassen?

26

In der Konfiguration, die ich eingerichtet habe, möchte ich Samba und Apache den Zugriff auf / var / www erlauben. Ich kann einen Kontext festlegen, der den Samba-Zugriff erlaubt, aber dann hat httpd keinen Zugriff. Die Verwendung von setenforce auf 0 beseitigt Probleme, sodass ich weiß, dass es sich um SELinux handelt.

Außerdem: Wie kann ich den Kontext eines Ordners anzeigen und kann ein Ordner mehrere Kontexte haben?

(CentOS)

Joshua Enfield
quelle
Haben Sie versucht, die boolesche Option von system-config-selinux zu verwenden?

Antworten:

39

Zunächst können Sie mit ls -Z den Kontext von etwas mit ls anzeigen

[root@servername www]# ls -dZ /var/www
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www

Zweitens gibt es zwei Möglichkeiten, Samba und Apache Zugriff auf dasselbe Verzeichnis zu gewähren.

Die einfache Möglichkeit besteht darin, Samba überall Lese- / Schreibzugriff zu gewähren:

setsebool -P samba_export_all_rw 1

Es ist einfach, leicht und beeinträchtigt keine seltsamen Eigenschaften von SELinux.

Wenn Samba uneingeschränkten Zugriff auf alle Verzeichnisse haben soll und nur / var / www ändern möchte, versuchen Sie Folgendes:

chcon -t public_content_rw_t /var/www
setsebool -P allow_smbd_anon_write 1
setsebool -P allow_httpd_anon_write 1

Dadurch erhalten sowohl Samba als auch Apache Schreibzugriff auf alle Verzeichnisse mit dem Kontext public_content_rw_t. Beachten Sie, dass chcon nur / var / www ändert. Alle neuen Verzeichnisse, die unter / var / www erstellt wurden, sind public_content_rw_t, jedoch keine vorhandenen Verzeichnisse wie / var / www / html oder / var / www / manual. Wenn Sie alles ändern möchten, fügen Sie ein -R zu chcon hinzu:

chcon -R -t public_content_rw_t /var/www

Sie können diese CentOS-Wiki-Seite durchsehen, um Hinweise auf andere SELinux-Booleans zu erhalten.

David
quelle
Ich habe es versucht und es beklagt sich, dass ein Kontext bereits definiert ist.
Joshua Enfield
Du hast recht, es sieht so aus, als hätten sich die Dinge geändert, seit ich das letzte Mal mit SELinux rumgespielt habe. Ich werde meine Antwort mit einigen anderen Optionen aktualisieren.
David
3
@ Haben Sie meinen Hintern gerettet. Wir sehen uns morgen bei der Arbeit.
Joel E Salas
Ich wollte erwähnen, dass, wenn Ihr Webroot in einer Samba-Freigabe verschachtelt ist, Sie den Kontext auch in den übergeordneten Verzeichnissen festlegen müssen. Zum Beispiel:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Greg Sheremeta
1
Vielen Dank, ich hatte mit etwas Ähnlichem zu kämpfen, aber mit FTP, und alles funktioniert nach dem Ausführensetsebool -P ftpd_full_access=1
Giorgiline
9
SHARING FILES
   If you want to share files with multiple domains (Apache,  FTP,  rsync,
   Samba),  you can set a file context of public_content_t and public_content_rw_t.
   These context allow any of the above domains  to  read  the
   content.   If  you want a particular domain to write to the public_con‐
   tent_rw_t   domain,   you   must   set   the    appropriate    boolean.
   allow_DOMAIN_anon_write.  So for samba you would execute:

       setsebool -P allow_smbd_anon_write=1

Beispielsweise:

semanage fcontext -a -t public_content_rw_t '/var/www(/.*)?'
restorecon -R /var/www
setsebool -P allow_smbd_anon_write 1
hm2k
quelle