TL;DR:当我将文件从一个文件夹移动到另一个文件夹时,目标文件夹会丢失其可执行属性,使其及其内容无法访问
我有一个子文件夹,在处理父文件夹中的文档后,我的应用程序(Laravel,但问题似乎与它无关)需要将文档移动到子文件夹中。将文档从父文件夹移动到子文件夹后,子文件夹会丢失其“x”可执行属性,将其从“drwxrwx---”更改为“drw-rw----”。这使得内容无法访问并阻止将来向任一方向移动。当我尝试列出子文件中的文件时,它会报告每个文件的“ls:无法访问权限被拒绝”,然后列出它们的属性为“-?????????”。
如果我使用 chmod ug+x 重置访问权限 <
所有文件和文件夹均归我的用户和应用程序和用户所属的 nginx 组所有。
这让我彻底困惑了。我正在运行 CentOS Stream 9。如前所述,我已经消除了 SELinux 问题,但作为信息,所有文件都具有“system_u:object_r:httpd_sys_rw_content_t:s0”上下文,并且文件夹具有“unconfined_u:object_r:httpd_sys_rw_content_t:” s0' 上下文。
有什么想法吗?
更新
为了回应其中一条评论,执行标志会影响您创建文件和访问现有文件的权限(请参阅https://www.redhat.com/sysadmin/linux-file-permissions-explained)。第一次后(即权限改变后)失败的代码如下:
// Laravel Instruction
Storage::move($fileLocation, $dest)
// Native PHP Instruction
rename(Storage::path($fileLocation), Storage::path($dest))
## Bash Instruction
mv <<original path>>/<<filename>> <<destination path>>/
在每种情况下,指令都会工作一次,然后失败,直到我使用 chmod 手动重置目录权限
所以我解决了我的问题,但感觉很愚蠢。我还每分钟运行一个 cron 作业,将文件传输到文件夹中进行处理。这项作业设置了目标文件的所有权和权限,但我已将权限应用于所有内容,而不仅仅是文件。因为它每分钟都会发生,它似乎是由我的行为触发的。感谢 @NasirRiley 让我更仔细地查看权限的状态,这让我看到它们在我不采取任何操作的情况下发生了变化。