[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:31101] Re: install woody using USB FDD



佐野@浜松です。

In <20011223140843.2124B53814@xxxxxxxxxxxxxxxxxxxxxx>,
  on "Sun, 23 Dec 2001 23:14:15 +0900',
 Kenshi Muto <kmuto@xxxxxxxxxxxxxxx> さん wrote:

> 武藤@Debianぷろじぇくとです。

こんばんは :)

> At Sun, 23 Dec 2001 22:59:07 +0900,
> Taketoshi Sano wrote:
> > 実はこの方法で 2.4.16 なカーネルに入れ換えた usbfdboot な
> > フロッピーを作成しようとしてたんですが、圧縮された root
> > filesystem を 2 枚目のフロッピーからロードする、ところまでは
> > できたものの、展開が終了してマウントした直後に「init が
> > 見つからない」というエラーで終ってしまいました。
> 
> これ、僕も2.4.17rc1入れたカーネル使おうとして悩んでいたんですが、
> むつみさんから「/lib/ld*をchmod a+xセヨ」という指令を受け、
> やってみたらできるようになりました。

カーネルコードを読むと、そもそもそうなっているべきもの、と
いう風に読めますね。2.2.19 でも fs/exec.c には

/*
 * Note that a shared library must be both readable and executable due to
 * security reasons.
 *
 * Also note that we take the address to load from from the file itself.
 */

というコメントがありますし。

でも、調べてみた範囲だと 2.4.9 は 2.2.19 や 2.4.5 同様に
 /lib/ld-* に実行属性が無くても init を execve できている
みたいですね。一方 2.4.13 では動きませんでした。

なんとなく 2.4.10-11 あたりのセキュリティ fix でこのへんも
修正されたのかなという気が。未確認ですけど。

一応 2.4.9 と 2.4.13 で fs/exec.c の diff を取ってみると

@@ -347,8 +348,11 @@
        if (!err) {
                inode = nd.dentry->d_inode;
                file = ERR_PTR(-EACCES);
-               if (!IS_NOEXEC(inode) && S_ISREG(inode->i_mode)) {
+               if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
+                   S_ISREG(inode->i_mode)) {
                        int err = permission(inode, MAY_EXEC);
+                       if (!err && !(inode->i_mode & 0111))
+                               err = -EACCES;
                        file = ERR_PTR(err);
                        if (!err) {
                                file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);

このあたりくらいにしか EXEC のチェックは出てこないみたい。
この MNT_NOEXEC のチェックを IS_NOEXEC に戻したら動くのかな ?
あ、いや、inode->imode & 0111 のチェックでエラーになっている
可能性のほうが高いかな。ここをコメントアウトすれば 2.4.16 でも
動くかも。

 exec.c には他にも

asmlinkage long sys_uselib(const char * library)
(中略)
        error = permission(nd.dentry->d_inode, MAY_READ | MAY_EXEC);
        if (error)
                goto exit;
(中略)

というチェックがあるんですが、これは 2.4.9 にも含まれていて、
2.4.9 では動いていたから、たぶん問題無いような。

> #あとの問題は、2.4ベースだとmodutilsを新しくしないとちゃんと使えない
>   んだけど、そうするとpotatoのインストーラがこれに対応していない、と
>   いうことかしら。とりあえず南谷さん他向けのpotato CD-Image for blinder
>   なイメージはできたり。

まあとりあえず base をインストールするだけなら、modutils を
使わなくても後から設定できるだろうからいいかなと。

In <y5ar8q98xns.fsf@xxxxxxxxxxxxxxxxxxxx>,
  on "Thu, 6 Dec 2001 03:45:14 +0900', I wrote:

> > 佐野さんのrescue.binを使う場合、
> > swap作成、root(target)パーティションのマウントまでは手動でやる必要がありました。

> このへん、たぶん devfs の関係で /dev/ 以下がインストーラの
> 想定している状態と違ってしまっているのが問題なんだろうと
> 思ってます。
> 
> そのうちに時間が取れたら devfs のサポートを外したカーネルで
> 作り直してみます。(できれば lilo fd の作成方法の説明も)

 2.4.9 で devfs のサポートを外したカーネルを作ってみて
試してみましたが、これなら普通に使えそうです。

あとで rescue image の中のカーネルを 2.4.9 (あるいはもし
上記の方法でうまく potato の root がそのまま使えるように
なれば 2.4.16) に入れ換えて
 http://www.debian.or.jp/~sano/usbfdboot
に置いておきます。

-- 
 # (わたしのおうちは浜松市、アカウミガメのふるさとの街)
   <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)