mercoledì 6 agosto 2014

Selinux e Apache su CentOs

Cercando di far funzionare l''uploader di JQuery mi sono trovato in un comportamento strano che non era giustificato dai permessi sui file e sulle directory. Nonostate tutti i permessi del file system fossero corretti non veniva scritto niente sul disco del server. Il sospetto e' ricaduto immediatamente su Selinux





questo lo stato (ovvero attivo)

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
----------------------------------------------------------------------

se disattivo temporaneamente tutto Selinux i file vengono salvati nella cartella di upload
setenforce 0

non ho voglia pero' di disabilitare tutto Selinux e lo riattivo
setenforce 1

una occhiata con il seguente comando mostra i permessi di scrittura negati al demone http
aureport --avc | tail 
----------------------------------------------------------------------
18. 06/08/2014 14:01:01 ? system_u:system_r:init_t:s0 0 (null) (null) (null) unset 535
19. 06/08/2014 14:01:08 httpd system_u:system_r:httpd_t:s0 2 dir write unconfined_u:object_r:httpd_sys_content_t:s0 denied 540
20. 06/08/2014 14:01:52 httpd system_u:system_r:httpd_t:s0 2 dir write unconfined_u:object_r:httpd_sys_content_t:s0 denied 542
21. 06/08/2014 14:02:15 httpd system_u:system_r:httpd_t:s0 2 dir write unconfined_u:object_r:httpd_sys_content_t:s0 denied 544
22. 06/08/2014 14:02:15 httpd system_u:system_r:httpd_t:s0 2 dir add_name unconfined_u:object_r:httpd_sys_content_t:s0 denied 544
23. 06/08/2014 14:02:15 httpd system_u:system_r:httpd_t:s0 2 file create system_u:object_r:httpd_sys_content_t:s0 denied 544
24. 06/08/2014 14:02:15 httpd system_u:system_r:httpd_t:s0 2 file write system_u:object_r:httpd_sys_content_t:s0 denied 544
----------------------------------------------------------------------

per avere qualche suggerimento ho usato

grep httpd_sys_content /var/log/audit/audit.log | audit2allow
----------------------------------------------------------------------
#============= httpd_t ==============
allow httpd_t httpd_sys_content_t:dir { write add_name };
allow httpd_t httpd_sys_content_t:file { write create setattr };
----------------------------------------------------------------------
che indica di abilitare in scrittura httpd

girando un po' per Google e' consigliato di abilitare i seguenti comandi selinux nel caso che sviluppino webapp

setsebool -P httpd_enable_cgi on
setsebool -P httpd_unified on
setsebool -P httpd_builtin_scripting on

a questo punto l'uploader funziona con Selinux attivato

altrimenti il metodo proposto sul wiki di Selinux e' il seguente

grep httpd _sys_content /var/log/audit/audit.log | audit2allow -M apache_selinux
semodule -i apache_selinux.pp