Linux

phpMyAdminで403エラーが表示されて表示できない問題を解消

どうも、こっこです。

今回はブラウザ上でデータベースの処理を視覚的に行うことができるphpMyAdminをインストールした後に403エラーが表示される問題が起きた時の解決方法をご紹介します。

WebサーバーをFedoraで新設するときに毎回エラーが出て面倒なので、記事としてまとめておきます。

phpMyAdminに必要なインストール

まずは当たり前ですが、phpMyAdminを使用する前に必要なものをインストールさせておきましょう。すでに済んでいる人はエラーの箇所までスキップ。

Apacheをインストール

#HTTPをインストール
[root@www ~]# dnf -y install httpd

#ウェルカムページ削除
[root@www ~]# rm -f /etc/httpd/conf.d/welcome.conf

#httpd.confファイル編集
[root@www ~]# vi /etc/httpd/conf/httpd.conf

#147行目:変更 (Indexes 削除)
Options FollowSymLinks

#154行目:NoneをAllに変更
AllowOverride All

#167行目:ディレクトリ名のみでアクセスできるファイル名を追記
DirectoryIndex index.html index.php

# 最終行に追記
ServerTokens Prod
KeepAlive On


#HTTP起動
[root@www ~]# systemctl start httpd
[root@www ~]# systemctl enable httpd


#ファイアウォールにHTTPを許可
[root@www ~]# firewall-cmd --add-service=http --permanent
[root@www ~]# firewall-cmd --reload




PHPをインストール

#PHPインストール
[root@www ~]# dnf -y install php php-mbstring php-pear


#php.iniの設定
[root@www ~]# vi /etc/php.ini

#922行目:コメント解除し自身のタイムゾーンを追記
date.timezone = "Asia/Tokyo"


#HTTP再起動
[root@www ~]# systemctl restart httpd




DBをインストール

※MariaDBを例にインストールする

#MariaDBをインストール
[root@www ~]# dnf -y install mariadb-server


#mariadb-server.confファイルを編集
[root@www ~]# vi /etc/my.cnf.d/mariadb-server.cnf

# 21行目:追記
[mysqld]
character-set-server=utf8

#MariaDBを起動
[root@www ~]# systemctl start mariadb

#DBの初期設定
[root@www ~]# mysql_secure_installation

#質問には基本全てYで対応、パスワードを求められたら入力する

#ファイアウォールにMariaDBを許可す
[root@www ~]# firewall-cmd --add-service=mysql --permanent
[root@www ~]# firewall-cmd --reload

phpMyAdminをインストールする

phpMyAdminをインストールしていきます。こちらもインストールが済んでいる場合は次に進みましょう。

#phpMyAdminをインストール
[root@www ~]# dnf -y install phpMyAdmin php-mysqlnd php-mcrypt php-php-gettext

#phpMyAdmin.confファイルを編集
[root@www ~]# vi /etc/httpd/conf.d/phpMyAdmin.conf

# 13行目 : 必要に応じてアクセス許可 IP 追記
Require ip 127.0.0.1 10.0.0.0/24 #Apacheを再起動 [root@www ~]# systemctl restart httpd




本来これだけの設定をするだけで「http://(ホスト名またはIPアドレスまたはドメイン名)/phpmyadmin/」にアクセスすると正常にphpMyAdminのTOPページが開かれます。以下の画像のような表示が出れば正常です。

コマンドでインストールできない場合は

コマンドでphpMyAdminがインストールできない場合はphpMyAdminのサイトから最新版のzipファイルをダウンロードして解凍し、必要な場所にディレクトリごと移動して利用することも可能です。

エラー表示の意味

さて問題のエラーの解消に取り掛かります。

アクセスできないエラー表示はこのようになっていました。

「You don’t have permission to access this resource.」とのことなので、翻訳すると「このリソースにアクセスする権限がありません。」らしいです。そもそもこのページにアクセスする権限を持っていないらしいですね。

ページタイトルに403とあるので、やはりページへのアクセス権が無いということですね。

このエラーが表示されているのはphpMyAdmin.confの設定ミスが原因です。

問題①そもそもPHPとphpmyadminのインストールできてる?

今回はFedoraでの解説をしていますが、CentOS Stream 9にて同じような流れでインストール作業を進めていたらPHPとphpmyadminが正常にインストールできていませんでした。

いつもコピペで作業を進めているのでエラーに気づかずにそのままにしていたのが原因でした。

インストールが正常にできなかった場合はコマンドラインにエラーメッセージが表示されていますので、しっかりと確認しつつ正常にインストールできたことを確認してください。

問題②.confファイルを編集する

では正常に動作するために設定ファイルの編集を行います。

あくまで先程の403エラーが無くなり正常にphpMyAdminが表示される、ということであり各設定が正しいかどうかは自己責任でお願いします。

phpMyAdmin.conf変更箇所

#13行目と15行目をコメントアウト
#SSLRequireSSL
#Require local

#18行目以降をすべてアクセス許可状態にする
Require all granted

#保存できたら念のためにApacheを再起動
systemctl restart httpd




これでphpMyAdminが正常に表示されれば完了です。もしもこれで直らなければphpMyAdminを入れ直すか、そもそも違うエラーなのかもしれません。その場合はしっかりhttpのエラーログを確認して原因から見つめ直しましょう。

正常動作phpMyAdmin.confソース

改めてphpMyAdmin.confの正常に動作する全体のソースを載せておきます。

# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   #SSLRequireSSL
   Require all granted
  #Require local
</Directory&gt

<Directory /usr/share/phpMyAdmin/setup/>
Require all granted
</Directory&gt

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
Require all granted
</Directory>

<Directory /usr/share/phpMyAdmin/templates/>
Require all granted
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
Require all granted
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
Require all granted
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc. This may break your mod_security implementation.
#
#<IfModule mod_security.c>
# <Directory /usr/share/phpMyAdmin/>
# SecRuleInheritance Off
# </Directory>
#</IfModule>


注意事項

あくまでこの設定ファイルはディレクトリまでのアクセスをすべて許可してしまうのでセキュリティがガバガバになります。

まずはこれでWebページにアクセスできるかどうかの確認用としての設定ファイルなので、問題ないようであればアクセス許可は適宜変更して使ってください。

まとめ

いかがだったでしょうか?ちゃんとphpMyAdminは表示されていますか?

そもそも毎回サーバーを新設する時に自分なりのテンプレがあり、phpMyAdminの導入の部分にどこを書き足すかを正常なものに変更しておけば毎回エラーが表示されることはないんですけどね^^;

そのサーバー新設する自分のテンプレはまた今度まとめて投稿しておきますね。ssh接続やユーザー追加の方法もまとめておきたいと思っています。

ではまた!