お知らせ

  • シスキュー技術部

WordPressへの全世界的な攻撃について

noimage

WordPressへの全世界的な攻撃について

WordPressへの世界的な攻撃が続いています。 この攻撃は、WordPressサイトを見つけ次第、wp-login.phpへアクセスし、ユーザー名admin等でパスワード総当たり(ブルートフォース)攻撃を行うものです。 攻撃の実例 これは筆者がいろいろテストするために使っている個人所有のVPSのapacheのログですが、二日間で、wp-login.phpへの総当たり攻撃が3000回以上行われています。 幸いにしてadminユーザーは削除してあったため、総当たり攻撃が成功した形跡はありませんでしたが、念のため攻撃が始まってから数日分の、Tripwireレポートを精査して、DocumentRoot以下のファイルに、心当たりのない変更が加えられていないかを確認しました。 Tripwireはファイルシステム内の変更を記録して、変更や削除があると、レポートとして表示してくれるものです。 これをインストールしておいて、今回は安心を得ることができました。 基本的にSSHの公開鍵認証でしか外部からアクセスできない設定にしてありますので、想定外の変更を加えられる心配は非常に少ないですが、WordPress部分をこのような方法で改ざんされてしまうと、公開している部分でもあり、ここからサーバー資源を悪用されてしまいます。 adminでのログインが成功してしまえば、WordPressのコアファイルを操作して、WordPressを攻撃者の思い通りに改変してしまうことが可能です。 これがApacheのログから割り出した、攻撃アクセスのうちほんの一部です。 見たこともないようなドメインが並んでいますが、ブラジル、スペイン、チェコ、ロシアと世界中のサーバーから攻撃されています。 これはボットネットという、遠隔操作できるマルウェアを仕込まれた、常時起動のサーバーなどです。 ボットネットは、公開サーバーのセキュリティ脆弱性を利用して攻撃され、乗っ取られてしまったサーバーなどの集まりです。 古いバージョンのHTTPサーバーやその他のサーバーなどをそのままで公開し続けると、その脆弱性を利用して、ボットネットに組み込まれてしまう可能性が高いです。 ボットネットはこのような大規模さ、IPアドレスの不特定多数さを利用して、迷惑メールの送信や、WebサイトへのDoS(サービス拒否)攻撃などに利用されています。 このボットネットをコントロールする攻撃者が一か所から命令を出すと、配下にあるボットネットに属するコンピュータが、他のサイトに攻撃を行います。 世界中からアクセスがあるので、特定の国からのアクセスを防げばよいというものではありません。 今回の攻撃はWordPressを乗っ取って、さらにこのボットネットを拡大することが目的であると考えられています。 攻撃に対する対策 まず最初に行うべきは、adminという名の管理者アカウントとは違う管理者アカウントを一つ以上作成し、adminは削除してください。 adminはあまりにも多く利用されているので、今後も標的になってしまうと考えるべきです。 少なくとも管理権限を持つユーザーのパスワードは11文字以上で、数字、記号や大文字、小文字を含む文字列を選ぶべきです。 侵入を許してしまったかどうかを判断するのは、かなり難しいです。 こう書いてしまうと不安をあおることになってしまいかねませんが、ユーザー名adminパスワードadmin123などであれば、攻撃が成功してしまっている可能性も考慮すべきです。 目に見えるようなわかりやすい変更があれば、それでわかりますが、コアファイルに何かを仕込まれてしまっただけであれば、ほとんど気が付くことはできないと思います。 WordPressのプラグインExploit Scannerを使うというのも一つの方法かもしれません。 このプラグインをWordPress日本語版に対応させるパッチが下記で公開されています。 http://ja.forums.wordpress.org/topic/2743 WordPress Exploit Scannerはコアファイルのハッシュ値が、標準のものと違うかを検査する、という単純な仕組みなっています。 ハッシュ値はファイル全体から一文字でも変更すれば、大幅に変わってしまうものですので、ここの不整合があれば見つけてくれる仕組みです。 侵入を受けたことがが明確であれば、記事やコンテンツを退避させ、一度停止させたうえで、WordPressを再構築するのが最も確実な方法になるでしょう。 二段階の認証になったとしても、現状をしのぐためであれば、一時的にwp-login.phpに認証をかけてしまうというのも一つの手です。 例として挙げれば .htaccessに [text] <Files wp-login.php> AuthName “hogehoge” AuthType Basic AuthUserFile /var/www/.htpasswd Require Valid-user </Files> [/text] というように記述することで、wp-login.phpへのアクセスを行う際にベーシック認証を求められます。 このベーシック認証も総当たり攻撃に対して完全な防護策ではありませんが、現状のボットネットによる攻撃であれば、アクセス先に認証がかかっている際に、その認証に対して総当たり攻撃を行う、というところまではおそらく組み込まれていないであろうという想定です。 複数人でWordPressを利用している場合は、なかなか周知が難しいですが、現在のボットネットの攻撃を防ぐにはある程度有効かもしれません。 これで当座の攻撃をしのぎ、これら攻撃に対する根本的な解決策が確立するのを待つとよいのではないかと考えています。

  • シスキュー技術部

Btrieveのファイルを開きたい

noimage

Btrieveのファイルを開きたい

