2007年11月27日火曜日

phpmyadmin の最初のセキュリティのこと

「テレビの周りはアンデッドばかり」は、こちらに引っ越しました。

みんな同じじゃザルだろうに


MySQLのデータベースを管理するのに役立つ
phpmyadmin だが、Defaultの設定では、ディレクトリは /var/www/phpmyadmin となる。
phpmyadminをインストールし デフォルト設定のままであれば、http://www.example.com/phpmyadmin/で phpmyadminのログイン画面が表示されることになる。
NucleusやWordPressがインストールされているサーバーなら MySqlを利用しており、その管理に phpmyadminを使っている可能性は極めて高い。しかも、phpmyadminのログイン画面を表示する index.phpの動作は、ソースを見れば一目瞭然である。
このURLの存在を隠すことは、ハッキング対策の第一歩となる。

※ phpmyadminの設定を変更する方法もあるが、ユーザごとに調整するのは作業が増える。
  一括して記述することで管理の簡素化と保守の容易さを狙う。


  1. phpmyadminのインストール
    #apt-get install phpmyadmin

  2. Apacheの設定ファイルを追加する

    /etc/apache2/conf.d/phpmyadmin.conf を作成し任意の場所でのアクセスを可能にする

    Alias /user1/myadm /var/www/phpmyadmin
    Alias /user2/myadm /var/www/phpmyadmin

    <Location /user1/myadm>
    Order deny,allow
    Deny from all <--全アクセス不許可
    Allow from 127.0.0.1
    Allow from 192.168.0 <-- 内部ネットワークのみアクセスを許す
    </Location>

  3. apacheを再起動
    # /etc/init.d/apache2 restart
    Forcing reload of web server (apache2)... waiting .

  4. http://www.example.com/user1/phpmyadm/
    でアクセス可能になる。


