Hack the World!

プログラミングや,ネットワークに関する話題を取り扱っています.知識をつけて,優雅にお仕事するのを目指しています.

閉鎖環境でも 超簡単に Bash を一括アップデートする。 #shellshock #ansiblejp thanks ansible

弊社は観測範囲では外部ユーザーがコマンド実行できる様なサービスではないので(一体何をしているのかはかなり謎ですが)、どうやらCGIとかを使ってない様なので問題はなかったようです。

が、一応念のためシナリオは作って準備しておいたので、このまま眠らせておくのはかわいそうなので公開しようと思います。

 

閉鎖環境でない&RedHat系なら、こちらの記事が参考になるかと思います。

Ansible で、複数サーバの RPM を一括で更新する - Shin x blog

Patch Shellshock)with Ansible - Raymii.org

 

Ansibleを知らない人の為に

 

Ansible は、最近話題のDeploymentツールです。

teraterm マクロの発展形みたいなもので、構成情報(操作するホスト)、とシナリオ(playbook、操作する内容)を書くだけの、シンプルな設定だけで使える様になるので、非常にお勧めです。

大きいところだと、Evernote さんなんかが使っている事例が公開されています。

 


Ansible is Simple IT Automation

 

今回のBashアップデートツール を使う前提条件

■OS 

Ansible実行ホスト:Linux

Ansibleターゲットホスト:LinuxRedhat系、Debian系)

 

python(ターゲットホスト)

python2.5以上が入っている事が前提条件となっており、

python2.4の入っているOS(RHEL、CentOS5系)では、ついでにsimple-jsonパッケージが必要です。(なので、python2.4しか入っていない場合は、手でやったほうがいいでしょう。ついでに次回以降のために、simple-jsonを入れておくといいかも。)

 

ちなみに今回のBashのアップデートは完璧ではないので、また次回も必ず利用します。

(追記)

RedHat 系は、修正が出たようなのでぜひツールを使って(検証して)インストールしてみてください。

Bug 1146319 – CVE-2014-7169 bash: code execution via specially-crafted environment (Incomplete fix for CVE-2014-6271) 

 

適当に持ってきたdebianは、pythonすら入ってなかったので失敗しました。

別途、sudo apt-get install python 等を実行すると、Ansibleが動作する様になりました。

failed: [debian] => {"failed": true, "parsed": false}
invalid output was: SUDO-SUCCESS-xwpgdtgjefwmpfzeksmjbkehwpvwlzgh
/bin/sh: /usr/bin/python: not found

 

 

Ansibleを使ったBashアップデートツールの概要

 

以下が概要図となっています。

実行ホスト側に、ansibleとそれぞれ便利なツール類のインストールが必要です。

監視サーバなどが該当するかと思われます。

(力尽きたので、インストールの説明までならず。。。)

 

 

で、bash_update.shを実行すると、各サーバのBashをアップデートしてくれます。

f:id:graceful_life:20140927230509p:plain

 

ツールの動作は以下のようになっています。

  1. 事前作業:まずはディストリビューションの確認
  2. 事前作業:/var/tmp/bash_update という作業用ディレクトリの作成
  3. 事前作業:ターゲットサーバにファイルの転送
  4. 作業  :Bashのアップデート
  5. 事後作業:エビデンス収集、rpm -q bash の実行

 

 

とりあえず心配な人たちのために、公開時の状態ではパッケージのアップデートは行わないようにしてあります。

必要なファイルを、files_to_debian/files_to_redhatというディレクトリを作成して、中にファイルを入れる&ymlファイルのpkg_filenameを正しく入力するとアップデートが行われる様になっています。

 

 

必要なパッケージファイルは以下からダウンロードしましょう。

RPM resource bash

Ubuntu – Package Search Results -- bash

 

実行イメージ

以下の様な感じで実行されます。

いきなりsudo を聞かれますが、Bashのアップデートに使われます。

ターゲット側のsudo使えるアカウントが必要になりますので、アカウントが同じ場合のみ使えます。

f:id:graceful_life:20140928012324p:plain

--stepオプションをデフォルトで付けてくれるようにしてあります。

ついでに、stepオプションの説明も出るにしてみました。

 

 

デフォルトでは、適当なファイル名が指定されているので、途中で警告メッセージが出るようにしてあります。

f:id:graceful_life:20140928012440p:plain

実行されると、ターゲット側のサーバの /var/tmp/bash_update というディレクトリにログが残るようになっています。

また、実行ホスト側の./logs/[ホスト名]/bash_update.tar.gz というファイルが収集されているので、正しく実行されたかご確認ください。

rpm -q bash 等の実行結果も含まれています。

(ちゃんとバージョン比較までやってやれればよかったのですが、日々バージョン変わるので・・・)

ファイル

今回使ったファイルは以下に用意しておきました。


bash update

最後に

Ansible非常に便利ですが、閉鎖環境内で暮らすことを余儀なくされている方は追加でパッケージインストールなどはもってのほかだ、と曰われSAN値を削られている物と思われますが、

日々負けず、めげず、努力しつつ、啓蒙していけば数年もすればやって当たり前のような世界が切り開けます。

その時のために、(見捨てて他社に転職)継続して、成果を発表しつづけましょう。

 

最近は昔よりこういうツール類を使ってあたりまえだよね、という空気が出てきた(と言うか、洗脳が完了した)ので、

ぜひ皆様方の会社でもコレを気に交渉してAnsibleを提案してみましょう。

 

 

 

Thanks Ansible!


Shellshock

 

 

あ、インストール/踏み台のことを書き忘れた。。。。

また次回

 

(追記)インストール方法を追加しました。

 

 

 

他にも試して欲しいディストリビューションとかあったら、ご連絡ください。