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の内容がおかしい、という情報もありました。
今回の手順で解決しない場合は、下記のページも参考になるかと思います。
参考文献