- ベストアンサー
代替のシェルに入れ替えるための、具体的な方法
少し前から、bashの脆弱性の問題が指摘されていると思うのですが、例えばJPCERTは その対策の一つとして 「GNU bash を代替のシェルに入れ替える」 というものを上げています。 代替のシェルに入れ替える場合の具体的な方法ですが、例えば、(/etc/passwd等の)ログイン情報を見て、bashがログインシェルに設定されているユーザを、zsh等に書き換えて、再起動してしまう、というやり方で、十分なのでしょうか。 今現在問題に直面しているわけではないのですが、「入れ替え」の方法について、教えていただければと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
各ユーザーが使用するログインシェルも問題ですが、それ以上にバッチ処理などプログラムで使用するシェルも問題です。 通常 /bin/sh を実行シェルとして使用する事が多いですが、 /bin/sh を見ると bash にシンボリックリンクが張ってある事が多いです。 これのシンボリックリンクの向け先を別のシェルに変えると言った事も必要になってくるでしょう。 但し、シェルを変えたことでプログラムが動かなくなることも考えられますので、十分な検証が必要です。 また /etc/default/useradd に新規ユーザーを作成するときのテンプレートがありますが、この中身を書き換えてデフォルトのログインシェルを変更する事も必要かもしれませんね。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
現状では対策パッチが出ているので、別のシェルに入れ替える必要は無くて、bashを最新版にすれば良いです。 別のシェルにするというのはパッチが出る前の暫定対応の話です。 入れ替えるとすると、例えば /bin/zsh に置き換えるとすると、 # rm /bin/sh ; ln -s /bin/zsh /bin/sh # rm /bin/bash ; ln -s /bin/zsh /bin/bash のように、/bin/sh と /bin/bash をzshへのシンボリックリンクにします。作業としてはそれだけです。再起動の必要はありません。 もちろん、事前に、すべてのシェルスクリプトがzshで問題なく動くかの確認は必要ですが。
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。yumもapt-getも使えないものでしたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。
- yambejp
- ベストアンサー率51% (3827/7415)
>zsh等に書き換えて、再起動してしまう ここでいう書き換えるというのはpasswdファイルを書き換えるということ? 再起動というのはサーバーを再起動すということ? chshで書き換える方が現実的では? またpsでbashでlogin情報があればユーザーに通知したうえで、 killしちゃえば、再起動することもないのでは? そのうえでbashを絶対につかわないつもりならリネームしてシンボリックリンクで nologinにリンクしてしておくとか・・・ ユーザーのスクリプトにbashを前提として書いているものがあれば 都度書き換えてもらうしかないとは思いますが・・・
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。バリバリbashのスクリプトがありましたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。
お礼
確認用スクリプトを見直し、アップデートが確認できました。 回答ありがとうございました。
補足
ありがとうございました。バリバリbashのスクリプトがありましたので、教えていただいた情報とgooleの情報を総合し、結果的には、ソースからビルドしなおし(ソースに12個のパッチを当て)、make insatllし、/bin/bashをmvし、 ln -s /usr/local/bin/bash /bin/bash して、アップデートを完了しました。 ご教授いただいた情報を感謝いたします。 回答を頂いた3人の方に同じ質問で恐縮ですが、アップデート前は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が vulnerable this is a test であったのが、アップデート後は # env x='() { :;}; echo vulnerable' bash -c "echo this is a test" の結果が、 this is a test になっています。 これで対策が完了したと考えて大丈夫でしょうか。 なお、bash -versoinの結果は、アップデート前後も変りありません。