印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux 古い Linux の bash の更新に checkinstall を使うのは危険

サポートの切れた古い Vine Linux の Gnu bash を checkinstall で更新しようとしたところ失敗した。その記録。

■ ■ ■

はじめに

Gnu bash に重大な脆弱性が発見された (GNU bash の脆弱性に関する注意喚起)。サーバを公開している場合,外部からのチェックも容易にされてしまうらしく,深刻である。この問題は「Shellshock」という名前がつけられ,関連情報を入手しやすくなっている。

さて,この問題に対し,Linux の各ディストリビューションからは更新版のパッケージが公開されていて,新しい OS であれば更新が簡単なのだが,古い OS は自己対応が必要になる。

checkinstall を用いた更新と失敗

このブログサーバは Vine Linux 4.2 であり,bash の更新パッケージの適用範囲外である。そこでソースからビルドしてこれを RPM にパッケージ化して更新することにした。Gnu では,古いバージョンの bash であっても,しっかりとパッチが公開されているというのが素晴らしい。しかし,ソースファイルにはパッケージ管理するためのビルドに必要な SPEC ファイルが用意されていない。そこで,CheckInstall - Wikipedia を利用してパッケージを作り,インストールすることにした。

ただし,この件に関しては,この方法は失敗する。checkinstall のバージョンは 1.6.1 である。

以下はその手順である。

  1. checkinstall を apt-get でインストール
  2. bash のパッケージのバージョンを apt-cache で調査
  3. bash のバージョンを bash -version で調査
  4. ftp://ftp.gnu.org/gnu/bash/ から bash のソースとパッチを入手
  5. bash の tar.gz を展開して ./configure 後 make
  6. checkinstall を実行するが失敗

checkinstall に失敗すると,新しい bash がインストールされないだけでなく,現在使用中の古い bash も削除されてしまう。ログインシェルがなくなってしまうのはとても危険である。もしこうなってしまった場合は,ログアウトする前に rpm で新しい bash のパッケージをリストから削除して,古いパッケージを強制的にインストールする必要がある。

まずは確認。

 rpm -qa | grep bash
bash-2.05b-1
bash-2.05b-0vl3

bash のパッケージが2つリストされていて,bash-2.05b-1 が checkinstall で入った新しいパッケージ,bash-2.05b-0vl3 は元から入っていたパッケージである。ただし,リストされているだけでどちらも正しくインストールされていないことに注意する。古いパッケージをアンインストールした後,新しいパッケージのインストールに失敗しているからだ。その祥子に,

# which bash
/usr/bin/which: no bash in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin)

となって,/bin/bash が見つからない。新しく入っている「ふりをしている」パッケージをアンインストールする。

# rpm -e bash-2.05b-1

そして古いパッケージの強制再インストール。

# apt-get --reinstall install bash

この一連の手続きは,checkinstall が失敗した直後であれば,古いターミナルが古い bash で動いているので,そのまま実行できる。しかし,新しくログインはできないということに注意しなければならない。したがって,作業する前に前回の記事のように別シェルの root アカウントでログインするか (nlog(n): root 権限の別ユーザを作成する),あらかじめログインシェルを変更しておいた root で作業する必要がある。

まとめ

今回のこの作業で分かったのは,checkinstall でシェルを更新するのは慎重になった方がいいということである。bash の更新については,SPEC ファイルを書いてパッケージを更新するという「比較的」正しい方法で行うことにする。その方法については次の記事で。

2014年10月15日追記:
書きました (nlog(n): サポート切れ Linux の bash を RPM を自作して更新する)。

Posted by n at 2014-10-14 23:42 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?