Btrieve(ビートリーブ)とは1990年代に、パソコンを使ったクライアント/サーバシステムのデーターベースとしてよく使われていました。 このBtrieve自体は、現在OracleやMS-SQLServerなどRDBMS(リレーショナル型データベース)全盛の時代では、あまりメジャーな存在ではなくなりつつありますが、現在でもPervasive PSQLとして製品ラインは続いています。 このBtreiveをPervasive PSQLにリプレースする場合、同じデータベースファイルをそのままに使えるので、移行には手間はかからないようです。 Pervasive PSQL製品版を持っていない場合は、このファイルを開くことができません。 ファイルの中を見ると、おそらく固定長のファイルであることは、わかるのですが、データベースがどういう定義で保存されているのかわからない場合、データを紐解くことは難しいです。 Accessもバージョン2.0の時代はBtrieveのデータベースを開く機能もあったようですが、2013年の現在Access2.0のソフト本体も、動く環境もそろえることは難しくなっています。 これを読み取るものがないものか、ネットを探してみたところ、オープンソースのソフトウェアでBtrieveFileSaverというものを見つけることができました。 これはBtrieveやPervasiveのランタイムやライブラリは必要とせずに動作するもののようです。 BtrieveFileSaver http://sourceforge.net/projects/btrievefilesave/ リポジトリを見ますと、VisualC++.netで開発されたソフトウェアです。 最新版をダウンロードすると、windows形式のexeがいくつか展開されます。 readme.txtとliesmich.txt(ドイツ語でライセンス)をよく読んで利用してください。 Visual_btrieve_file_saver_trial_en(de).exeは、トライアルバージョンのようで、GUIで操作できますが5件までの出力に、限られているようです。 コマンドライン版のBTrieveFileSaver.exeをコマンドプロンプトを利用して、実行します。 利用方法は、 [text] BtrieveFileSaver –brtin data.dat –brtout data.dat.dmp –format 1 [/text] のようにして利用します。 -brtinには読み込み元のBtrieveのファイル、-brtoutには出力先ファイル名を指定します。 -formatオプションは 1 BUTIL(Btrieveのコマンドラインユーティリティー)形式での出力です。先頭にレコード長、レコード区切りはCR+LFで出力されるようです。 2 BUTIL形式から、レコード長を取り除いた形式のようです。 3 HEX DUMP(16進ダンプ)をテキスト形式で出力します。CRCということはチェックサムが付加されているものかもしれません。ファイルサイズとしては、一番大きくなります。 4.HEX DUMP(16進ダンプ)をテキスト形式で出力します。 上記の4つのオプションを使用することができます。 実行すると1レコードごとに処理ログが出力されます。 改行区切りはCR+LFなので、メモ帳などで読むと、テキストフィールドはかなりきれいに並んだ状態で読めます。 またレコード長などもはっきりしますので、実際のデータのプリンタ出力やバイナリエディタと合わせて使えば、レコード定義を理解することもできそうです。 Btrieve形式のデータベースを、サードパーティーのアプリで開くものもなかなか見つかりませんので、このようなソフトウェアを利用するのも、方法の一つかもしれません。

  • シスキュー技術部

SparseBundle上の仮想マシンイメージの拡張

noimage

SparseBundle上の仮想マシンイメージの拡張

以前SparseBundleDiskImage上にVMWareFusionの仮想マシンイメージを作成する記事を投稿しました。 MacでSparseBundleImageを利用した仮想マシンバックアップ これでTimeMachineで仮想マシンの世代管理が行われずに、バックアップハードディスクを過剰に使わなくてよくなりました。 これでVMWare FusionでWindowsを常用する問題はかなり小さくなりました。 前回の記事ではスパースバンドルディスクは、60GBを割り当てましたが、Windows8を常用するにあたって、不足する場合が生じます。 ここでスパースバンドルディスクのの容量を増加し、Windows8の仮想HDDを拡張してみます。 スパースバンドルディスクの容量増加 スパースバンドルディスクの増量はディスクユーティリティーで行います。 仮想マシンを停止し、一度ディスクをアンマウントします。 アンマウントしたうえで、スパースバンドルディスクを選択し、イメージのサイズを変更をクリックします。 ここでは110GBに変更しています。 ここで110GBに変更を行ったとしても、すぐさまハードディスク上に110GBの容量が確保されるわけではなく、使用量に応じて動的に増加していきます このままではディスクのサイズは変わっても、パーティションサイズが変更されないので、ディスクイメージをマウントします。 パーティションイメージの右下斜線部分をドラッグし、パーティションサイズをディスクイメージに合わせます。 これでマウントされるディスクの最大容量を変更できます。 この操作によって、パーティション内の内容が失われることはありません。 ここでパーティションをクリックします。 仮想マシンのハードディスク増加 ここで終了している仮想マシンのハードディスクサイズを設定から拡張しようとすると、 「選択された作業を行うためにはファイルシステムに十分な領域がありません」 というエラーが出ます これは仮想マシンの格納されているディスクイメージ内で、仮想マシンイメージの複製を作成して、領域を拡張するためのようです。 そのため、110GBのディスクイメージ内で、60GBの仮想マシンのHDD増加を行う作業はできないということです。 そのため、一度スパースバンドルディスクイメージ内から、仮想マシンファイルをMac上のHDDに移動します。 この作業中、タイムマシンバックアップは一度オフにしておくことをお勧めします。 Mac上のHDDでVMWareFusionの設定から、ハードディスクのディスクサイズを変更します。 ここでMac上のHDDに十分な空き容量があれば、HDDの拡張が行われます。 それなりに時間がかかりますので、時間があるときに行ってください。 増量が終われば、再びスパースバンドルディスクイメージ内に仮想マシンファイルを書き戻します。 Windwos8を起動すると、自動的にパーティションの割当容量が増加していました。 管理ツールからコンピュータの管理、ディスクの管理を行って、領域の拡張を行う必要はありませんでした。 これはおそらくVMWareFusion5の機能だろうと思われますが、非常に便利でした。 スパースバンドルディスクイメージは大きく作っておく スパースバンドルディスクは大きめに設定しておいても、内容量の増加によって動的に拡大していきますので、大きめにとっておいても、デメリットはありません。 使い切ってしまえば、また拡張する必要がありますが、ディスクイメージ内のデータを失わずに、パーティションを拡張できるのは便利です。 複数の仮想マシンを格納するなどのために、大きめのスパースバンドルディスクを作成しておくと、後々便利になるかもしれません。

  • シスキュー技術部

