当我使用 PHP 的
move_uploaded_file
函数将文件上传到目录时,这些文件具有标签 httpd_sys_rw_content_t
并继承父目录的 ACL。如果我将 PHP 配置为使用自定义创建的临时目录,上传的文件将改为标记为httpd_tmp_t
并丢失 ACL。
是什么原因导致这种情况发生?
临时目录位于
/var/www/project/tmp
。它的模式为 1777,标签为 tmp_t
.
上传目录位于
/var/www/project/uploads
,PHP进程可写,标签为httpd_sys_rw_content_t
。在其中创建的文件也具有此标签并继承其父级的 ACL,除了这种奇怪的情况。
我会说这是将文件从一个位置移动到另一个位置的结果,但为什么它不这样做
/tmp
?
有一个文件转换说当类型为
httpd_t
的进程在类型为tmp_t
的目录中创建文件时,它应用类型httpd_tmp_t
.
如果您希望在此目录中创建的文件为
httpd_sys_rw_content_t
类型,则应将此类型设置为目录:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/project/tmp(/.*)?"
restorecon -RF /var/www/project/tmp