さくら 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 をインストールします。まずは利用可能なパッケージを確認します。

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

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

# yum --enablerepo=remi install phpMyAdmin

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

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

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

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

# yum --enablerepo=epel install libtidy-devel

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

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

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

/etc/nginx/nginx.conf
server {
  ......
  location /pma {
    alias  /usr/share/phpMyAdmin/;
    index  index.php;

    location ~ ^/pma/.+\.php$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
      include        /etc/nginx/fastcgi_params;
    }
  }
}
  • pma の部分は、適当な名称で OK です。
  • /usr/share/phpMyAdmin/ に phpMyAdmin がインストールされているものとします。

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

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

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

phpMyAdmin - Error
Error 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.
session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)
session_start(): Failed to read session data: files (path: /var/lib/php/session)

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

# cd /var/lib/php
# ls -l

drwxrwx--- 2 root apache 6 Dec  1 12:00 session

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

# chown root:nginx session
# ls -l

drwxrwx--- 2 root nginx 6 Dec  1 12:00 session

nginx を再起動します。

# systemctl restart nginx

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

アクセス制限を設定する

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

Basic 認証

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

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

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

# yum install httpd-tools

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

/etc/nginx/nginx.conf
server {
  ......
  location /pma {
    alias  /usr/share/phpMyAdmin/;
    index  index.php;

    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location ~ ^/pma/.+\.php$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
      include        /etc/nginx/fastcgi_params;
    }
  }
}
  • auth_basic : 表示されるメッセージ
  • auth_basic_user_file : パスワードファイルのパス

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

IP アドレス制限

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

/etc/nginx/nginx.conf
server {
  ......
  location /pma {
    alias  /usr/share/phpMyAdmin/;
    index  index.php;

    allow xxx.xxx.xxx.xxx;
    deny all;

    location ~ ^/pma/.+\.php$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_split_path_info ^/pma/(.+\.php)(.*)$;
      fastcgi_param  SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
      include        /etc/nginx/fastcgi_params;
    }
  }
}

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