WindowsPEによる救出ディスク作成

noimage

WindowsPEによる救出ディスク作成

ウィルスで正常に起動しなくなったパソコンからウィルスを取り除き、正常な状態に復旧する方法を再び考えてみます。 AVGレスキューCDを使用したマルウェア(File Restore)からの回復例 この例ではAVGレスキューCDという最小限のLINUXに、AVGというアンチウィルスソフトがインストールされたCDを利用して作成しました。 今回WindowsPEというマイクロソフト製のCDなどから起動できるトラブルシューティングツールを利用してみたいと思います。 WindowsAIKのダウンロード http://www.microsoft.com/ja-jp/download/details.aspx?id=5753 http://www.microsoft.com/ja-jp/download/details.aspx?id=5188 Windows7上で作業しますので、上記URLからISOイメージをダウンロードして、DVDに書き込みます。 そのDVDからセットアップを実行し、インストールを行います。 WindowsAIKセットアップを選択 インストール中 セットアップ終了後に、二枚目のDVDからセットアップフォルダに上書きを行うと、WindowsPE3.1を利用できるようになります。 起動用のUSBメモリの準備 今回、起動用CDイメージが固まるまではUSBメモリーを一つつぶして、テスト用にしてみたいと思います。 毎回CD-Rを書き込んで、修正していくよりはUSBメモリを利用して、環境を固めていく方が効率的です。 まず、USBメモリを起動可能な形で操作します。 この操作にはDISKPARTというコマンドを利用しますが、利用方法を誤ると、使用中のパーティーションを失ってしまいますので、記述されている内容をよく理解できなければ、実行しないでください。 管理権限で実行したコマンドプロンプトから [text] diskpart [/text] と入力すると、diskpartが起動します。 [text] list disk [/text] で容量などから加工すべきUSBメモリのディスク番号がわかりますので、 [text] select disk [番号] [/text] で選択します。ここでディスク番号を間違うと、必要なデータの入ったドライブを削除してしまうことになります。 [text] clean [/text] ですべての内容を削除します。 [text] create partition primary [/text] でパーティションを作成します。 [text] list partition [/text] でプライマリのパーティションが一つ作成されていることを確認します。 [text] select partition 1 [/text] で選択し、 [text] active [/text] でアクティブ化します。これで起動ディスクとして利用できます。 [text] format quick fs=fat32 [/text] でFAT32形式でクイックフォーマットし、 [text] assign [/text] でドライブレターが割り振られ、windows上ではUSBメモリを接続したときのような、ポップアップが上がってくると思います。 ここでDISKPARTの作業は終わりです。 WindowsPEイメージの作成 Deploymentツールのコマンドプロンプトを管理者として実行します。 そこからWindowsPEのイメージ作成用のディレクトリにイメージの元をコピーします。 下記のコマンドでは、x86アーキテクチャのイメージをc:\peに作成します。 レスキュー用としてはx86を選んでおくのが無難でしょう。 作成先は既に存在するディレクトリでは作成されません。 [text] copyre x86 c:\pe [/text] 作成されると作成先のディレクトリに移動しますので、イメージのマウントまでをコマンドで行います。 [text] copy winpe.wim c:\pe\iso\sources\boot.wim dism /mount-wim /wimfile:c:\pe\iso\sources\boot.wim /index:1 /mountdir=c:\pe\mount [/text] これでboot.wimのイメージがc:\pe\mountへ展開されマウントされます。 このようにmountフォルダ内にはWindowsPE実行時のディレクトリが展開されます。 ここに追加するプログラムなどを加えていき、再度イメージ化する、という手順を行います。 今回フリーのアンチウィルスソフトClamWinのポータブル番をインストールしてみたいと思います。 portbleapps.comというUSBなどから起動できる形に加工してくれているアプリのサイトから、ClamWinのポータブル版をダウンロードします。 http://portableapps.com/apps/security/clamwin_portable exeファイルがダウンロードされますので、実行し、わかりやすい場所に展開します。 これをc:\pe\mount\program filesにコピーします。 これだけではClamWinはWindowsPE上から実行できません。 WindowsPEは実行イメージをRAMディスク上に展開するのですが、RAMディスクのフリーエリアが少なく、ClamWinのウィルス定義ファイルが保存できません。 [text] dism /image:c:\pe\mount /get-scratchspace [/text] でスクラッチ領域を取得すると、32MBしかありません。ここは512MBまで広げることができますが、あまり大きくすると搭載RAMの小さいPCでは実行できなくなってしまいます。 [text] dism /image:c:\pe\mount /set-scratchspace:256 [/text] で256MBに拡張します。 これを確定してイメージ化します。 マウント解除に失敗しないように、エクスプローラーを閉じておきます。 [text] dism /unmount-wim /mountdir:c:\pe\mount /commit [/text] commitで確定、破棄する場合はdiscardを記述します。 これでc:\pe\iso\sources\boot.wimが更新されます。 このisoフォルダの中身をそのままUSBメモリにコピーすると、起動用USBメモリの完成です。 PCのBIOSからブートドライブをUSBメモリに変更して、USBからブートします。 StartingWindowsと表示され、プログレスバーが表示されれば、成功です。 起動すると、x:\windows\system32ディレクトリをカレントディレクトリとして、コマンドプロンプトが起動しています。 このxドライブがRAMディスクとして展開されたWindowsPEドライブです。 ここで、 [text] cd x:\Program Files\ClamWinPortable\ ClamWinPortable.exe [/text] というように、インストールディレクトリからClamWinを実行します。 このWindowsPEはそのままであれば有線ネットワークしか認識しないので、ウィルス定義ファイルのダウンロードにはイーサネットケーブルをつなぎます。 このようにウィルス定義ファイルをダウンロードすることで、最新の定義ファイルを保存し、スキャンすることができます。 これでうまく動作するイメージが作れれば、ISOイメージを作成します。 [text] oscdimg -n -bc:\pe\etfsboot.com C:\pe\iso C:\pe\WindowsPE.iso [/text] WindowsPEを使う意味 アンチウィルスだけであれば、AVGレスキューCDを利用するほうが簡単です。 WindowsPEはマイクロソフトが提供していることもあり、Windowsのファイルシステムを操作するには、LINUXのライブCDをつかうよりは安心感があります。 またその他Windowsアプリも複雑なもの(様々なDLLや.netフレームワークなどを必要とするもの等)以外は、インストールして、救出、復旧作業用にインストールすることができます。 ファイラーを入れれば、起動しなくなったり、ウィルス感染したシステムドライブから、ウィルスを除去してから、USBハードドライブに必要なファイルをバックアップ。 その後リストア・復旧作業を行うなど、様々なカスタマイズが可能で、それを1CDで行えるWindowsPEはかなり魅力的であるといえます。

  • シスキュー技術部

