Attempt to write a readonly database - Django w/ SELinux error

后端 未结 8 1872
粉色の甜心
粉色の甜心 2020-12-07 18:32

I have a CentOS server on which I have Apache, Django, Django CMS and mod_wsgi. My Django project files are stored in the /srv directory and I have SELinux tur

8条回答
  •  情话喂你
    2020-12-07 19:16

    This issue is caused by SELinux. After setting file ownership just as you did, I hit this issue. The audit2why(1) tool can be used to diagnose SELinux denials from the log:

    (django)[f22-4:www/django/demo] ftweedal% sudo audit2why -a
    type=AVC msg=audit(1437490152.208:407): avc:  denied  { write }
          for  pid=20330 comm="httpd" name="db.sqlite3" dev="dm-1" ino=52036
          scontext=system_u:system_r:httpd_t:s0
          tcontext=unconfined_u:object_r:httpd_sys_content_t:s0
          tclass=file permissive=0
        Was caused by:
        The boolean httpd_unified was set incorrectly. 
        Description:
        Allow httpd to unified
    
        Allow access by executing:
        # setsebool -P httpd_unified 1
    

    Sure enough, running sudo setsebool -P httpd_unified 1 resolved the issue.

    Looking into what httpd_unified is for, I came across a fedora-selinux-list post which explains:

    This Boolean is off by default, turning it on will allow all httpd executables to have full access to all content labeled with a http file context. Leaving it off makes sure that one httpd service can not interfere with another.

    So turning on httpd_unified lets you circumvent the default behaviour that prevents multiple httpd instances on the same server - all running as user apache - messing with each others' stuff.

    In my case, I am only running one httpd, so it was fine for me to turn on httpd_unified. If you cannot do this, I suppose some more fine-grained labelling is needed.

提交回复
热议问题