当我移动文件导致内容无法访问时,CentOS 目录会丢失其“x”可执行标志

问题描述 投票:0回答:1

TL;DR:当我将文件从一个文件夹移动到另一个文件夹时,目标文件夹会丢失其可执行属性,使其及其内容无法访问

我有一个子文件夹,在处理父文件夹中的文档后,我的应用程序(Laravel,但问题似乎与它无关)需要将文档移动到子文件夹中。将文档从父文件夹移动到子文件夹后,子文件夹会丢失其“x”可执行属性,将其从“drwxrwx---”更改为“drw-rw----”。这使得内容无法访问并阻止将来向任一方向移动。当我尝试列出子文件中的文件时,它会报告每个文件的“ls:无法访问权限被拒绝”,然后列出它们的属性为“-?????????”。

如果我使用 chmod ug+x 重置访问权限 <> 我可以再次访问文件,但当我执行另一个文件移动操作时,问题会再次出现。无论移动执行的方向如何,也无论我是在代码中执行还是仅在 shell 中使用 mv,问题都会出现。即使我禁用了 SELinux(使用 setenforce 0)并停止了 fapolicyd,也会发生这种情况。

所有文件和文件夹均归我的用户和应用程序和用户所属的 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 手动重置目录权限

linux laravel centos file-permissions
1个回答
0
投票

所以我解决了我的问题,但感觉很愚蠢。我还每分钟运行一个 cron 作业,将文件传输到文件夹中进行处理。这项作业设置了目标文件的所有权和权限,但我已将权限应用于所有内容,而不仅仅是文件。因为它每分钟都会发生,它似乎是由我的行为触发的。感谢 @NasirRiley 让我更仔细地查看权限的状态,这让我看到它们在我不采取任何操作的情况下发生了变化。

© www.soinside.com 2019 - 2024. All rights reserved.