我有一个用于我的网络应用程序的上传文件夹:/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
答案1
您需要配置 SELinux 文件上下文,以便在创建文件时正确设置它们。文件通常会继承其父目录的 fcontext,因此您需要正确指定它。例如
semanage fcontext -a -t httpd_sys_rw_content_t "/disk2/app/uploads(/.*)?"
restorecon -Rv /disk2/app/uploads
應該去奪诀。