OS X bashの「shellshock」に対応するパッチ適用作業手順

先日、Appleから OS Xbash アップデートがリリースされましたが、バージョンを見ると3.2.53となっており、その後の脅威への対応が充分とは言えません。

https://github.com/hannob/bashcheck
上記のテストにおいて、

CVE-2014-6271
CVE-2014-7169
CVE-2014-7186
CVE-2014-7187
CVE-2014-6277
CVE-2014-6278

それぞれに対する結果は
http://qiita.com/kkdd/items/f3f94f129ae9210c810d
と不完全なものです。

そこで、自分でパッチを当てたのですが、その際の作業手順を掲載します。


前提条件: Xcodeがインストールされていること。


1. 現在のバージョン確認
$ bash --version
$ sh --version

2. bashの入手とパッチ当て、build
$ mkdir bash-fix
$ cd bash-fix/
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2/
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ xcodebuild

3. buildしたbashのバージョン確認
$ ./build/Release/bash --version
$ ./build/Release/sh --version

4. 既存のbashをバックアップし、buildしたbashを/bin にコピー。バックアップファイルのファイルモードを変更
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
$ sudo chmod a-x /bin/bash.old /bin/sh.old

5. バージョン確認
$ bash --version
$ sh --version

3.2.57
となっていれば完了

6. 作業ディレクトリの削除
$ cd ../../
$ rm -rf bash-fix



####
#$ curl https://opensource.apple.com/tarballs/bash/bash-92.1.2.tar.gz | tar zxf -
#で行わないのは、92.1.2に54パッチを当てると以下の結果が出力がされる為。
#patching file variables.c
#Hunk #1 succeeded at 83 with fuzz 1 (offset 8 lines).
#Hunk #2 FAILED at 255.
#Hunk #3 FAILED at 323.
#Hunk #4 FAILED at 354.
#Hunk #5 FAILED at 2235.
#Hunk #6 FAILED at 3026.
#Hunk #7 FAILED at 3136.
#6 out of 7 hunks FAILED -- saving rejects to file variables.c.rej
#patching file patchlevel.h
####

Linuxなどならyumで一発だろうけれど、Mac
面倒ですね。
瞬殺で出来る方法があれば是非教えてくださいm(_ _)m

PHPでの開発環境構築とCakePHPのインストール・設定でこけた点

PHPの勉強をしようと思い、本を参考にして環境を構築してたらCakePHPの設定でこけたのでメモ。

所謂「応用インストール」というやつで、webRootではなく別ディレクトリに置くやり方。
事前にApacheやらMySQLやらのインストール・設定は済ませておくとして、

CakePHPは1.3.x系をダウンロード、展開し、セキュリティ関連箇所として、app/config/core.php のソルト値、サイファシード値、セキュリティレベルの箇所を変更。
データベースに関する設定を app/config/database.php で変更する。
最後にCakePHPのフォルダ設定で、APP_DIR、ROOT、CAKE_CORE_INCLUDE_PATHの定義を環境に合わせて変更する。

あとはサーバへファイルをコピーし、app/tmpをapacheグループ権限で動くように変更し、ブラウザでサーバアドレス/cake/ とやってやると、とりあえずエラーは出なかった。

問題はここからで、モデルとコントローラだけ素組みして動かそうとしたら全く持って動かない。というかnot foundを食らった。
ここでGoogle先生の登場。

https://github.com/WyriHaximus/cakephp-docs/blob/master/ja/installation/advanced-installation.rst

このサイトが参考になった。
使用マシン(mac)で.htaccessが不可視となっていたので盲点だった。というかアップの仕方が良くなかったのかな。
当然ながらこいつの中身も変えてやらないといけないし、Apacheの設定(httpd.conf)も変えなきゃ行けない。

mod_rewriteの場所は自分の環境に合わせてパスを指定。

先の.htaccessを以下の内容に変更することを忘れずに。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

iOSで地図アプリを作ってみた

来月のWWDCで恐らく発表されるiOS6において、デフォルトで入っているMapアプリが大幅に変更されるようですね。
で、その情報は耳に入ってはいたのにも関わらず、とりあえずMap系アプリの習作でも作ってみるかということで、やってみました。


地図を表示して現在地を表示する、というのはコードを組まなくてもスパッと出来ちゃうので、これはあまり面白みがないなと思い、現在地のアノテーションに緯度・経度を表示してみようかということにチャレンジ。

というのも、逆ジオコーディングの時にこの情報が必要なので、その手前までやってしまおう、というのが今回の主な狙いでした。


簡単に手順を書いてみます。

まずは地図表示の為に、MapKitフレームワークを、緯度・経度も扱うので、CoreLocationフレームワークを追加。

CLLocationManagerクラスのインスタンスをヘッダで宣言、実装の方にインスタンスを生成。
CLLocationManagerのメソッドと、そのデリゲートメソッドで必要なものについては用意しておく。