Java備忘録① ~ファイル入出力と文字コード~

noimage

Java備忘録① ~ファイル入出力と文字コード~

「FileWriter」というテキストをファイルに書き出すクラスがあります。 Java初心者の僕は、なんとな~くこの「FileWriter」を使っていました。 それで問題なく動いていたからです。 が・・・。 この「FileWriter」、出力するファイルの文字コードセット指定ができないんですね~。 というか、OSのデフォルトのエンコード方式で自動変換されてしまいます。 文字コードを意識しないでいいという点は、一見便利なようにも思えますが、 かえって問題を引き起こす原因にもなりかねませんな~。 なので、普段から文字コードを意識してコーディングする方がよさそうですね。 というわけで、文字コードを指定する場合は、 「FileWriter」の代わりに「OutputStreamWriter」を使用するといいでしょう。 [java] // FileOutputStreamオブジェクト生成(出力ファイルの指定) FileOutputStream fo = new FileOutputStream("file.txt"); // OutputStreamWriterオブジェクト生成(文字コードの指定) OutputStreamWriter ow = new OutputStreamWriter(fo, "UTF-8"); // 書き出す内容をセット ow.write("Hello Work!!"); // ストリームの解放 ow.close(); fo.close(); [/java] こんな感じでしょうか。 ちなみに、「FileWriter」と同じようにファイル読み込み手続きを簡略化した 「FileReader」というクラスも文字コードが指定できません。 代わりに「InputStreamWriter」を使って云々かんぬんする必要があるワケですが・・・。 ま、便利なのも考えモノですね~、という初心者の感想ですです。 というわけで、今回はこれにて失礼。

  • シスキュー技術部

シャットダウンスクリプトの簡単な解説

noimage

シャットダウンスクリプトの簡単な解説

VBS(VBスクリプト)を書いたのは初めてですが、昔ながらのバッチファイルでは実現できなさそうだったので、VBスクリプトの学習の意味を込めて作成しました。 Windows8にシャットダウンのショートカットを作る 宣言部 [vb] Option Excplicit [/vb] この宣言は、あらかじめ変数を宣言しないと使えない、VBユーザーにはおなじみの宣言です。 タイプミスで変数名を間違えても、エラーが出てデバッグが楽になるので、宣言しておきます。 define部では変数の宣言をしています。 execParamは実行時のパラメータを受け取る配列。 intCounterは待機時間のカウンター rtnは戻り値の格納用 WSHobjはWSHオブジェクトのインスタンス用 Argsはpopup.vbsの実行用文字列 WaitCounterは待機秒数の格納用 flgForthは強制オプション用のフラグ(Forceの間違いですが、見逃してください) 定数DEFAULT_COUNTERはデフォルトの待機時間 定数MINIMUM_COUNTERは最短待機時間。 最短待機時間は、たとえば待機時間ゼロで、誤ってスタートアップフォルダに入れてしまった時などのために入れていますが、普通に使ってる限りは必要のない部分かもしれません。 即時シャットダウンがほしければ、shutdown.exeを呼び出すバッチファイルを作ればよいだけですので、差別化のようなものと考えてください。 引数チェック Argument Check & Set部では引数のセットなどを行っています。 [vb] WScript.Arguments.Count [/vb] で引数の数が取れます。 [vb] Set execParam = WScript.Arguments [/vb] で引数を配列に入れ、0からの配列の添え字で引数にアクセスできます。 多少込み入って見えますが、数値以外のものがセットされた時のためのもので、それほど複雑なことはしていません。 待機 Waiting loop部ではpopup.vbsを設定回数呼び出しています。 [vb] Set WSHobj = WScript.CreateObject("WScript.Shell") [/vb] でWindowsScriptShellのインスタンスを作成し、runメソッドでpopup.vbsを呼び出しています。 popup.vbsはここで設定された引数でポップアップウィンドウを呼び出すだけのスクリプトですが、毎回呼び出すことで、できる限りポップアップが前面に表示されるようにしています。 前面で操作できるところにポップアップがないと、キャンセルなどができなくなってしまいます。 なかぽんの雑記さんの記事を参考にさせていただきました。 vbsでWshShell popupを前面に表示する http://d.hatena.ne.jp/nakapon/20121120 popupは一秒待機して戻るように設定していますので、繰り返し呼び出すことにより、時間を設定できます。 popupのボタンが押された場合は、戻り値を受け取って、SELECT CASEで分岐させています。 戻り値1であれはOKボタンなので、シャットダウン用のプロシージャを呼び出します。 戻り値2であればキャンセルなので、終了処理をキャンセルするプロシージャを呼び出します。 戻り値がない場合は、何もしません。 設定回数ループが終わると、シャットダウン用のプロシージャを呼び出します。 シャットダウン用プロシージャ [vb] Set Wshshell = WScript.CreateObject("WScript.shell") [/vb] でオブジェクトWshshellにWScript.shellのインスタンスをセットします。 runメソッドでshutdown.exeを呼び出します。 強制フラグが1の場合は-fオプションを付きでshutdown.exeを呼び出します。 ここで使用しているオプションは -s シャットダウンを行う -t 待ち時間の設定、0であれば即時 -f 強制的に終了する です。 shutdown.exeにはほかにもオプションがありますので、runメソッドの中身を書き換えれば、再起動やさまざまなカスタマイズが可能になります。 キャンセル用プロシージャ [vb] WScript.Quit [/vb] これでスクリプト自体の終了を行います。 VBでいえばEndやExitの代わりです。

  • シスキュー技術部

