Podczas pracy z Symfony na systemie z mandatową kontrolą dostępu można napotkać na wiele różnych problemów, które lądują w logach systemu jako tak zwane AVC – przykład:

type=AVC msg=audit(1225640678.663:110): avc: denied { create } for pid=7423 comm="httpd" name="config_config_handlers.yml.php" scontext=unconfined_u:syste

m_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file

type=AVC msg=audit(1225640678.663:110): avc: denied { write } for pid=7423 comm="httpd" name="config_config_handlers.yml.php" dev=sda3 ino=498416 scontext

=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file

type=SYSCALL msg=audit(1225640678.663:110): arch=c000003e syscall=2 success=yes exit=11 a0=7f1156ffc030 a1=241 a2=1b6 a3=635f6769666e6f63 items=0 ppid=7416 p

id=7423 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system

_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1225640678.664:111): avc: denied { setattr } for pid=7423 comm="httpd" name="config_config_handlers.yml.php" dev=sda3 ino=498416 sconte

xt=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file


Można sobie próbować z nimi radzić na kilka sposobów:
- wyłączyć SELinuksa - naprawdę niepolecane rozwiązanie, ale jak ktoś chce...
- przełączyć SELinuksa w tryb premissive - równie kiepskie rozwiązanie jak poprzednie
- przy każdym AVC zezwalać na określoną akcję za pomocą audit2allow - strasznie długa i żmudna robota
- spróbować zbudować politykę SELinuksa dla Symfony (raczej tylko dla ekspertów, nie wiem czy takie działanie ma większy sens)
- nadawać wszystkim plikom w projekcie określony kontekst za pomocą chcon -R -t httpd_sys_content_t Projekty/projekt (działa na reference policy i pochodnych Fedory/RHEL) - wadą jest to, że będziemy musieli powtarzać tę operację po utworzeniu nowych plików, inaczej serwer nie będzie miał do nich dostępu
- przełączyć domenę httpd_t w tryb premissive - semanage permissive httpd_t (działa tylko na nowych systemach z ostatnimi politykami i narzędziami czyli rawhide i zaktualizowana Fedora 9)

Mam nadzieję, że powyższe tipsy zaoszczędzą komuś trochę czasu smile.gif

(Mam wątpliwości, czy przenoszenie bajzlu z Windowsa na Linuksa ma jakiś większy sens, ale się jeszcze zobaczy...)