失敗例1

  • phpmyadminの場所を確認する

    # whereis phpmyadmin
    phpmyadmin: /etc/phpmyadmin /usr/share/phpmyadmin

    任意の場所にシンボリックリンクを張る
    # ln -s /usr/share/phpmyadmin myadmin

    ブラウザでシンボリックリンクにアクセスする。
    http://192.168.0.8/~user1/myadmin
    以下の文章が表示される。

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.


    失敗例2

  • defaultの phpmyadminにシンボリックリンクを張る

    # ln -s /var/www/phpmyadmin myadmin

    ブラウザでシンボリックリンクにアクセスする。
    http://192.168.0.8/~user1/myadmin

    先と同じエラーが表示される。

    環境

    Debian GNU/Linux Etch 2.6.18
    mysql- 5.0.32
    phpmyadmin 2.9.1
  • 2007年11月18日日曜日

    Phpmyadmin のインストール

    「日本のテレビはまだましかも アメリカなんかサバイバル」は、こちらに引っ越しました。

    Phpmyadminのインストール

    1. phpmyadmのインストール
      # apt-get install phpmyadmin

    2. インストールの確認
      # dpkg -L phpmyadmin (抜粋)
      /usr/share/ucf/phpmyadmin
      /usr/share/ucf/phpmyadmin/etc
      /usr/share/phpmyadmin
      /usr/share/phpmyadmin/show_config_errors.php
      /usr/share/phpmyadmin/lang
      /usr/share/phpmyadmin/index.php
      /usr/share/phpmyadmin/libraries
      /usr/share/phpmyadmin/libraries/export
      /usr/share/phpmyadmin/libraries/import
      /usr/share/phpmyadmin/libraries/.htaccess
      /usr/share/phpmyadmin/libraries/engines
      /usr/share/phpmyadmin/libraries/auth
      /usr/share/phpmyadmin/libraries/fpdf/font
      /usr/share/phpmyadmin/js
      /usr/share/phpmyadmin/themes
      /usr/share/phpmyadmin/config
      /usr/share/doc
      /usr/share/lintian
      /var/www
      /var/lib/phpmyadmin
      /etc/phpmyadmin
      /usr/share/phpmyadmin/.htaccess
      /usr/share/phpmyadmin/config/config.inc.php

    3. Phpmyadmin用ユーザを用意する
      # mysql -uroot -prootpswd

      rootの設定を指定していない時は、まずroorを設定する。
      #mysql
      mysql> set password = password('rootpswd');

      mysql> grant ALL on *.* to qsecofr@localhost identified by 'qsecofr'; <-- ユーザを設定する
      Query OK, 0 rows affected (0.00 sec)

      mysql> show grants for qsecofr@localhost; <-- 設定確認
      +----------------------------------------------------------------------------+
      | Grants for qsecofr@localhost |
      +----------------------------------------------------------------------------+
      | GRANT ALL PRIVILEGES ON *.* TO 'qsecofr'@'localhost' IDENTIFIED BY PASSWORD '*9C4662253AFDZ0EBB578DD67780EH08CE3F5DE6F' |
      +----------------------------------------------------------------------------+
      1 row in set (0.00 sec)

      mysql>flush privileges ; <-- ユーザ操作のおまじない(GRANTは不要/INSERTなら必要)

    4. ログイン
      http://www.example.com/phpmyadmin/

      ユーザー名:qsecofr
      パスワード:qsecofr

      初期画面に入る。



    環境

    Debian GNU/Linux Etch 2.6.18
    mysql- 5.0.32
    phpmyadmin 2.9.1

    2007年11月15日木曜日

    Nucleusのインストール

    「テレビにも悩みがあるんだぁ ひょっとしたら死活問題かも」はこちらに引っ越しました。

    Nucleusのインストール

    1. Nucleusの入手
      Nucleus CMS Japanから、nucleus3.3_ja_utf8.zip、または nucleus3.3_ja_euc.zipを入手する。

    2. /home/nucleus1/wwwに、Nucleus用のディレクトリを作る

    3. ftpで /home/nucleus1/wwwに nucleus3.3_ja_utf8.zipをアップロードする
      # unzip nucleus3.3_ja_utf8.zip

      # ls -l /home/nucleus1/www/
      total 144
      -rw-r--r-- 1 root root 1096 Apr 20 2007 action.php
      -rw-r--r-- 1 root root 1367 Feb 3 2007 atom.php
      -rw-r--r-- 1 root root 769 Feb 1 15:29 config.php
      -rw-r--r-- 1 root root 1051 Jul 12 2006 createaccount.html
      drwxr-xr-x 4 root root 4096 Apr 30 2007 extra
      -rw-r--r-- 1 root root 169 Feb 6 2007 index.php
      -rw-r--r-- 1 root root 37125 Apr 24 2007 install.php
      -rw-r--r-- 1 root root 28116 Apr 27 2007 install.sql
      -rw-r--r-- 1 root root 18344 Feb 28 2005 license.txt
      drwxr-xr-x 2 root root 4096 Apr 30 2007 media
      drwxr-xr-x 11 root root 4096 Apr 30 2007 nucleus
      -rw-r--r-- 1 root root 471 Feb 28 2005 readme.html
      -rw-r--r-- 1 root root 38 Mar 4 2005 robots.txt
      -rw-r--r-- 1 root root 145 Feb 3 2007 rsd.php
      drwxr-xr-x 6 root root 4096 Apr 30 2007 skins
      -rw-r--r-- 1 root root 183 Feb 1 18:46 test02.php
      -rw-r--r-- 1 root root 1811 Feb 3 2007 xml-rss2.php

    4. Nucleus用ユーザ(ディレクトリ)を用意する
      # mysql -uroot -prootpswd

      rootの設定を指定していない時は、まずroorを設定する。
      #mysql
      mysql> set password = password('rootpswd');

      mysql> grant ALL on nucleus1.* to myuser1@localhost identified by 'passwd12letter'; <-- ユーザを設定する

      mysql> show grants for myuser1@localhost <-- 設定確認
      +----------------------------------------------------------------------------+
      | Grants for myuser1@localhost |
      +----------------------------------------------------------------------------+
      | GRANT USAGE ON *.* TO 'myuser1'@'localhost' IDENTIFIED BY PASSWORD '*332F73ZFE5F7188CC269122EBF0008C71E453F85' |
      | GRANT ALL PRIVILEGES ON `nucleus1`.* TO 'myuser1'@'localhost' |
      +----------------------------------------------------------------------------+
      2 rows in set (0.00 sec)

      >mysql>flush privileges ; <-- ユーザ操作のおまじない(GRANTは不要/INSERTなら必要)

    5. Nucleus用データベースを用意する
      mysql> create database nucleus1; <-- Nucleus用データベースを用意

      mysql> show databases; <-- Nucleus用データベースを確認
      mysql> show databases;
      +--------------------+
      | Database |
      +--------------------+
      | information_schema |
      | mysql |
      | nucleus1 |
      | test |
      +--------------------+
      4 rows in set (0.00 sec)

    6. インストールに必要なデータをセットする
      /home/nucleus1/www/config.phpのパーミッションをブラウザで書き換え可能にする。

      # chmod 777 /home/nucleus1/www/config.php

      http://www.example.com/~nucleus1/install.phpを表示する。

      基本のデータベース設定
      ホスト名:localhost
      ユーザー名:myuser1 <-- Nucleus用データベースのユーザ
      パスワード:passwd12letter <-- Nucleus用データベースのユーザ
      データベース名:nucleus1 <-- Nucleus用データベース

      URLs and directories
      Site URL: http://www.example.com/~nucleus1/
      Admin-area URL: http://www.example.com/~nucleus1/nucleus/
      Admin-area path: /home/nucleus1/www/nucleus/
      Media files URL: http://www.example.com/~nucleus1/media/
      Media directory path: /home/nucleus1/www/media/
      Extra skin files URL: http://www.example.com/~nucleus1/skins/
      Extra skin files directory path: /home/nucleus1/www/skins/
      Plugin files URL: http://www.example.com/~nucleus1/nucleus/plugins/
      Action URL: http://www.example.com/~nucleus1/action.php

      管理権限を持つユーザー <-- Nucleusの初期管理者
      表示される名前:Nucleus1
      本名(ハンドル名):Unknwon1
      パスワード:passwdstr
      パスワードの確認:passwdstr
      メールアドレス:testNucleus@example.com

      Blog名: My Nucleus CMS
      Blogの短縮名: mynucleuscms

      CRを押す。または「実行」をクリック。

    7. 完了画面が表示される
      インストールは完了しました!
      Nucleusはインストールされ、config.phpはアップデートされました。
      セキュリティのためconfig.phpのパーミッションを444に戻すことを忘れないでください(パーミッション変更の簡易ガイド)。
      インストールファイルの削除
      ウェブサーバから次のファイルを削除してください:
      ・ install.sql:テーブルの構造を内包するファイル
      ・ install.php:このファイル
      もしこれらのファイルを削除していなければ、管理領域を開くことが出来ません。
      ウェブサイトの確認
      ウェブサイトを使う準備が整いました。
      ・ 管理領域にログインしてサイトの設定を行う
      ・ すぐにサイトへ行ってみる

      /home/nucleus1/www/config.phpのパーミッションをブラウザで書き換えるようにする。
      chmod 777 /home/nucleus1/www/config.php

    8. 指示に従ってインストールの後始末

      # chmod 644 /home/nucleus1/www/config.php

      # mv /home/nucleus1/www/config.php

      # chmod 644 /home/nucleus1/www/install.sql install.sql.org

      # chmod 644 /home/nucleus1/www/install.php install.php.org



    以上で Nucleus のインストールは終了。
    http://www.example.com/~nucleus1/index.phpで ブログページ「My Nucleus CMS」が表示される。

    環境
    Debian GNU/Linux Etch 2.6.18
    mysql- 5.0.32
    phpmyadmin 2.9.1