CentOSにMailmanのインストール

noimage

CentOSにMailmanのインストール

メーリングリストサーバーをVPSに構築した際のメモです。 オープンソースのメーリングリストサーバーMailmanを利用します。 ApacheとPostfixが稼働している状態から開始します。 yumでインストールできるパッケージがMailmanの2.1.13でしたので、 http://docs.python.jp/contrib/mailman/releases.html こちらから最新版を取得します。 こちらでダウンロードできるバージョンは細かい日本語向けカスタマイズが施されています。 [bash] yum -y install python-devel [/bash] pythonのインストールを行います。 [bash] groupadd mailman useradd -c "GNU Mailman" -s /sbin/nologin -M -g mailman mailman mkdir /usr/local/mailman chown mailman. /usr/local/mailman chmod a+rx,g+ws /usr/local/mailman [/bash] Mailmanのグループとユーザーを作ります。 [bash] wget http://docs.python.jp/contrib/mailman/_static/mailman-2.1.14+j7.tgz tar zxvf mailman-2.1.14+j7.tgz mv mailman-2.1.14+j7 /tmp/ chown -R mailman. /tmp/mailman-2.1.14+j7.tgz [/bash] Mailmanの最新バージョン2.1.14+j7をダウンロードし解凍、/tmp/以下に移動させます。 [bash] cd /tmp/mailman-2.1.14+j7 su mailman -s "/bin/bash" -c "./configure --with-cgi-gid=apache" su mailman -s "/bin/bash" -c "make" && make install [/bash] makeを実行し、インストールフォルダにインストールします。 [bash] cd /usr/local/mailman/ ./bin/check_perms -f ./bin/check_perms [/bash] アクセス権チェックを行います。-fオプションで自動的に修正してくれます。 [bash] rm -rf /tmp/mailman-2.1.14+j7/ [/bash] ソースを削除します。 [bash] vi /usr/local/mailman/Mailman/mm_cfg.py [/bash] ここでMailmanのコンフィグファイルを設定します。 [text] DEFAULT_URL_HOST = 'hostname' DEFAULT_EMAIL_HOST = 'hostname' add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST) MTA = 'Postfix' DEFAULT_SERVER_LANGUAGE = 'ja' DEFAULT_URL_PATTERN = 'http://%s/mailman/' [/text] URLホスト名には、正確なURLを記述してください。ここが実際アクセスするものと違う場合、管理画面でエラーになります。 EMAIL_HOSTにはメールサーバーのドメイン名を入力してください。 ここに入力した文字列が、メーリングリストへの投稿先となります。 メーリングリスト名@DEFAULT_EMAIL_HOSTが投稿先となります。 mm_cfg.pyには新たにメーリングリストを作成する際のデフォルト値をいろいろと設定することができます。 GUIの管理画面からも設定できる部分ですが、同じような性格のメーリングリストを複数作成する際は、ここに記述しておくと便利です。 このような設定があるとすると、mm_cfg.pyには [text] DEFAULT_MAX_MESSAGE_SIZE=0 [/text] のように記述しておくと、新規に作られるメーリングリストにあらかじめ適用されます。 [text] /usr/local/mailman/bin/mmsitepass password [/text] Mailman全体のパスワードを設定します。 [bash] crontab -u mailman /usr/local/mailman/cron/crontab.in [/bash] MailmanのCronの設定を行います。 [bash] /usr/local/mailman/bin/genaliases chown mailman. /usr/local/mailman/data/aliases* chmod g+w /usr/local/mailman/data/aliases* [/bash] Mailmanのエイリアス設定を行います。 メーリングリストを作成する度に、メーリングリスト用に新たな複数のエイリアスが作成されます。 入退会用、コマンド送信用、メーリングリスト送信用などです。 [bash] vi /etc/postfix/main.cf [/bash] main.cfの中の以下に、mailmanのaliasesを設定します。 [text] alias_maps = hash:/etc/aliases, hash:/usr/local/mailman/data/aliases [/text] これをpostfixに反映させます。 [bash] service postfix reload [/bash] Apacheの設定ファイルをMailman用に作成します。 [bash] vi /etc/httpd/conf.d/mailman.conf [/bash]   [text] ScriptAlias /mailman/       /usr/local/mailman/cgi-bin/ <Directory /usr/local/mailman/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> Alias   /pipermail/     /usr/local/mailman/archives/public/ <Directory /usr/local/mailman/archives/public/> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> [/text] これを保存し、 [bash] service httpd checkconfig service httpd graceful [/bash] apacheをリスタートします。 [bash] /usr/local/mailman/bin/newlist mailman [/bash] 管理用メーリングリストを作成します。 管理者メールアドレスと、mailmanパスワード、を入力し、エンターを入力すると、作成が完了します。 [bash] /usr/local/mailman/bin/config_list -i /usr/local/mailman/data/sitelist.cfg mailman [/bash] メーリングリストの初期設定を行います。 [bash] cp /usr/local/mailman/scripts/mailman /etc/rc.d/init.d/ /etc/init.d/mailman start chkconfig --add mailman chkconfig mailman on [/bash] 起動スクリプトを設定して、自動で起動させます。 ここで http://hostname/mailman/admin にアクセスし、Mailmanの管理画面が表示されれば、インストール完了です。 アイコンが表示されていなかったので、アイコンをwww配下のiconsディレクトリにコピーします。 [bash] cp /usr/local/mailman/icons/* /var/www/icons/ [/bash] これでアイコンも正常に表示されました。 設定次第で、双方向のメーリングリストや、メールマガジン風など様々な設定が可能で、つかいやすい印象です。 ユーザーも管理画面から様々な操作ができますが、今回必要なメーリングリストは閉じたものですので、認証をかけて管理画面にアクセスできないようにしました。 Mailmanの設定項目はかなりいろいろありますので、最適な設定を探してみてください。

  • シスキュー技術部

