MediaWiki 新しいページはコチラ
提供: yonewiki
(ページの作成:「== '''Media Wikiとは?'''== このページの仕組みそのものです。<br /> ウィキペディアは公式に活動している百科事典になりますが、...」) |
|||
1行: | 1行: | ||
+ | [[メインページ#Web技術|Web技術]]へ戻る。 | ||
== '''Media Wikiとは?'''== | == '''Media Wikiとは?'''== | ||
+ | |||
このページの仕組みそのものです。<br /> | このページの仕組みそのものです。<br /> | ||
ウィキペディアは公式に活動している百科事典になりますが、その百科事典のシステムそのものが、<br /> | ウィキペディアは公式に活動している百科事典になりますが、その百科事典のシステムそのものが、<br /> | ||
26行: | 28行: | ||
== '''SyntaxHighlight_GeSHiをインストール'''== | == '''SyntaxHighlight_GeSHiをインストール'''== | ||
+ | ※最近のWikiMediaではデフォルトで一緒にインストールされるみたいです。 | ||
+ | |||
SyntaxHighlight_GeSHiをインストールするとWikimedia内でプログラムコードの記述をした際に手間をかけることなく<br /> | SyntaxHighlight_GeSHiをインストールするとWikimedia内でプログラムコードの記述をした際に手間をかけることなく<br /> | ||
− | + | シンタックスハイライトをしてくれます。※最近のVersionではGeshiが同梱されているので、インストールの手間はないそうです。<br /> | |
1.まずは必要なソースコードをダウンロードしよう。 | 1.まずは必要なソースコードをダウンロードしよう。 | ||
66行: | 70行: | ||
== '''スタイルシートを変更'''== | == '''スタイルシートを変更'''== | ||
− | 1.http://xxxxxx.xx/xxxxx/index.php/Special:Userrights にアクセスして、ユーザに管理者・ボット・ユーロクラット権限を付与します。<br /> | + | 1.http://xxxxxx.xx/xxxxx/index.php/Special:Userrights |
− | 2.http://xxxxxx.xx/xxxxx/index.php/MediaWiki:Common.css にアクセスして、Common.cssを記事を編集するかのように編集します。<br /> | + | |
+ | もしくは | ||
+ | |||
+ | http://xxxxxx.xx/xxxxx/index.php?title=Special:Userrights にアクセスして、ユーザに管理者・ボット・ユーロクラット権限を付与します。<br /> | ||
+ | 2.http://xxxxxx.xx/xxxxx/index.php?title=MediaWiki:Common.css | ||
+ | |||
+ | もしくは | ||
+ | |||
+ | http://xxxxxx.xx/xxxxx/index.php?title=MediaWiki:Common.css にアクセスして、Common.cssを記事を編集するかのように編集します。<br /> | ||
CssのファイルでFTPで直接操作すると死ねる結果が待っていますのでWikiのシステムを使いましょう。<br /> | CssのファイルでFTPで直接操作すると死ねる結果が待っていますのでWikiのシステムを使いましょう。<br /> | ||
+ | |||
+ | |||
たとえば、以下のようなスタイルを適用すると文字を大きくしたりフォントを設定できたりします。 | たとえば、以下のようなスタイルを適用すると文字を大きくしたりフォントを設定できたりします。 | ||
77行: | 91行: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | Geshiのスタイルシートは | ||
+ | http://xxxxxx.xx/xxxxx/index.php/MediaWiki:Geshi.css | ||
+ | |||
+ | もしくは | ||
+ | |||
+ | http://xxxxxx.xx/xxxxx/index.php?title=MediaWiki:Geshi.css | ||
+ | に記述するとよいですが、pre class=de1(通常行)やde2(強調行数)といった深いところに使われるタグにもフォントの定義がされていたりするので、Geshi.cssよりあとで定義されているシンタックスのCSSが優先されて、動作しない定義が出てきます。そういうときは、よく考えてからになると思いますが、CSS最優先キーワードを使って定義しちゃいましょう。geshiで変更しても影響のないスタイルだけにこのキーワードを使います。たとえば等幅フォントを設定したい場合は | ||
+ | <syntaxhighlight lang="css" line start="1"> | ||
+ | div.de1, | ||
+ | div.de2, { | ||
+ | font-family:'等幅フォント名' !important; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | のように!importantキーワードを定義します。本当はGeshiのシステムをいじるのが正しい対応になるかと思いますが、プログラムを修正しないで、 | ||
+ | ユーザの立場で定義を活用するならimportantしかないと思います。自分で作成するシステムのCSSではimportantの利用はよろしくないですね。 | ||
+ | だって2重で定義されること自体が問題でしょ? | ||
+ | |||
+ | == '''131011事件:WikiMediaシステム半壊状態です。''' == | ||
+ | PHP5を利用するMediaWiki Ver1.19にはSafeMode(セーフモードとかsafe_modeとかとも書けます。)とかっていうモードがあるらしくて、 | ||
+ | そのせいで画像のサムネイルが作れないため、大量のエラーを吐き出すページがありました。 | ||
+ | その際はエラーにびっくりせずに。そのまま、ご帰宅いただければとのたまっておりました。 | ||
+ | |||
+ | 当時の時系列メモ(2件)<br /> | ||
+ | 13-10-11<br /> | ||
+ | ImageMagickが動作していない模様。LocalSettings.phpとGlobalFunction.phpいろいろ変えたけど動ていない気がする。<br /> | ||
+ | 連休明けに考えてみようと思う。フォルダ生成はftpに任せたのでその辺のUID関係の問題はクリアしたと思う。<br /> | ||
+ | convertのありかはあってる。あとは何だ?xreaが何か別のセキュリティ仕様変更をやったのやもしれん。<br /> | ||
+ | シングルクォートつけてきたり、引数の無効かとかはクリア。つうか、これどうやってデバッグするんだ。<br /> | ||
+ | ものすごい地味な方法でやってるんだけど…。xreaでできないと意味ない気がするし。<br /> | ||
+ | 自分のPCにPHPインストールしたり、あんまり使わないから嫌だ。ってそこか。<br /> | ||
+ | あと変に動かすと、MediaWikiのシステムそのものが破綻するという罠もあるのが凄まじい。<br /> | ||
+ | こんな巨大プロジェクトの構造。理解しきれない気がする。<br /> | ||
+ | 一人でしか使わないからファイルロックとかあんまり意味ないのに無駄に凄い技術が仕込まれてたり<br /> | ||
+ | 考えさせられる。<br /> | ||
+ | なんだこのPHP5の高すぎるセキュリティ。素人集団がサーバ使う向けの仕様のような気がする。<br /> | ||
+ | あ、それがxreaか<br /> | ||
+ | フフフ♪<br /> | ||
+ | ・サムネイル生成までの道筋を改めて追う。<br /> | ||
+ | ・ImageMagickのコマンド実行するところまで来ているか確認する。<br /> | ||
+ | ・だとしたらどんなコマンドを実行しようとしているのかをつかむ。<br /> | ||
+ | ・imagesのtmpフォルダにしこたまたまったtransform_xxxxx-1.jpg達の後始末をどうするか考える。<br /> | ||
+ | ・あとはFlashを埋め込んだり、動画を埋め込んだりできるようにしたいかも<br /> | ||
+ | たぶん2年くらいかかる。<br /> | ||
+ | <br /> | ||
+ | メモ<br /> | ||
+ | 13-10-17<br /> | ||
+ | ま、なんやかんやで、Safemodeの回避方法はわかりました。要するにPHPではなくPerlを使えということですな。<br /> | ||
+ | 意味ねぇ。PHPの崇高な思想による機能はプログラミングのインタラクティブ性を大いに損なうものであると思います。<br /> | ||
+ | そんなに楽しくないプログラミングさせるなら、いっそのことサーバごと吹き飛んでしまえばいいと思った。<br /> | ||
+ | 恐ろしいほど、Mediawikiへの変更を加えたので、ここでは伝授することができません。お許しを。<br /> | ||
+ | 要するに最初から全部作った方がはえー気もする。2年くらいかかる予定でしたが、まぁ一週間ありゃなんとでもなるってことですね。<br /> | ||
+ | <br /> | ||
+ | 総括<br /> | ||
+ | http://php.net/manual/ja/features.safe-mode.functions.php<br /> | ||
+ | 上記リンクに記載されている関数はSafeModeでは使えません。重要な関数がびっしりでてくるので、リンク先を見た後はかなりげんなりします。<br /> | ||
+ | 要するに、危険な関数だからUIDが一致しないとだめよ。ってこと。<br /> | ||
+ | ん?つまり?<br /> | ||
+ | 普通は、ftpでログインしてあらかじめ作ったおいたフォルダにphpのファイルを置くと思います。 | ||
+ | そうするとUIDはftpでログインしたときのUIDがフォルダに付きます。そして、phpを実行しているときはUIDがXREAだとApacheを実行するUIDで<br /> | ||
+ | 食い違うことになります。つまりSafemodeの機能が働いて、関数は動きません。となると動的(PHP実行による処理)に、ディレクトリを生成したり<br /> | ||
+ | 動的にディレクトリを削除することもできません。その他、いろいろなことが出来ません。<br /> | ||
+ | その結果、一般に配布されているようなphpで高度なコンテンツマネージメントシステムはだいたい、そのままでは動きません。<br /> | ||
+ | それは、どういうことか?<br /> | ||
+ | サーバ屋さん的にはphpのエンジン設定の権限によりsafemodeを切ることもできるが、この機能を有効にしているってことは、<br /> | ||
+ | そのサーバ屋さんを利用しているユーザ同志によるモメゴトのもとになるようなPHPのコマンドを実行させないということが、<br /> | ||
+ | ユーザ個人にとっては使いにくいんでしょうけど、それよかモメゴトが消えるんならそれでOKOK。サーバ屋としてもなんら影響ないし、業績に響かない。<br /> | ||
+ | むしろ、ありがたい。ということなんだと思います。<br /> | ||
+ | 結果、プログラミングを熟知している人だけが、高度なシステムを改造して、使うし、問題も起こしにくい。<br /> | ||
+ | そういうことになっているのかもしれません。あるいは、そういった機能を欲しない無欲なユーザに使ってもらえている<br /> | ||
+ | というあたりなのでしょうか?想像ですけど。<br /> | ||
+ | <br /> | ||
+ | で、回避策なんですけど。思うに余計に危なっかしい案ではありますが、<br /> | ||
+ | 一つはphpのftpに関連する関数を使う。どこかにソースのどこかにftpのIDとかパスワードとかを書くんで、スペシャルなハッキング技術をお持ちの人なら、<br /> | ||
+ | まぁ簡単にやられる可能性もあります。dbへのアクセス情報とかはMediaWikiやその他システムで入力してるんで、そう簡単ではないでしょうけれども。リスクが少し大きくなります程度。<br /> | ||
+ | 加えて、phpからcgiを呼び出してフォルダの生成や削除をする。という処理をさせる。これもうまいことチェック機能をいれとかないと、危ない。<br /> | ||
+ | あるいは<br /> | ||
+ | xreaに限れば、phpをcgi版で動かす。という宣言を.htaccesを配置、記述する。php.iniを配置、記述する<br /> | ||
+ | という対策があります。<br /> | ||
+ | ftpでフォルダを作るのは出来るかもしれない。<br /> | ||
+ | ただしftpだけで制御するには疲れるかもしれない。なぜならfopen関数で第二引数に'x'を指定する場合は<br /> | ||
+ | ファイルがなければ、フォルダも全部作って、ファイルを作るっていう便利な関数だから。<br /> | ||
+ | そうするとphpからcgiを呼び出して、同じようにフォルダの生成や削除をするという処理をさせる必要があります。<br /> | ||
+ | これもスーパーハッカーなら、このcgiを利用して、呼び出し方をして、ファイルの削除しまくりとかできるわけです。<br /> | ||
+ | そんなスーパーハッカーいるのかどうかは知りませんが。<br /> | ||
+ | で、そのセキュリティ的な対策は各自やっていただくとして、セキュリティ的な提案とやりかただけを語るならば、<br /> | ||
+ | safemodeで影響を受ける関数の置き換え処理の記述をします。MediaWikiの場合。かなりの数の置き換えが必要になります。やれる人はやってみて。<br /> | ||
+ | 例えば、今回の目的ではないですが、chmod関数を置き換える場合だと。<br /> | ||
+ | chmod関数の引数が$this->pathだとしたら<br /> | ||
+ | <nowiki>file_get_contents('http://xxxxx.xx/xxxxx/yyyyyyy.pl?Path='.$this->path&Secure=xxxxxxxxx);</nowiki> | ||
+ | として.plや.cgiを実行する関数に置き換えます。<br /> | ||
+ | 動作結果がどうなるかわからないので、呼び出し結果もHTMLに吐き出しておけば、左辺の変数に結果が取り込まれます。チェックができないのが辛いところです。<br /> | ||
+ | 実行した後にチェック用のファイルを生成させたりして、読み込んでみるという方法もありでしょう。自分はそこまでやってませんが…<br /> | ||
+ | Perlもわかる!という人にしかできない技です。<br /> | ||
+ | …の部分には必要に応じてuse関数で、外部の関数を読みこむ宣言をしないとダメでしょう。Copyの関数とかね。<br /> | ||
+ | さらには、第三者に実行されたときのために、呼び出し元が自分のサーバであることの確認処理もいれた方がいい。<br /> | ||
+ | でyyyyyyy.plっていうファイルにchmodを実行するPerlスクリプトを書く。<br /> | ||
+ | <br /> | ||
+ | 例えば<br /> | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="Perl" line start="1"> | ||
+ | #!/usr/local/bin/perl | ||
+ | print "Content-Type: text/html\n\n"; | ||
+ | |||
+ | … | ||
+ | |||
+ | $formInput = $ENV{'QUERY_STRING'}; | ||
+ | @InputData = split (/&/,$formInput); | ||
+ | foreach $tmp (@InputData) | ||
+ | { | ||
+ | ($name,$value) = split (/=/,$tmp); | ||
+ | if ($name eq 'Path'){ | ||
+ | $path = $value; | ||
+ | } | ||
+ | elsif($name eq 'Secure'){ | ||
+ | $secure = $value; | ||
+ | } | ||
+ | } | ||
+ | if($secure eq 'xxxxxxxx') chmod 0777, 'xxxx'.$path; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <br /> | ||
+ | という感じです。<br /> | ||
+ | この調子で必要となるsafemodeの影響を受ける関数の動作をperlに置き換えたものを作ります。<br /> | ||
+ | こんな対処方法を取る人がどれくらいいるのか知りませんが…<br /> | ||
+ | 参考になればと思います。xreaで、ここまでやるやついねぇな。<br /> | ||
+ | Perlはさっぱりわからへんという人は、さっさと引っ越しした方がええね。<br /> | ||
+ | わたくしめに助言できるのはココまでです。Perlを熟知している方にやって欲しいからです。自分もこれが安全か?と言われれば、それほど自信ありません。<br /> | ||
+ | むしろ教えてほしいくらいです。<br /> | ||
+ | passthru関数もバッククォーテーションを使ったり、UNIXコマンドステータス$!を取得して、きっちりと動作確認もできるわけです。<br /> | ||
+ | unlinkとかmkdirとかis_なんちゃら関数だって、Perlの-xを使えば同じこと。Perlですべて置き換えられます。<br /> | ||
+ | xreaが推奨するphpのcgiモードはMediaWikiでは動作しません。Get関数の引数の形が違うからです。そこを変えれば全部うまくいくのかも不明ですし。<br /> | ||
+ | <br /> | ||
+ | 環境変数で、phpでcgiを呼び出したときだけ値が空っぽになる変数あるみたいなので、その値が何も保持していないか確認すると、<br /> | ||
+ | 更にいたずら対策はできるわけですね。なんちゃらインジェクションとかされたら辛いので、追い出し+データ放棄とかの処罰がありそう。<br /> | ||
+ | 他人に迷惑をかけたら民事訴訟とかもありますかね。責任ってあるのかもしれません。あるいみクレジットカードの番号盗まれるより痛いかも。<br /> | ||
+ | 自分みたいなもんのクレジットカードの上限なんてたかがしれてますもんね。レンタルサーバの責任ってどんなことがあるんやろか、怖いねぇ。<br /> | ||
+ | なんか、車の運転をしなければ人を殺すこともないわけですし、乗らないのが一番っていうのと似てるのかもしれません。<br /> | ||
+ | <br /> | ||
+ | こんなことやってたらxreaから追い出されたりして、そしたら最初からphpなんて使わせてもらえないと思うので、大丈夫だと思いますけど<br /> | ||
+ | かくいう自分も最初はxreaをやめようかと思ったくらいです。もしくはMediaWikiをやめようかとも思いました。<br /> | ||
+ | 上記のサンプルではsecureという変数を使ってパスワード的な確認も入れてます。こんなものが役に立つかどうかしりませんけど。<br /> | ||
+ | <br /> | ||
+ | もし訴訟とかが起こった時にはsafemodeとかいう使いにくいmodeをonにするからだって開き直ったりしてるかもしれません。なんとなくイメージが湧く。<br /> | ||
+ | safemodeはこんな風に余計にあがく奴がいて、むしろ危ないってことだな。だから新しいPHPの現行Versionでは廃止になったのかもしれない。<br /> | ||
+ | でも、そのsafemodeの機能がついたサーバ500台近く抱えているxrea。恐るべし!<br /> | ||
+ | グダグダ言ってても、だれも救われないかもしれないので、この件はこれでおしまい。<br /> | ||
+ | <br /> | ||
+ | |||
+ | == 140623 PHP Verupによるセーフモード解除 == | ||
+ | VersionUpしてセーフモードが解除されたみたいです。よかったね。もう、ややこしいことはしなくてよくなりました。こういう方針の変更というのは大事だよね。ユーザはカスタムしたいからサーバを借りるわけだから、自由度が低いレンタルサーバはやっぱだめだよね。経営側がようやくユーザ離れの深刻さを理解したのかもしれません。でも、なんつうか、あんまりおおっぴらな連絡もなくPHPだけでなくDBシステムのバージョンアップとか大きな変更をやったもんだから、データベースが止まりました。バックアップはとったから、動くようにする作業は各自でやってね的な対応です。これはなかなか強引だ。xrea恐るべし。でも、自分はこの恐るべし方策についていけるので、よしとします。6/25現在もxreaユーザはDBシステムの変更によるWebサイトの機能停止に追われているようです。 | ||
+ | |||
+ | |||
+ | FTPログインルートにDBのバックアップを_DB_BACKUP_XREA_UPGRADEというフォルダの中にDBログインID毎にdumpファイルを作ったそうです。 | ||
+ | |||
+ | たとえば、ID=xxxなら | ||
+ | |||
+ | |||
+ | _DB_BACKUP_XREA_UPGRADE/mysql_xxx.dump | ||
+ | |||
+ | |||
+ | となります。このdumpファイルというのはインポートすることができる形式になっていて、文字コードは使っていた人の都合によっては様々なモノになっている可能性があります。文字化けが発生したりする可能性については各自で対応しなければならないそうなので、このあたりの理解度が対応力をためされる部分になるそうです。 | ||
+ | |||
+ | |||
+ | このファイルをFTPツールとかをつかって自分のPCに保存します。このときもバイナリーファイルとしてダウンロードするなりして、文字コードの形式が変わってしまわないように注意が必要です。この節のFTPに関する説明が分からない人はFTPの理解からやり直しです。 | ||
+ | |||
+ | |||
+ | そして、phpMyAdmin(MySQLの場合)とかphpPgAdmin(PostgreSQLの場合)でインポートして、dumpファイルを指定してあげれば復活します。それぞれのIDでログインしてIDにあったファイルをインポートする作業を繰り返します。xreaでは5つのIDまで使えるので多い人でも5回くらいでしょう。 | ||
+ | |||
+ | |||
+ | ファイルが大きい場合は途中で失敗することも多いので、ID名の中に関連付けられているすべてのテーブルを削除して、やり直すとよいでしょう。それと、phpMyAdminやら、phpPgAdminの画面で、DBシステムのVerUpに伴うエラーが表示される場合もあると考えられます。これはphpXXAdminのバージョンが古いために表示される不具合です。基本的な動作に支障はないので、それほど気にしなくていいWarningエラーですが、気になる人は、DB管理画面の結構下の方にあるphp(xx)Adminのインストールボタンをもう一回おして再インストールをすると良いでしょう。 | ||
+ | |||
+ | |||
+ | 果たして、昔のDigiRockはこういう会社だっただろうか?キニシナイけど。気になる。2011年にGMO資本になってから、なんかオカシイ。自分はその昔、GMOと大きな訴訟的な問題(自分にとって)を起こしてから、GMOから逃げ出してDigiRockに移動したんですけど、モトサヤに収まってしまいました。これが切っても切れない腐れ縁というやつなのかもしれません。GMOはGMO。GMOディジロックはGMOディジロック。 | ||
+ | |||
+ | == '''181001 ImageMagick Convert 移動''' == | ||
+ | これまでは、/usr/local/bin/php/convertにおいていたのに、突如として消されて、一般的なパスに移動。自分でソースからコンパイル、リンクした奴でしたけど…なんにせよ普通な設定になってよかった。新しいパスは | ||
+ | |||
+ | |||
+ | */usr/bin/convert | ||
+ | |||
+ | |||
+ | xrea のサーバもごく一般的なパスになりました。割かしちょいちょい、こういう大改造をしれっとやるので、古参は困りますね。 | ||
+ | |||
+ | なので、localsettings.phpの設定の中は | ||
+ | |||
+ | |||
+ | *$wgImageMagickConvertCommand = "/usr/bin/convert"; | ||
+ | |||
+ | |||
+ | と書けば、ImageMagcikの変換関係の処理が使えるようになります。 | ||
+ | |||
+ | |||
+ | |||
+ | [[メインページ#Web技術|Web技術]]へ戻る。 |