1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VirtualBox+Apache+PHP】共有ファイルのパーミッションエラーを解消する方法

Posted at

VirtualBoxでCentOSにApacheをインストール。
共有ファイルで作成したtest.phpに接続すると、「You don't have permission to access /test.php on this server.」と表示され、ページの表示ができなくて結構ハマりました、、、

無事解決出来たので手順を記録しておきます。

環境

VirtualBox:6.1.28
ホストOS:MacOS Big sur 11.5.2
ゲストOS:CentOS7
Apache:2.4

前提条件

「VirtualBox Guest Additions」をインストール済みであること
共有フォルダーのマウント方法は「自動マウント」にしていること

エラー解消手順

エラーの原因は、ファイル共有をすることにより、ゲストOS(CentOS7)側のマウント先のフォルダの権限が強制的に「rootユーザまたはvboxsfグループ」のみしか読み込み権限が付与されていないからでした。

# ls -la /var/www/
drwxrwx---.  1 root vboxsf 128 10月 28 22:18 html

これだと一般のユーザがアクセスした場合、当然のことながら読み込み権限がなくページが表示されません。

※今回ホストOS(Mac)側のフォルダを、apacheのドキュメントルートで設定している/var/www/htmlにマウントしています。

対処法:apacheのユーザを「vboxsf」グループに追加

chmodで権限を変更しようとしても、共有フォルダの場合変更が効きません。(酷い仕様です)

回避策としては、apacheのユーザを「vboxsf」グループに追加してあげれば、ページにアクセスする際に、読み込み権限が付与されて問題を解消できるはず。

apacheのユーザ名は、「/etc/httpd/conf/httpd.conf」の下記コード部分で確認可能です。

# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apache

apacheが「apache」というユーザでhttpリクエストを受け取り、phpファイルにアクセスする訳なので、この「apache」ユーザをグールプへ追加します。

# gpasswd -a apache vboxsf

apacheがvboxsfグループに追加されたか念のため確認します。

# id apache
uid=48(apache) gid=48(apache) groups=48(apache),995(vboxsf)

無事追加されていることを確認できたら、CentOSを再起動します。

# reboot

これで問題なく表示されると思って、アクセスしてみたらまだパーミッションがないと怒られました、、、

上記設定後もパーミッションエラーとなる場合

それでもApacheからファイルが見れない場合「SELinux」の設定に問題がある可能性があります。

CentOSにはデフォルトでSELinuxがインストールされています。
下記コマンドを実行し「Enforcing」と返って来れば、SELinuxが有効になっています。

# getenforce

SELinuxは、強制アクセス制御機能を加えるモジュールで、このモジュールが有効になっていることにより、ファイルの権限がないと怒られている可能性があります。

下記コマンドを入力し、一時的に無効にします。

# setenforce 0

再度CentOSを再起動し、ブラウザからアクセスします。
無事表示されれば、SELinuxが原因です。

恒久的に、SELinuxを無効にするためには、設定ファイルを開き「SELINUX=disabled」と変更します。

設定ファイル:/etc/selinux/config

SELINUX=disabled

以上で無事、共有ファイルで作成したphpファイルを開くことができました。

調べていたら、Apache2.4のhttpd.configの内容がおかしい、という情報もありました。

今回の手順で解決しない場合は、下記のページも参考になるかと思います。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?