CentOSとownCloudで社内用のDropboxをつくる

noimage

CentOSとownCloudで社内用のDropboxをつくる

オンラインストレージ、Dropboxなどはかなりメジャーな存在となっています。 クライアントをインストールしておくと、指定フォルダーの内容をサーバーにアップロードし、同じアカウントを登録してある他のPCと同期します。 またwebブラウザを介して、ファイルのダウンロードもでき、公開用URLを設定して、他の方との共有も可能です。 このDropboxはファイル送信経路や、ファイルサーバー側での暗号化は行われており、無料から利用できるとはいえ、セキュリティー的な部分で不安なものではありません。 しかしながら、たとえば消去や、取り出し、バックアップなど、具体的なデータの取り扱いについて、完全にコントロール下におけるものではありませんので、社内ポリシーで禁じられている、あるいは一定以上のセキュリティー基準を設けて、重要なファイルを置かないようにする、などさまざま運用方針を持っている方もいらっしゃると思います。 これを自社保有のサーバーで同じような仕組みを提供するもので、ownCloudというオープンソースソフトウェアがあります。 今回はこれを試してみます。 ownCloudのインストール CentOS6.3+apache2+mod_SSL+PHP5.3.3+PostgreSQLがあらかじめ構築されたVPS環境を利用しました。 ownCloudは仕組み的にはWebDAVを利用しますので、経路暗号化のために、自局認証ではなく公的認証局によるSSL証明書を用意しておくことが重要です。 ownCloudのwebサイトから、Install、LinuxPackagesでCentOSを選び、指示された通りにリポジトリを追加し、yumでインストールします。 これで必要な他のパッケージとともにインストールされます。 [bash] cd /etc/yum.repos.d/ wget http://download.opensuse.org/repositories/isv:ownCloud:community/CentOS_CentOS-6/isv:ownCloud:community.repo yum install owncloud [/bash] これで [text] /var/www/html/owncloud/ [/text] 以下にインストールされます。 初回セットアップの前にpostgreSQLにデータベースとユーザーを作っておきます。 [bash] su - postgres createdb -E UTF8 -U ユーザー名 -T template0 owncloud [/bash] https://yourhost/owncloud にアクセスすると、セットアップが始まります。 今回、gdがないというエラーが出ましたので、gdをインストールし、 [bash] yum -y install gd [/bash] apacheをリスタートします。 [bash] service httpd restart [/bash] 再度セットアップをはじめます。 ここで管理ユーザーとパスワード、使用するDBをPostgreSQLを設定します。 Finish Setupを選択します。 ここでoc_ユーザー名にテーブル作成権限がない、というエラーが出ましたので、owncloudデータベースに権限を与えます。 [bash] su – postgres psql GRANT ALL PRIVILEGES ON DATABASE owncloud TO oc_ユーザー名; [/bash] 再度セットアップを行うと、無事インストールが終了しました。 owncloud/config/config.php に [text] 'forcessl' => true, [/text] と加えておくとssl接続に限定されます。   インストール後の利用方法 ひとまず管理者でログインし、動作を確認しましょう。 新規ボタンでファイルをアップロードできます。 DropboxのWebを利用したことがあれば、すぐに操作方法はわかります。 管理者であれば、左下の設定アイコンからメニューを出して、ユーザーを追加できます。 その他にもプラグインや、全体設定などを操作することができます。この辺りはDropboxにはない操作ですので、いろいろ試してみてください。 WebDAVですので、 [text] https://yourhost/owncloud/remote.php/webdav/ [/text] でアクセスできます。 PC・スマートフォンのクライアント PC・Mac・iOS・Android各クライアントで動作を確認しました。 http://owncloud.org/support/install/ PC・Macでは任意のフォルダと同期、iOS、Androidでは、ダウンロードしたファイルを開いたり、写真をアップロードしたりできます。 PC版 Windows8のスタート画面ではこんな感じです。 Mac版 iPad版 Android版 それぞれ、 https://yourhost/owncloud ユーザー名 パスワード を入力して、認証が通れば、すぐに使用可能です。 PC・Mac版は無料、iOSは85円、Androidは99円(記事作成時の価格)でした。 セキュリティーなど httpsでの接続でなければ、経路の暗号化はできませんし、公的認証でなければ成りすましを防ぐ方法はないので、SSLの公的認証は必須と言えるでしょう。 それさえクリアできれば、細かい使い勝手の差はありますが、Dropbox等と同じように利用し始めることができます。 少なくとも自己管理できる範囲で、状況を把握でき、独自運用できるものとしては、かなり簡単な仕組みです。 一通りのLinuxOSの構築ができていれば、1~2時間もあれば、十分使い始められます。 ファイルはownCloudディレクトリ内に暗号化されずに保管されます。 .htaccessによって、外部からのアクセスはできませんが、サーバーの管理権限があれば、自由に閲覧、移動、削除などが可能です。 プラグインによって、保管ディレクトリの暗号化はできますが、その際は制約があるようです。 プラグインによって、様々な機能を追加できるのもownCloudの利点ですが、それによる不都合も出てくる可能性は考慮すべきです。 運用にあたっては、ownCloudの脆弱性、Apacheの脆弱性などについて、情報収集が必要となりそうです。 あとはユーザー名、パスワードのみの認証ですので、十分複雑なパスワードを設定する必要があります。 VPNでさらに通信の暗号化や、iptablesによって公開するグローバルIPアドレスなどを自社の各拠点や取引先に限定する、などを行えば、さらにセキュリティーの向上が望めるのは自己管理のサーバーならではの利点でしょう。

  • シスキュー技術部

