developers blog

さくら VPS (nginx + php7) に phpMyAdmin をインストールする

はじめに

さくらの VPS (nginx + php7) に、phpMyAdmin をインストールして動かします。

環境

  • VPS : さくらVPS 1G SSD
  • OS : CentOS 7.3
  • その他 : nginx/1.10.2, PHP 7.1.0

phpMyAdmin をインストールする

yum を使用して、phpMyAdmin をインストールします。まずは利用可能なパッケージを確認します。

1# yum --enablerepo=remi list available | grep phpMyAdmin
2phpMyAdmin.noarch

以下のコマンドを実行してインストール。

1# yum --enablerepo=remi install phpMyAdmin

エラーが表示されインストールできない場合

以下のようなエラーが発生する場合は、サーバに libtidy パッケージが入っていません。

1Error: Package: php-tidy-5.4.45-12.el7.remi.x86_64 (remi)
2           Requires: libtidy-0.99.so.0()(64bit)

libtidy を EPEL からインストールします。

1# yum --enablerepo=epel install libtidy-devel

再度インストールを実行して、エラーがでなければインストールは成功です。

nginx の設定ファイルを変更する

nginx の設定ファイルを変更し、phpMyAdmin へのアクセスを追加します。

/etc/nginx/nginx.conf
1server {
2  ......
3  location /pma {
4    alias  /usr/share/phpMyAdmin/;
5    index  index.php;
6
7    location ~ ^/pma/.+\.php$ {
8      fastcgi_pass   127.0.0.1:9000;
9      fastcgi_index  index.php;
10      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
11      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
12      include        /etc/nginx/fastcgi_params;
13    }
14  }
15}
  • pma の部分は、適当な名称で OK です。
  • /usr/share/phpMyAdmin/ に phpMyAdmin がインストールされているものとします。

ブラウザから http://ドメイン/pma/ にアクセスして、phpMyAdmin のログイン画面が表示されれば成功です。

パーミンションエラーが発生する場合

以下のようなメッセージが表示される場合、/var/lib/php/session フォルダへのアクセス権がないためエラーとなっています。

1phpMyAdmin - Error
2Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
3session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)
4session_start(): Failed to read session data: files (path: /var/lib/php/session)

session フォルダのパーミンションを確認します。

1# cd /var/lib/php
2# ls -l
3
4drwxrwx--- 2 root apache 6 Dec  1 12:00 session

上記の例では、session フォルダのグループが apache となっているため、nginx へ変更します。

1# chown root:nginx session
2# ls -l
3
4drwxrwx--- 2 root nginx 6 Dec  1 12:00 session

nginx を再起動します。

1# systemctl restart nginx

ブラウザからアクセスしてログイン画面が表示されれば成功です。

アクセス制限を設定する

phpMyAdmin のログイン画面へのブルートフォースアタックなどにより、パスワード破られるのを防ぐため、サーバ側でアクセス制限を設定します。

Basic 認証

サーバに Basic 認証を設定します。Basic 認証では、ブルートフォースアタックを完全に防ぐことはできませんが、手間をかけさせ時間をかせぐことができます。 まず /etc/nginx フォルダに .htpasswd ファイルを作成します。

1# htpasswd -c /etc/nginx/.htpasswd <ユーザー名>
2New password: <新しいパスワード>
3Re-type new password: <新しいパスワード>

htpasswd コマンドが実行できないときは、httpd-tools をインストールします。

1# yum install httpd-tools

nginx の設定ファイルを以下のように修正します。

/etc/nginx/nginx.conf
1server {
2  ......
3  location /pma {
4    alias  /usr/share/phpMyAdmin/;
5    index  index.php;
6
7    auth_basic "Restricted";
8    auth_basic_user_file /etc/nginx/.htpasswd;
9
10    location ~ ^/pma/.+\.php$ {
11      fastcgi_pass   127.0.0.1:9000;
12      fastcgi_index  index.php;
13      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
14      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
15      include        /etc/nginx/fastcgi_params;
16    }
17  }
18}
  • auth_basic : 表示されるメッセージ
  • auth_basic_user_file : パスワードファイルのパス

nginx を再起動し、basic 認証が表示されれば成功です。

IP アドレス制限

IP アドレスを指定してアクセスを制限します。nginx の設定ファイルを以下のように修正します。

/etc/nginx/nginx.conf
1server {
2  ......
3  location /pma {
4    alias  /usr/share/phpMyAdmin/;
5    index  index.php;
6
7    allow xxx.xxx.xxx.xxx;
8    deny all;
9
10    location ~ ^/pma/.+\.php$ {
11      fastcgi_pass   127.0.0.1:9000;
12      fastcgi_index  index.php;
13      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
14      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
15      include        /etc/nginx/fastcgi_params;
16    }
17  }
18}

xxx.xxx.xxx.xxx の部分には、自分の IP を設定してください。