2010年7月16日金曜日

XOOPS Cubeにログインできなくなった。あせりまくり!!

表題のとおり自宅サーバーでサイト運営しているXOOPS Cubeにログイン出来なくなりました。

久しぶりにメンテしようとログインすると、

****さん、ようこそ。ログイン中です
と一瞬表示されるがその後
このエリアへのアクセスは許可されていません。
などと表示されログイン画面に戻ってしまう。

昨年まで運用していたサイトは、メインページがPHPの手書きで、日記などは海外由来のBlogを使用していました。セキュリティー的には殆んどノーガードだったと思います。
そのBlogを殆んどメンテ無しでそのまま放置していたため、ある日、乗っ取られてしまい、ファイルが改ざんされてしまいました。それ以来、システム全体のセキュリティーを強化しようと模索し現在に至っているわけですが、またヤラレタカ!青くなった次第です。

Googleで調べていると、多くの方が同じような症状になっているようですね。
どうも データベースXOOPSのセッションテーブルがおかしくなっているみたいです。
これを、修復してやると直るみたい。
変な悪戯をされた事ではなさそうです、一安心!

早速、ローカルでphpMyaAminを開き、該当テーブルを確認、やはりエラーが出ています。
コンソールからログイン、MySQLにログイン、続けてXOOPSのデーターベースに接続、そしてリペアーして回復。


実際の手順は・・・
[user@centos ~]# mysql -u root -p
Enter password:   ←パスワード入力
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 28411
Server version: 5.xx Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| iptablelog |
| mysql |
| snort_log |
| xoops |    ←これが目的のデーターベース
+--------------------+
4 rows in set (0.00 sec)

mysql> use xoops
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> show tables;
+-------------------------------------+
| Tables_in_xoops |
+-------------------------------------+
| b3defd_altsys_language_constants |
| b3defd_pico_categories |
| b3defd_pico_category_permissions |
| b3defd_pico_content_extras |
| b3defd_pico_content_histories |
| b3defd_pico_content_votes |
| b3defd_pico_contents |
| b3defd_pico_tags |
------------ 中略 --------------
| b3defd_protector_access |
| b3defd_protector_log |
| b3defd_ranks |
| b3defd_session |  ←これが目的のテーブル
| b3defd_smiles |
| b3defd_user_mailjob |
| b3defd_user_mailjob_link |
| b3defd_users |
| b3defd_xoopscomments |
| b3defd_xoopsnotifications |
| search |
+-------------------------------------+
121 rows in set (0.01 sec)

mysql> REPAIR TABLE `b3defd_session`;
+--------------------------+--------+----------+------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+------------------------------------------+
| xoops.b3defd_session | repair | warning | Number of rows changed from 1683 to 1685 |
| xoops.b3defd_session | repair | status | OK |
+--------------------------+--------+----------+------------------------------------------+
2 rows in set (0.03 sec)
これで、修復されました。
早速、phpMyAdminで確認してみると、修復されているようです。次に、ブラウザでログインしてみるとチャンとログインできました。

2010/07/19 追記
データベースのリペアーを行うコマンド「REPAIR TABLE `b3defd_session`;」の「`」が「'」とは違う。
完全に「'」と思っていたため、エラーばかり出てしまう。よくよく見てみると、「`」だった。思い込みは失敗を呼びます。反省!
  • '」  quote、single quote、apostrophe
  • `」  grave mark、reverse single quote、spacing grave accent、back apostrophe
2010/07/26 追記
データベースのチェックと修復についてもう少し詳しく調べてみた。
MySQLのマニュアルから
そのものずばり参考になったサイトとして

Sync A World You Want To Explore

phpmyadmin上からの修復
もっと簡単にphpmyadmin上から修復出来るはずだと思っていましたが、やはり出来ました。
これまで、phpmyadminは使ったことが無かったので調べることもしていなかった。
  • phpmyadminにログイン
  • 該当のデータベースを選択
  • テーブル一覧の下「すべてをチェックする」でチェックする
  • テーブル一覧の下「チェックしたものを:」の「テーブルをチェックする」を選択
  • エラーテーブルをチェックする
  • テーブル一覧の下「チェックしたものを:」の「テーブルを修復する」を選択
以上で終了