.@_hito_ さんのRPMの比較的どうでもいい小技の話を聞こう

1
hito @_hito_

しかしUbuntuのHTTPSまわりは証明書検証漏れ多すぎである。そろそろ色んな方面からキレられそう。

2012-09-01 21:05:31
hito @_hito_

RPMの比較的どうでもいい小技の話をしよう。

2012-09-01 21:41:54
hito @_hito_

RHELのyum updateと互換ディストリビューションのyum updateには実は大きな差がある。それがなにかっつーと、RHELは原則としてHTTPSで保護されていることだ。

2012-09-01 21:42:47
hito @_hito_

現状のRPMの扱いはセキュリティ的には実はちょっとだけ微妙な問題がある。RPMそのものにGPGサインが含まれることだ。この実装だと、GPGキーの検証ルーチンに脆弱性があったときに凄く困ったことになる。

2012-09-01 21:44:13
hito @_hito_

で、実はGPG検証ルーチンはしばしば穴が見つかる。これは「互換ディストリのミラーサーバーにMiTMしてRPMに何かを仕込む」攻撃が結構な現実性を持つことになることを意味する。なにしろyumによるサイン検証はGPGを使ったものなので。

2012-09-01 21:46:03
hito @_hito_

この問題はRHELをsubscription下で使ってる限り食らわない。前述の通りHTTPSで保護されてるから。じゃあ互換ディストリビューション側でもHTTPミラーするか、って話なわけですが、これも上手く行かない。

2012-09-01 21:47:29
hito @_hito_

なんでかってーと、「ミラーサーバーの管理者が仕込めばいつでもOK」だから。本気でRPMの脆弱性をつついて何かしようと思うやつなら、あらかじめふつーの新規ミラーだと思わせておいて、ユーザーが増えてきたところでコンテンツに仕込みを入れる。

2012-09-01 21:48:25
hito @_hito_

で、Red HatがRPMの設計を見なおさないのはある意味で当然なんだけど(だってRHELは影響ないし)、互換ディストリビューション側でyumにapt-getがやってるようなインデックス検証を取り込んだりしないのかなー、と実は前からちょっと思ってる。

2012-09-01 21:49:31
hito @_hito_

なので、もしあなたが互換ディストリビューションの入ったマシンを管理していて、それが比較的重要なマシンであれば、yum download-onlyして、降ってきたRPMを事前に検証するべき。yumにまかせてはいけない。

2012-09-01 21:50:50
hito @_hito_

もちろん、RPMにGPG検証まわりの穴が開いているときは注意する、というモデルでたいていはカバーできるんだけども。

2012-09-01 21:51:43
hito @_hito_

HTTPSまわりの話はおいておいて、RPMには「あるある」罠とゆーのがある。yum updateしてシステム再起動したら、chkconfig的にオフにしたハズのサービスが起動してる! というのは良くある光景だ。

2012-09-01 21:53:40
hito @_hito_

これはRPMに含まれるscriptで勝手にchkconfig <service> onしてるせい。現状の値は無視して、とにかくonにされてしまう。なのでchkconfig --listで一覧を確保しておいて、更新前後で比較するのはお約束だ。

2012-09-01 21:54:52
hito @_hito_

あと、RPMのスクリプトは結構な割合で「ないわー」という処理をかましていることがある。こういうのを避けるためにはやっぱりyum downloadonlyでパッケージを落としてきて、rpm -q --scriptsしてレビューするべき。

2012-09-01 21:55:44
hito @_hito_

同様の挙動として、RPMは更新時、「config file以外は問答無用で上書きする」という特性を持っていたりする。.rpmnewとか.rpmsaveができるのはこいつのせい。

2012-09-01 21:58:51
hito @_hito_

RPMのconfig fileは.specの%configで指定してるファイルと同義。これはrpm -qcでリストできる「設定ファイル」と同等でもある。で、逆に言うと、/etc以下にあってもconfig fileでなければ上書きの危険がある。

2012-09-01 21:59:26
hito @_hito_

いろいろ考えると、yum updateの前にファイルシステムスナップショットを取るか、アップデート対象になるRPMファイルの全ファイルをどこかにバックアップしないと危ない。

2012-09-01 22:00:14
henrich @henrich

@_hito_ debだと dpkg -i みたいなのがちょっと問題。拾って食う人が後を絶たない。

2012-09-01 22:00:34
hito @_hito_

@henrich そーそー。そういう意味ではrpm -iは署名チェックするから安全なんすよね。もっともyumのコンテキストだと「この署名受け入れていい?」とかって聴きやがるけど。

2012-09-01 22:02:48
henrich @henrich

@_hito_ というように、細かいところでは色々とディストリビューションの使い勝手は改良の余地があるわけで、みんな思いついたら簡単な実装とか、pros/consの列挙とかをしてみて提案するのがよいですな。

2012-09-01 22:04:04
hito @_hito_

rpmは実は--prefixと--relocateとゆー極悪な黒魔術が搭載されている。その名の通りインストール時点でprefixを指定する(のと同じ効果のある)効果と、インストール後に同様の挙動をかますもの。たとえば/etc=/usr/local/etcなんてことが可能。

2012-09-01 22:08:35
hito @_hito_

これを使うと、/が超少ない環境であっても/optの以下に全部追い出す、とかいう小技で生きていける。ただし、rpm -qiでパッケージ情報を得たとき、ここで「not relocateable」なやつには効かない。

2012-09-01 22:09:10
hito @_hito_

これとrpmdbを複数持つことで複数のLLを管理ー、とかいう変態な真似ができる。問題はpkgsrc使った方がよさそうだけど。問題はそんな黒魔術誰に管理できんだよってことだけど。

2012-09-01 22:10:15
hito @_hito_

@henrich でもパッケージに署名埋め込むのはあきらかにスジ悪いっすよ。そのルーチンを安全に処理するのは事実上無理だもん。

2012-09-01 22:11:10
hito @_hito_

あとなんだっけ。忘れてるから以上。

2012-09-01 22:12:25
henrich @henrich

@_hito_ まぁねぇ。とりあえずローカルのをdpkgでやるという統一感の無さをaptでも出きるようにするとかのほうが、なんとなーくいいかなぁ

2012-09-01 22:13:17