FreeBSD QandA 464

FreeBSD QandA

Q. コンソールから root でログインしようとしましたが、パスワードを忘れて
   しまいログイン出来ません。どうしたら良いでしょうか?

A. root のパスワードを忘れてしまうなど言語道断です。手始めに security(7) 
   を読むなどして、ちゃんとセキュリティに関して勉強し、ルートの心を学んで
   ください。最近ではインターネットに常時接続されるマシンも多くなっていま
   すから、もし悪意のある攻撃を受けたらひとたまりもないでしょう。これから
   は絶対に忘れないようにするということで、以下に対処方法を説明します。

   まずマシンが動作中であれば、なんとかしてシステムを止めなければなりませ
   ん。shutdown(8) コマンドや CTRL+ALT+DEL キーが使えれば安全にリブートで
   きますが、どちらも不可能であれば、sync(8) コマンドを2,3回タイプしてか
   ら、リセットまたは電源を切るようにしてください。もし sync もできないよ
   うなら…、神様にお祈りするしかないでしょう。

   次にパスワードの変更方法ですが、/etc/ttys で console が `insecure' に
   設定されていると、シングルユーザ・モードのシェルが起動される前に、root
   のパスワード入力を求められてしまいお手あげなので、fixit floppy などを
   利用することになります。デフォルトのままなら console は `secure' です
   ので、シングルユーザ・モードに落して passwd(1) コマンドを使うだけです。

    # If console is marked "insecure", then init will ask for the root password
    # when going to single-user mode.
    console none                            unknown off secure
                                                        ^^^^^^ ここを確認

   1. console が `secure' の場合 (FreeBSD のデフォルト)

    (1) シングルユーザ・モードに落します。

        `shutdown now' でシングルユーザに落します。それができないならリブー
        トして次のような loader(8) のメッセージが表示されたら、スペースバー
        を叩いて autoboot を停止させ、コマンドプロンプトから `boot -s' と
        タイプします。

        Hit [Enter] to boot immediately, or any other key for command prompt.
        Booting [/boot/kernel/kernel] in 7 seconds...

        FreeBSD 2.2.x では "boot:" の表示が出たら "-s [RET]" と入力します。

    (2) "Enter root password, or ^D to go multi-user"
        と表示される場合は、2. の方法を試してください。
        "Enter pathname of shell or RETURN for /bin/sh:"
        と表示されたら、そのままリターンキーを押して次へ進みます。

    (3) 念のためファイルシステムの整合性をチェックします。
        # fsck -p

        システムを強制リセットした場合、ファイルシステムが損傷を受ける可
        能性があります。重大な不整合が発見されたとき `fsck -p' はエラーで
        終了しますので、エラーが報告されたパーティションに対し、個別に 
        fsck(8) をかける必要があります。

    (4) ファイルシステムをマウントします。
        # mount -u /
        # mount -a -t ufs

    (5) ここで、
        # passwd
        として root のパスワードを設定して下さい。

    (6) root のパスワード設定が終わったら
        # exit
        して下さい。OS が起動されます。

   2. console が `insecure' の場合

     要点は別のシステムからブートすることです。その際、厳密に FreeBSD の
     バージョンが同じでなくともかまいませんが、できるだけ同じものを使うこ
     とを勧めます。もし、別の HDD, スライスからブート可能であれば、それを
     使うのも良いですし、"live filesystem" CD/DVD や fixit floppy を使う
     のでもかまいません。ここでは fixit floppy を使うものとして説明します。

   (1) kern.flp, mfsroot.flp でインストーラを起動し、メニューから Fixit 
       モードに入ります (Main Menu -> Fixit -> Floppy または CDROM)。
       マシン構成によっては、kern.flp のカーネルをカスタムカーネルに差し
       替えておく必要があるかもしれません。

   (2) 必要とするデバイスファイルを作成します。既に /mnt2/dev に存在する
       なら、それを使ってもかまいません。

       # ln -s /mnt2/etc/group /etc
       # ln -s /mnt2/dev/MAKEDEV /dev
       # cd /dev && sh MAKEDEV da0s2a

       FreeBSD のバージョンによっては、MAKEDEV には修正が必要です。これで
       エラーとなるようなら次のようにしてみてください。

       # sed 's%/sbin/mknod%/mnt2/stand/mknod%' /mnt2/dev/MAKEDEV > /dev/MAKEDEV

   (3) ファイルシステムをマウントします。

       # fsck -p /dev/da0s2a || fsck /dev/da0s2a
       # mount /dev/da0s2a /mnt

       まずルートパーティションを /mnt にマウントし、/usr パーティション
       を /mnt/usr へというふうに階層的にマウントしてあげます。fixit.flp 
       では /usr が必要ですが、CDROM が使える場合はルートだけで足ります。

   (4) root のパスワードフィールドを空にします。
       # vi /mnt/etc/master.passwd

       root:$1$xxxxx:0:0::0:0:Charlie &:/root:/bin/csh
            ^^^^^^^^ ここを削除

   (5) パスワードデータベースを再構築します。

       # ln -s /mnt/usr/lib* /usr
       # /mnt/usr/sbin/pwd_mkdb -p -d /mnt/etc /mnt/etc/master.passwd

       fixit.flp には pwd_mkdb(8) が入ってないので、共有ライブラリを準備
       してシステムのものを利用します。もし CDROM を使えるときは、単に次
       のように実行すれば良いでしょう。 

       # pwd_mkdb -p -d /mnt/etc /mnt/etc/master.passwd

   (6) 終了。あとでパスワードを再設定するのを忘れずに。
       # reboot

同一グループへのリンク

グループ名: boot-s


間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。