У меня есть папка загрузки для моего веб-приложения: /disk2/app/uploads
.
ls -Z возвращает:
drw-r--r--. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 uploads
ls -Z /
возвращает:
drwxrwxrwx. root root system_u:object_r:file_t:s0 disk2
ls -Z /disk2
возвращает:
drwxr-xr-x. apache apache unconfined_u:object_r:file_t:s0 app
многое из чего я получил от Вот
когда я бегу is_writable('/disk2/app/uploads')
в php он возвращается false
Я испробовал все возможные варианты, чтобы понять это.
Соответствующие журналы аудита:
type=AVC msg=audit(1510944045.012:202923): avc: denied { getattr } for pid=14017 comm="httpd" path="/disk2/app/uploads/12222/206/1496103427-20170526_151922.jpg" dev=sdb ino=17826039 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:file_t:s0 tclass=file
type=AVC msg=audit(1510944045.012:202924): avc: denied { write } for pid=14017 comm="httpd" name="uploads" dev=sdb ino=2097155 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:file_t:s0 tclass=dir
Вам необходимо настроить контексты файлов SELinux так, чтобы они были правильно заданы при создании файлов. Файлы в целом наследуют fcontext своего родительского каталога, поэтому вам нужно указать это правильно. Что-то вроде
semanage fcontext -a -t httpd_sys_rw_content_t "/disk2/app/uploads(/.*)?"
restorecon -Rv /disk2/app/uploads
должно быть в фокусе.