Centos 7 Samba php:从 samba 共享移动到:z 卷后,使用 Docker 容器移动文件时,apache 权限被拒绝

Centos 7 Samba php:从 samba 共享移动到:z 卷后,使用 Docker 容器移动文件时,apache 权限被拒绝

首先,我要说的是 chmod 777 对此甚至不起作用(尽管我知道这不是正确的解决方案)。

情况如下:我有一台邮件服务器用于接收邮件。该服务器上有一个 cronjob,它运行一个 .sh 脚本,将邮件文件移动到 samba 共享。另一台应用服务器(我遇到问题的地方)也有一个 cronjob,它运行一个 .sh 脚本,将这些邮件文件从共享中移出:

#!/bin/sh

if [ "$(ls -A /samba/reports)" ]; then
mv /samba/reports/* /home/adam/dmarc/reports/mail
chown adam:adam /home/adam/dmarc/reports/mail/*
chmod 664 /home/adam/dmarc/reports/mail/*
fi

这一切似乎都运行正常。请注意,cronjob 以 root 身份运行(它是 root 的 crontab)。此外,“reports”目录作为卷安装在 php:apache Docker 容器内(-./reports:/var/www/reports:z)。文件在那里,可以在容器内读取。但是,当我使用 php(从脚本调用,而不是 apache)时,我被拒绝重命名/移动文件的权限。但是,如果我将每个文件 cat 到具有不同名称的相同文件:

cat theProblemFile > noProblem

....然后一切正常。两者的所有者/组和权限完全相同。

文件从 Samba 共享中移出后有什么不同吗?这是怎么回事?此外,在将文件从邮件服务器传输到应用服务器方面,是否有行业标准/最佳实践/首选方法?

谢谢

答案1

您移动了文件(没有-Z选项)而不是复制它们,因此它们携带的是其原始的 SELinux 上下文而不是其目的地的适当上下文。

当您创建新文件时,它已经具有正确的 SELinux 上下文。

您可以使用restorecon修复受影响文件上的 SELinux 上下文,例如:

restorecon -rv <directory>

相关内容