
Windows 2012 サーバーから Centos7 Web サーバーに NFS 共有をマウントしました。
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 を使用して Web サイトから読み取りまたは書き込みを行おうとすると、権限が拒否されます。
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 側で「Everyone」に 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 ユーザーで試すと何も届きません。つまり、Windows サーバーに何かが送信される前に Centos サーバーが要求を拒否しているようです。