UPnP脆弱性

noimage

UPnP脆弱性

UPnP(ユニバーサルプラグアンドプレイ)機能をルーターなどに実装するにあたり、libupnpというライブラリを利用している場合、外部から攻撃を受けてしまう脆弱性が話題となっています。 US-CERT(米国の情報セキュリティ機関)がUPnP対応ルータが、該当するライブラリを利用している場合はUPnP機能を無効にするように勧告を出しています。 UPnPはかなりありふれた技術で、ネットワークに接続した機器を自動的に判別し、ネットワークの外部や内部での相互の接続を自動的に行えるような仕組みです。 Liveメッセンジャーや、Skypeなどで外部との接続を容易にするために、UPnPを利用するオプションがあります。 弊社ではヤマハのルーターを利用していますので、この脆弱性の影響を受けるのか、サポートに確認しました。 ヤマハでは当社で使用しているルータを含め、UPnPの実装にlibupnpの利用は行っていない旨の回答をいただきました。 ユーザーの不安に対し、迅速な対応を頂いたヤマハ株式会社様には感謝します。 国内のセキュリテイ機関、JPCERT/CCからも下記のリリースが出ております。 http://jvn.jp/cert/JVNVU90348117/

  • シスキュー技術部

MacでSparseBundleImageを利用した仮想マシンバックアップ

noimage

MacでSparseBundleImageを利用した仮想マシンバックアップ