今回は、didUpdateUserLocationメソッドで緯度・経度のアノテーションを追加、という処理に。
didUpdateUserLocationでアノテーションを追加するってどうよ、と思われるかもですが、現在地というのは移動すれば当然変化するものなので、これをリアルタイムに表示させる為にこちらで処理をしたわけです。

で、完成したのがこんな具合です。


Eclipseのアップデートではまりました。

久方ぶりにEclipseを起動したのでアップデートをかけると、

HTTP Server 'Internal Error': http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/releases/0.4.0/content.xml
HttpClient connection error response code 500.

なんて出たんですね。

3.7から使い始めたペーペーな私からすると訳がわからず。
とりあえずぐぐってみるも、既存環境からのアップデート方法に言及しているサイトがググり方が悪いせいか見当たらず。
っていうかいつの間にバージョンが3.7.2になってるんだというところから始まったわけです。

というわけで、自力でなんとか解決せねばならんということで、
Preference→Install/Update→Available Software Sites
へ移動し、上記のサイトのチェックを外すと、なんなくアップデートできました。

ま、どうせ近々3.8がでるんでしょうが、最新版にしておかないと気持ち悪いタイプなので、備忘録的に書いてみました。

Time Machineからの復旧には要注意

追記:2012/04/01
Command+option+Rにて、Recovery HDを作れることを後に思い出した。
これは思いっきり誤りです。
このコマンドは、強制的にインターネット復元するときです。
しかし、どのコマンドかは忘れましたが、確かRecovery HD、もしくはX Based Systemを強制的に作れるコマンドがあった覚えがあるのですが・・・。
謹んで訂正いたします。

  • -

Mac OS X Lionにて、マシン設定の復旧作業をするべくCommand+ R でRecovery HDから起動。

一覧からTime Machine復元を選択し、復旧作業自体は成功したが、File Vault2を有効に出来ない。
理由は、Recovery HDからTime Machineからの復旧を行うと、Recovery HDがパーティションから消えてしまうため。

このため、Lionをインストールし、初期設定時にTime Machineから移行する必要がある。

これは偶然かもしれないが、全ての項目にチェックを入れて転送すると、マシン設定ファイル転送時にハングする。
※環境によっては、ここで問題なく完了する場合があると考えられるが、あくまで当方の環境においてはうまくいかなかった。

そこで、ユーザー、アプリケーションのみにチェックを入れた状態で転送することにより、復旧作業を再度行って見たが、当方の環境ではこれでも再びハングが起きた。
恐らく、既存環境に残っているアプリケーションの動作・設定によるものと思われる。

従って、それぞれの環境によってはLionインストール後の初期設定時の環境移行で問題なく動作する場合も考えられる。

結論として、当方の環境においてはTime Machineからの復旧、及び移行作業はうまく動作しないと判断し、通常のインストール後、アプリケーション、書類などを全て手動で復元することとなった。

Mountain Lion ファーストインプレッション

先日、Mac OS Xの新バージョンであるMountain Lionのプレビュー版を試す機会があった。

第一印象としては、「iOSのいいとこどり」


Appleのサイトを見れば一目瞭然の話ではあるものの、実際に触ってみるのとサイトでみるのとではやはり違う。
通知センターやリマインダー、メモがMailアプリから分離されているなど、LionのそれよりもよりiOSとの親和性が高まっている。

しかし、これらはどちらかと言えば表面的なことで、一番の注目点はGatekeeperだと思われる。
http://www.apple.com/jp/macosx/mountain-lion/security.html

App Storeからのみを信頼するか、App Storeからダウンロードしたアプリと信頼性のあるデベロッパからのもののみか、すべてを許可するか。
マルウェアなど、昨今のセキュリティの危うさを考えると、こうした取り組みは素晴らしいと思う。
問題点があるとするならば、アプリの開発者は皆Appleデベロッパー登録をしなければならなくなることとなり、自由に配布する文化というものが廃れていくことだろうか。

しかし、安全なコンピューティング環境を望む人であれば、これは歓迎すべき点だろうし、iPhone/iPadを使っている人なら、何の躊躇もなく受け入れられる筈だ。
Appleの狙いというか、したたかさ、とでも言えばいいのだろうか。
その戦略も非常に明確であり、優れている点であると言える。


試した中で気になったのが、既存のアプリが動かない、正常に動作しない、インストールすら出来ない、といった点だろうか。
中身としてどの程度Lionから変更が加えられているかは定かではないが、この点は是非注意したい。
ちなみに、セキュリティ対策ソフトはNortonとウィルスバスターを試してみたが、Nortonはインストールすらできず、ウィルスバスターはインストールは出来たが、完了直後に見事にハングした。

しかし、Gatekeeperが浸透し、デベロッパの全てがGatekeeperに対応したときは、これらのソフトがある程度駆逐される可能性がある。OSに余計な付加をかけるセキュリティ対策ソフトを入れずに済むことは誰しもが歓迎すべきことだが、その分、OSの信頼性が担保されなければ、何の意味も持たないのだから、その点は今後のAppleの取り組みに注目すべきだろう。