apache-user 从 Windows2012 到 Centos7 访问 NFS

apache-user 从 Windows2012 到 Centos7 访问 NFS

我已经将 NFS 共享从 Windows 2012 服务器安装到我拥有的 Centos7 网络服务器。

我希望我的 Web 服务器能够从 NFS 共享中创建和读取文件。我之前在 Windows 2008 和 Centos6 上有过类似的解决方案,但在升级服务器后,我遇到了麻烦。

UID 和 GID 在 W2012 NFS 选项中设置并且正确。

[root@centos external]# ll
drwxrwxrwx  2 apache www-data 4096 Sep 17 16:15 NFSShare


[root@centos external]# df -h
windowsserver:/NFSShare 50G   19G   31G  38% /var/www/external/NFSShare

[root@centos external]# getfacl NFSShare/
# file: NFSShare/
# owner: apache
# group: www-data
user::rwx
group::rwx
other::rwx

NFS 共享及其权限与 root 用户一起工作。

[root@centos NFSShare]# touch test.txt
[root@centos NFSShare]# ll
total 1
-rwxrwxrwx 1 apache www-data  8 Sep 17 16:15 test2.txt
-rw-r--r-- 1 apache www-data  0 Sep 24 11:10 test.txt

但是当我尝试使用 PHP 从我的网站读取或写入时,我得到权限被拒绝。

PHP 代码(尝试创建一个文件夹并读取一个文件):

// Try create a folder    
mkdir('/var/www/external/NFSShare/123');

// Try to read from file
$file = '/var/www/external/NFSShare/test2.txt';
$homepage = file_get_contents($file);
echo $homepage;

PHP 错误日志:

[root@centos external]# tail /var/log/httpd/website-error_log

[Thu Sep 24 10:21:03.632156 2015] [:error] [pid 15286] [client 172.27.xxx.xxx:56198] PHP Warning:  mkdir(): Permission denied in /var/www/website/modules/users/view/admin/test.php on line 6
[Thu Sep 24 10:21:03.645438 2015] [:error] [pid 15286] [client 172.27.xxx.xxx:56198] PHP Warning:  file_get_contents(/var/www/external/NFSShare/test2.txt): failed to open stream: Permission denied in /var/www/website/modules/users/view/admin/test.php on line 15

如果我尝试以 ssh 身份运行 apache 用户,也会出现同样的问题:

[root@centos NFSShare]# su -s /bin/sh apache -c "touch /var/www/external/NFSShare/test.txt"
touch: cannot touch ‘/var/www/external/NFSShare/test.txt’: Permission denied

目前,我已尝试在 Windows 端授予“每个人” NTFS 权限,在 Centos 服务器上尽可能多地授予 CHMOD 0777 并关闭 SELinux - 只是为了排除任何与此有关的问题。

有人知道为什么 Apache 用户无法读取或写入 NFS 共享吗?

更新#1:

使用 apache 用户创建文件时检查“tail -f /var/log/audit/audit.log”。当我在例如 /external 或 /external/NFSShare 中创建文件时,在日志中看不到任何差异,在 NFSShare 上权限被拒绝。

检查了“tcpdump -i any dst windowsserver”,当我使用 root 用户创建文件时,我收到了 NFS 请求,但使用 apache 用户尝试时却没有收到任何请求。所以看起来我的 Centos 服务器在将任何内容发送到 windowsserver 之前拒绝了该请求。

相关内容