前回、iMacでWindows8を実際に使ってみるために、VMWareFusion5を使って仮想マシンとしてインストールしました。 今回、仮想マシンを効率よくバックアップするために、少し複雑な手順を踏んでいきます。 特に複雑なことをしなくても、一般的なインストール方法でも十分利用できます。 ただTimeMachineで仮想マシンをバックアップすると、毎回かなり大きな転送量になり、TimeMachine用のドライブの使用効率が悪くなるため、別の手段でバックアップを試みることとします。 この手順の中でターミナルでコマンドを入力する必要があります。 仮想マシンのバックアップについて 仮想マシンファイル.vmwarevmは一つのファイルとして見えますが、内部でディレクトリの構造となっています。パッケージの内容を表示とすると、これを見ることができます。 仮想マシンファイルの内部では、仮想ハードディスク.vmdkがおよそ2GB単位で分割されています。 仮想マシン内に変更が加えられた場合は、このvmdkファイル単位でファイルの変更が行われます。 TimeMachineでバックアップを行う場合、仮想ハードディスク単位で、変更のあったファイルはすべて履歴管理されますので、TimeMachineへ書き込まれる量は数GB単位となります。 単純に仮想マシンを起動して、シャットダウンするだけでも、TimeMachineには数GBからの差分の書き込みが行われます。 そのため、Macで仮想マシンを利用されている方で、TimeMachineから仮想マシンフォルダを除外ファイルとされている方も多いです。 そうなると、TimeMachineからの復元を行う際に、仮想マシンが一切復元されず、仮想マシンに保存されていたデータを含めすべてを失ってしまうことになります。 今回、仮想マシンファイルはTimeMachineのバックアップからは除外し、別の仕組みでバックアップを行うこととします。 スパースバンドルディスクの作成 スパースバンドルディスク(Sparse Bundle Disk Image)とは、Mac OSの上で一つのディスクイメージとして認識されますが、内部では8MBの小さなファイルに分割されたディレクトリ構造のものをいいます。仮想ディスクの一つです。 読み書きなどは、一つのドライブに対して行うのと同一で、処理としても大きな負担になることはありません。 このスパースバンドルディスク内に格納されたファイルが変更された場合、小さなファイル単位で変更のあった部分だけ、更新されます。 これに今回仮想マシンをインストールします。 DiskUtilityで新規イメージを作成し、名前や、フォーマット、サイズなどを設定します。 今回は60GBの容量をあらかじめ指定し、フォーマットにはMac標準のMacOS拡張(ジャーナリング)を選択。イメージフォーマットはスパースバンドル・ディスクイメージを選択すれば、スパースバンドルディスクが作成されます。 60GBの容量を設定すると、即時60GBの容量が確保されるのではなく、必要な分だけ確保されることになります。 またイメージ作成後の容量の増加なども可能です。 このようなファイルが出来上がります。これをダブルクリックすることで、ディスクイメージとしてマウントされます。 このマウントされたディスクに仮想マシンを作成します。 Windows8のインストール 前回の手順と同じですが、VMWareのセットアップの際に下記の画面で設定を変更する必要があります。 設定のカスタマイズで、仮想マシンの保存場所をスパースバンドルディスクイメージ内に設定します。 rsyncによる仮想マシンのバックアップ まずTimeMachineのバックアップ対象からスパースバンドルディスクイメージを除外します。 ターミナルからrsyncコマンドでこれを外付けのハードディスクにバックアップします。 例として、 [bash] rsync -aur --delete --progress "/Users/username/documents/Virtual Machines.localized" /Volumes/HDDNAME/VMWareBackup [/bash] という感じで、ローカルバックアップでは [bash] rsync –aur ––delete -–progress コピー元ディレクトリ コピー先ディレクトリ [/bash] と指定します。 この手順でsparsebundleファイルをバックアップ先のハードディスク内のフォルダに同期するように設定します。 コピーされているファイルが一覧で表示されますが、 Virtual Machines.localized/VirtualMachine.sparsebundle/bands/c27 8388608 100%   10.87MB/s    0:00:00 (xfer#49, to-check=292/3186) このような形で、スパースバンドル内の8MBのファイルがコピーされていることがわかります。 二回目以降の実行からは、変更のあったファイルのみの同期となります。 sent 856838334 bytes  received 2292 bytes  114245416.80 bytes/sec total size is 25043844704  speedup is 29.23 実行結果がこのように表示されますが、トータル25GBの仮想マシンファイルのうち856MBが同期されたことがわかります。 rsyncの自動実行 これをシェルスクリプトにして、ログイン時に自動実行します。 viなどを利用し、先ほどのrsyncコマンドをシェルスクリプトにし、chmodで実行権限を与えます。 [bash] vi vmbackup.sh [/bash] iを押して入力モードにし、 rsync -aur --delete --progress "/Users/username/documents/Virtual Machines.localized" /Volumes/HDDNAME/VMWareBackup のように先ほど成功したrsyncコマンドを貼り付け、[ESC]:wqで保存します。 これに [bash] chmod 755 vmbackup.sh [/bash] として実行権限を与えます。 これをログイン時に自動実行・定期実行するには、plistを作ってlaunchdに登録する必要があります。 Linuxなどではcronを利用しますが、OS Xではlaunchdを利用することが推奨されています。 launchdに登録するにはXMLを書く必要があり、思い通りに動作するXMLを作成するのが手間な場合は、Lingon3をMacAppStoreから購入して使用するのが便利です。 https://itunes.apple.com/jp/app/lingon-3/id450201424?mt=12 Lingon3を利用すれば、簡単な操作でplistファイルを作成し、launchdに登録できます。高価なアプリではありませんので、便利さから考えれば、十分な価値はあります。 Lingon3を起動し、NewJobをクリックし、ファイル名をlocalhost.vmbackupといったplist名を設定します。 Whatに先ほど作成したをシェルスクリプトを指定し、whenにAt login and at loadにチェックを入れます。 Every 1 Hoursなどとしておくと、一時間おきに実行されます。 Save&Loadを押し、plistをlaunchdに登録します。 あとは、スパースバンドルディスクをログイン時にマウントする手順です。 ログイン時にスパースバンドルを自動マウントする スパースバンドルディスクをマウントするためのターミナルでのコマンドは、 [bash] hdiutil attach sparsebundleファイル [/bash] になります。 これをrsync同様にシェルスクリプトにし、実行権限を与えます。 Lingon3で同様にplistを作成し、Login時に実行するように設定します。 これで仮想マシンの作成とバックアップの一通りの設定は終わりです。 まとめ かなり長いエントリとなりましたが、Macなりの機能を活かした方法となりました。 仮想マシンファイルも履歴管理したい場合は、TimeMachineを利用するのが手っ取り早いですが、仮想マシンを使っている間、かなりのサイズのTimeMachineドライブへの書き込みが発生してしまいます。 ユーザーファイルをホストOSの共有フォルダに持たせ、そこをTimeMachine管理とすれば、仮想マシンに何らかの障害が発生しても、再インストールの手間のみと割り切って利用するのも一つの方法です。 単純なバックアップとしては、.vmwarevmファイルを外部ハードディスクなど日に一度でもコピーしておけば、前の日までのバックアップは確保できます。 実用的なWindows仮想マシンは、Officeスイートやアップデートなどで、どうしても数十GBからの容量が必要となりますので、今回Windows8をそれなりに使っていくうえで、これだけ下準備を行ってみました。 まだこれで長期間実用したわけではないので、どのような問題が起こるのか、どう使っていけばよいか、未知数な部分はありますが、今後またBlogなどで報告したいと思います。 (2013/3/29更新) 使用しているうちに容量が足りなくなったため、 SparseBundle上の仮想マシンイメージの拡張 という記事を投稿しました。