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