第7章 システム管理

訳: にしか 、 1997 年 11 月 12 日

7.1. システムスタートアップファイルはどこにあるのですか?
7.2. 簡単にユーザを追加するにはどうすればいいのですか?
7.3. 新しいリムーバブルドライブを持っていますが、どうやって使うの?
7.4. 自分の crontab ファイルを編集した後 root: not found のようなメッセージが延々と表示されるのですが、 これはなぜですか?
7.5. su(1) コマンドを実行して root になろうとすると、 su が you are not in the correct group to su root と警告します。
7.6. rc.conf やその他の スタートアップファイルを書き間違えてしまいました。 しかもそのためファイルシステムがリードオンリーになってしまっていて 編集ができません。どうすればいいですか?
7.7. どのようにしたら DOS の拡張パーティションをマウントできますか?
7.8. 他のシステムのファイルシステムを FreeBSD でマウントすることはできますか?
7.9. どのようにしたら FreeBSD を NT ローダーから起動させることができますか?
7.10. FreeBSD と Linux を LILO から起動するには?
7.11. FreeBSD と Linux を BootEasy から起動するには?
7.12. 「危険覚悟の専用 (dangerously dedicated) ディスク」は健康に悪いの?
7.13. どのようにしたらスワップ領域を増やせますか?
7.14. プリンタのセットアップで問題があります
7.15. 私のシステムのキーボードマッピングは間違っています。
7.16. 起動時に、unknown: <PNP0303> can't assign resources というメッセージが表示されるのですが?
7.17. ユーザディスククォータが正常に動作していないようです。
7.18. わたしの ccd は、 何が適合していない (Inappropriate) のでしょう?
7.19. どうしてわたしの ccd のディスクラベルを変更することができないのでしょう?
7.20. FreeBSD は System V の IPC プリミティブをサポートしますか?
7.21. UUCP でメールを配送するには sendmail をどう使えばよいのですか?
7.22. ダイアルアップでインターネットに接続する環境でメールをセットアップするにはどうやるの?
7.23. この UID が 0 の toor という アカウントとは何ですか? 危険にさらされているのでしょうか?
7.24. しまった! root のパスワードを忘れてしまった!
7.25. Control-Alt-Delete でシステムが再起動しないようにするにはどうすればいい?
7.26. DOS のテキストファイルを UNIX のテキストファイルに整形するにはどうすればいい?
7.27. 名前で指定してプロセスにシグナルを送るにはどうすればいい?
7.28. su が not in root's ACL と言って私を悩ませるのはなぜ?
7.29. Kerberos をアンインストールするにはどうすればいいの?
7.30. 疑似ターミナルを追加するには?
7.31. snd0 デバイスを作成することができません!
7.32. 再起動せずにもう一度 /etc/rc.conf を読み込んで /etc/rc を開始させるには?
7.33. 砂場 (sandbox) とは何ですか?
7.34. セキュアレベル (securelevel) って何ですか?
7.35. フロッピーや CDROM や他のリムーバブルメディアのマウントを一般ユーザーに許可するには?
7.36. システムを新しい巨大ディスクへ移すにはどうするのですか?
7.37. システムを最新の -STABLE にアップデートしようとしたのですが -RC や -BETA になってしまいました! 何が起こったのですか?
7.38. 新しいカーネルを入れようとしたのですが、 chflags に失敗します。どうすれば良いのでしょう?
7.39. システムの時刻を 1 秒以上変更することができないのです! どうすれば良いのでしょう?
7.40. rpc.statd(8) にメモリリークを見つけました! メモリを 256 メガバイトも使っています。

7.1.

システムスタートアップファイルはどこにあるのですか?

FreeBSD 2.0.5R から 2.2.1R までは、 プライマリコンフィグレーションファイルは /etc/sysconfig にあります。 オプションはすべてこのファイルで設定され、他の /etc/rc (rc(8) 参照) および /etc/netstart といった ファイルはこれを読み込むだけです。

ファイル /etc/sysconfig を見て、システムに適合するように変更してください。 このファイルには、 それぞれの場所に何を書けばいいのかを表すコメントがたくさん書かれています。

FreeBSD 2.2.2 から 3.0 までのシステムでは、 /etc/sysconfig は、 より分りやすい名前の rc.conf(5) に改名され、それに従って書式もいくぶん改められています。 /etc/netstart/etc/rc.network に改名され、 全部のファイルを cp /usr/src/etc/rc* /etc で一度にコピーすることが出来るようになります。

FreeBSD 3.1 とそれ以降では、 /etc/rc.conf/etc/defaults/rc.conf に移動しました。 このファイルを編集してはいけません! 代わりに、 /etc/defaults/rc.conf の中で変えたいエントリの行を /etc/rc.conf にコピーし、 そこで変更するようにしてください。

たとえば named を起動したいとしましょう。 FreeBSD 3.1 かそれ以降のシステムで FreeBSD 付属の DNS サーバを起動するには、次のようにするだけです。

# echo named_enable="YES" >>
              /etc/rc.conf

FreeBSD 3.1 かそれ以降でローカルサービスを起動するためには、 /usr/local/etc/rc.d ディレクトリにシェルスクリプトを置きます。 シェルスクリプトは起動可能に設定し、ファイル名が .sh で終わっていなければなりません。 FreeBSD 3.0 とそれ以前のリリースでは、 /etc/rc.local を編集する必要があります。

ファイル /etc/rc.serial はシリアルポートの初期化 (たとえばポートの設定を固定したり等々) のためにあります。

ファイル /etc/rc.i386 は iBCS2 エミュレーションのような Intel アーキテクチャ固有の設定や、 PC システムコンソール設定のためにあります。

7.2.

簡単にユーザを追加するにはどうすればいいのですか?

adduser(8) コマンドを使用してください。 また、pw(8) コマンドを用いることで、さらに細かい操作が可能です。

ユーザを削除するには rmuser(8) コマンドを使用してください。 繰り返しになりますが、pw(8) でも構いません。

7.3.

新しいリムーバブルドライブを持っていますが、どうやって使うの?

そのリムーバブルドライブが ZIP であれ EZ drive であれ (あるいはもしそういう風に使いたいのなら、フロッピーであれ)、 またハードディスクであれ、一旦システムにインストールされて認識され、 カートリッジ、フロッピー等々が挿入されていれば、 ことはどのデバイスでも全く同じように進みます。

(このセクションはMark Mayo's ZIP FAQ に基づいています)

ZIP ドライブやフロッピーで、すでに DOS のファイルシステムで フォーマットしてある場合、次のコマンドを使うことができます。 これはフロッピーの場合です。

# mount -t msdos /dev/fd0c /floppy

出荷時の設定の ZIP ディスクではこうです。

# mount -t msdos /dev/da2s4 /zip

その他のディスクに関しては、fdisk(8)/stand/sysinstall を使って、 どのようにレイアウトされているか確かめてください。

以降は ZIP ドライブが 3 番目の SCSI ディスクで、 da2 と認識されている場合の例です。

他人と共有しなければならないフロッピーやリムーバブルディスク でなければ、BSD ファイルシステムを載せてしまうのが良い考えでしょう。 ロングファイル名もサポートされ、パフォーマンスは少なくとも 2 倍は向上しますし、おまけにずっと安定しています。 まず最初に、DOS レベルでのパーティション / ファイルシステムを無効にしておく必要があります。使用するのは fdisk でも /stand/sysinstall でも結構です。 複数のオペレーティングシステムを入れることを考慮する 必要がないような容量の小さなドライブの場合は、 次のように FAT パーティションテーブル (スライス) 全体を飛ばして、BSD のパーティション設定を行うだけで良いでしょう。

# dd if=/dev/zero of=/dev/rda2 count=2
# disklabel -Brw da2 auto

複数の BSD パーティションをつくる場合、 disklabel/stand/sysinstall を使います。 固定ディスク上にスワップ領域を加える場合、 そういうことをしたいと思うのはもっともですが、 ZIP のようなリムーバブルドライブの上ではそういう考えは不適切 でしょう。

最後に、新しいファイルシステムをつくります。ディスク全体を使用する ZIP ドライブの場合は、以下のようにします。

# newfs /dev/rda2c

次にマウントします。

# mount /dev/da2c /zip

また、次のような行を /etc/fstab (fstab(5) 参照) に入れておくのも良い考えでしょう。 mount /zip と入力するだけでマウントできるようになります。

/dev/da2c /zip ffs rw,noauto 0 0

7.4.

自分の crontab ファイルを編集した後 root: not found のようなメッセージが延々と表示されるのですが、 これはなぜですか?

これは通常、システム crontab (/etc/crontab) を編集し、crontab(1) を使ってインストールした場合に起こります。

# crontab /etc/crontab

この方法は正しくありません。 システム crontab のフォーマットは crontab(1) が更新する各ユーザの crontab とは異なります (フォーマットの相違点の詳細は crontab(5) で説明されています)。

もしこのような操作をしてしまったなら、 あらたな crontab は誤ったフォーマットの /etc/crontab のコピーになってしまっているからです。 以下のコマンドで削除してください。

# crontab -r

今度 /etc/crontab を編集する時は、 その変更を cron(8) に伝えるような操作をしてはいけません。 cron(8) は、自動的にその変更を認識するからです。

もしあなたが何かを一日一回、あるいは一週間や一ヶ月に一回だけ 実行させたいなら、シェルスクリプトを /usr/local/etc/periodic に追加し、 periodic(8) コマンドにシステムの cron スケジュールから 他の定期的なシステムのタスクとともに 実行させたほうが良いかもしれません。

このエラーの実際の原因は、システム crontab には どのユーザ権限でコマンドを実行するかを指定する余分なフィールドがあることによるものです。 FreeBSD に添付されている標準のシステム crontab には、 すべてのエントリに root が書かれています。 この crontab が root ユーザの crontab (システム crontab とは 異なります) として使われた場合、cron(8)root を実行するコマンドの最初の単語だと認識しますが、 そのようなコマンドは存在しないのです。

7.5.

su(1) コマンドを実行して root になろうとすると、 su が you are not in the correct group to su root と警告します。

これは、セキュリティ上の機能です。su コマンドを実行して root (またはスーパーユーザ権限を持つ 他のアカウント) になるには、wheel グループに所属していなければなりません。この機能がないと、 システムにアカウントがあって root の パスワードを見つけさえすれば、誰でもスーパーユーザ権限で システムにアクセスできてしまいます。この機能がある場合は、 必ずしもそうはなりません。wheel グループに 所属していなければ、su(1) がパスワードの入力すら 拒否するからです。

誰かが root に su できるように するには、その人を wheel グループに追加してください。

7.6.

rc.conf やその他の スタートアップファイルを書き間違えてしまいました。 しかもそのためファイルシステムがリードオンリーになってしまっていて 編集ができません。どうすればいいですか?

シェルのパス名を入力するプロンプトが表示されたときに、 単に ENTER を押し、mount / を 実行してそルートファイルシステムを再マウントさせます。 また、お気に入りのエディタがあるファイルシステムを マウントするために mount -a -t ufs を する必要があるかも知れません。あなたのお気に入りのエディタが ネットワークファイルシステム上にある場合は、 ネットワークファイルシステムをマウントする前にネットワークを 手動で設定するか、ed(1) のようなローカルファイルシステムにある エディタを使うかしなければなりません。

vi(1)emacs(1) の様なフルスクリーンエディタを 使うつもりなら export TERM=cons25 と やってエディタが termcap(5) データベースから正しい データを読み取れるようにしなければなりません。

これを行ったあとはいつもと同様、 /etc/rc.conf を編集して間違いを訂正することができるようになります。 カーネル起動メッセージの直後に表示されたエラーメッセージには、 問題の起こったファイル内での行番号を表示されているはずです。

7.7.

どのようにしたら DOS の拡張パーティションをマウントできますか?

DOS 拡張パーティションは、 すべての基本パーティションの後に認識されます。 たとえば、2台目の SCSIドライブの拡張パーティションに E パーティションがあるとしますと、 これは /dev に「スライス 5 」のスペシャルファイルを作る必要があり、 /dev/da1s5 としてマウントされます。

# cd /dev
# ./MAKEDEV da1s5
# mount -t msdos /dev/da1s5 /dos/e

7.8.

他のシステムのファイルシステムを FreeBSD でマウントすることはできますか?

Digital UNIX: UFS CDROM は直接 FreeBSD でマウントすることができます。 Digital UNIX やそれ以外のシステムのサポートする UFS のディスクパーティションをマウントすることはもっと複雑なことで、 オペレーティングシステムのディスクパーティションの詳細に依存します。

Linux: 2.2 以降は ext2fs パーティションをサポートします。 詳しくは、mount_ext2fs(8) を見てください。

NT: FreeBSD 用の読みだしのみ可能な NTFS ドライバがあります。 詳しくは、Mark Ovens 氏によって書かれたチュートリアル http://ukug.uk.freebsd.org/~mark/ntfs_install.html をご覧ください。

この問題について他の情報があれば、他の人から感謝されるでしょう。

7.9.

どのようにしたら FreeBSD を NT ローダーから起動させることができますか?

この手順は 2.2.x と (起動が 3 つのステージに分かれている) 3.x のシステムとで多少異なります。

FreeBSD のネイティブルートパーティションの最初のセクタをファイルにして DOS/NT パーティション上に置くという画期的なアイディアがあります。 ファイル名を c:\bootsect.bsd (c:\bootsect.dos からの発想です) としたとします。 c:\boot.iniファイルを次のように編集します。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT"
C:\BOOTSECT.BSD="FreeBSD"
C:\="DOS"

この手順は、利用しているシステムが 2.2.x であり、DOS、NT、FreeBSD あるいはその他のオペレーティングシステムがすべて、 同じディスクのそれぞれの fdisk パーティションにインストールされていることを想定しています。 この例は、DOS と NT を最初の fdisk パーティションにおき、 FreeBSD は 2 番目においたシステムで確認しています。 また、FreeBSD は MBR を使わずに、 ネイティブパーティションから起動するように設定してあります (訳注: FreeBSD のインストールで、ブートマネジャを使わずに標準 MBR を使う場合に相当します)。

(もし NTFS に変換してしまっているなら)DOS フォーマットのフロッピーディスクか FAT パーティションを /mnt に DOS マウントします。

# dd if=/dev/rda0a of=/mnt/bootsect.bsd bs=512 count=1

再起動して DOS か NT に切替えます。NTFS ユーザは bootsect.bsdbootsect.lnx をフロッピーディスクから C:\ へコピーします。 boot.ini のファイル属性 (パーミッション) の変更を以下のように行ないます。

> attrib -s -r c:\boot.ini

上の例の boot.ini で示したような正しいエントリを加え、 ファイル属性を元に戻します。

> attrib +s +r c:\boot.ini

FreeBSD が MBR から起動するようになっている場合、 それぞれのネイティブパーティションから起動するように設定した後で、 DOS から fdisk コマンドを実行して元に戻してください。

FreeBSD 3.X における手順は、これよりいくぶん簡単です。

FreeBSD が NT 起動パーティションとして同じディスクにインストールされている場合には、 /boot/boot1 を単純に C:\BOOTSECT.BSD へコピーします。 もし FreeBSD が異なったディスクにインストールされている場合には、 /boot/boot1 では動作しませんので、 /boot/boot0 が必要です。

警告:

ここで /boot/boot1 の代わりに /boot/boot0 をコピーするようなことをしてはいけません! そうすると、パーティションテーブルを上書きしてしまい、 コンピュータが起動できなくなってしまいます。

/boot/boot0 をインストールするには、 sysinstall のブートマネージャを利用するかどうか尋ねられる画面で FreeBSD ブートマネージャを選択する必要があります。 /boot/boot0 のパーティションテーブル部分は NULL 文字で埋められているのですが、 sysinstall は /boot/boot0 を MBR にコピーする前にパーティションテーブルをきちんとコピーしてくれるからです。

FreeBSD ブートマネージャは最後に起動した OS を記録するために パーティションテーブルの最後に起動した OS のエントリにあるアクティブフラグをセットし、512 バイト全体を MBR に書き戻します。 これは /boot/boot0C:\BOOTSECT.BSD にコピーし、 エントリの一つにアクティブフラグをセットして空のパーティションテーブルを MBR に書き込むことと同じです。

7.10.

FreeBSD と Linux を LILO から起動するには?

FreeBSD と Linux が同じディスクにインストールされている場合、 単に Linux 以外の OS を起動するための LILO のインストール手順に 従えばいいだけです。非常に簡単にではありますが、記してみましょう。

Linux を起動し、/etc/lilo.conf に以下の行を加えて ください。

other=/dev/hda2
        table=/dev/hda
        label=FreeBSD

(上記の手順は FreeBSD のスライスが Linux から /dev/hda2 という名前で見えていると仮定しています。 あなたの設定にあわせてください) その後、liloroot で実行すれば完了です。

FreeBSD が別のディスクにインストールされているのなら、 LILO のエントリに loader=/boot/chain.b を追加してください。たとえば、このようになります。

other=/dev/dab4
        table=/dev/dab
        loader=/boot/chain.b
        label=FreeBSD

場合によっては、二つ目のディスクを正しく起動するために FreeBSD ブートローダに BIOS ドライブ番号を指定する必要があるかもしれません。 たとえば、FreeBSD SCSI ディスクが BIOS によって BIOS ディスク 1 として認識されるのなら、 FreeBSD のブートローダのプロンプトで、次のように指定する必要があります。

Boot: 1:da(0,a)/kernel

FreeBSD 2.2.5 やそれ以降の版では、boot(8) を設定すれば 起動時に上記のことが自動的に行えます。

Linux+FreeBSD mini-HOWTO が FreeBSD と Linux とを相互に使えるようにするためのよい参考資料になるでしょう。

7.11.

FreeBSD と Linux を BootEasy から起動するには?

LILO をマスターブートレコード (MBR) ではなく Linux の起動パーティションにインストールしてください。 これで BootEasy から LILO を起動できるようになります。

Windows95 と Linux を使用している場合は、 いずれにせよ後者の方がおすすめです。 Windows95 を再インストールする必要にかられたとき、 Linux を起動可能に戻す手続きが簡単ですむからです (Windows95 は偏屈なオペレーティングシステムで、 マスターブートレコード (MBR) から他のオペレーティングシステムを追い払ってしまうのです)。

7.12.

「危険覚悟の専用 (dangerously dedicated) ディスク」は健康に悪いの?

インストール作業中、 ハードディスクのパーティションを切る際に 2 つの方法を選ぶことができます。 デフォルトの方法では、fdisk のテーブルエントリ (FreeBSD ではスライスと呼ばれる) を使って、 自身のパーティションを使用する FreeBSD のスライスを、 同じマシンの他のオペレーティングシステムと互換性のある形にします。 それに付随して、ブートセレクタをインストールすれば、 ディスク上の使用可能なオペレーティングシステムを切り替えることができます。 もう一つの方法はディスクすべてを FreeBSD で使うというもので、 この場合ほかのオペレーティングシステムとの互換性を考慮しないことになります。

では、なぜこれが 「危険覚悟の」と言われるのでしょう? このモードのディスクが、通常の PC のユーティリティが有効な fdisk テーブルと見なす情報を持っていないからです。 ユーティリティの出来如何によりますが、 そのようなディスクを発見したとき、 警告を出すものもあります。また、もっと悪い場合、 確認も通告もなしに BSD のブートストラップにダメージを与えるものもあるでしょう。 さらには、「危険覚悟の」ディスクレイアウトは多数の BIOS、 AWARD (たとえば HP Netserver や Micronics システム、 他多数で使用されていた) や Symbios/NCR (人気のあるSCSI コントローラ 53C8xx 用) などを混乱させることが分かっています。 これは完全なリストではありません。 他にもまだまだあります。この混乱の兆候は、 起動時にシステムがロックするというだけでなく、 FreeBSD のブートストラップが自分自身を見つけられないために表示する read error というメッセージなどにも現れることでしょう。

そもそもいったいなぜこのモードがあるのでしょうか? これはわずかに数キロバイトのディスク容量を節約するのみであり、 新規インストールで実際に問題を生ずるのです。 「危険覚悟の」モードの起源は新しい FreeBSD インストーラでの、 BIOS から見えるディスクの 「ジオメトリ」の値とディスク自身との整合性という、 もっとも一般的な問題のひとつを回避したいという要求が背景にあります。

「ジオメトリ」は時代遅れの概念ですが、 未だに PC BIOS とディスクへの相互作用の中核をなしています。 FreeBSD のインストーラがスライスを作る時、 ディスク上のスライスを BIOS が見つけられるように、 スライス位置をディスク上に記録します。それが誤っていれば、 起動できなくなってしまうでしょう。

「危険覚悟の」モードはこれを、 問題を単純にすることで回避しようとします。 状況によってはこれでうまくいきます。 しかし次善の策として使われているに過ぎません。 この問題を解決するもっと良い方法はいくらでもあるのです。

では、 インストール時に「危険覚悟の専用」モードが必要になる 状況を回避するにはどうすればよいのでしょうか? まず BIOS が報告するディスクのジオメトリの値を覚えておくことからはじめましょう。 boot: プロンプトで -v を指定するか、ローダで boot -v と指定して、 起動時にカーネルにこの値を表示させることができます。 インストーラが起動する直前に、 カーネルがジオメトリ値のリストを表示するでしょう。 パニックを起こさないでください。 インストーラが起動するのを待ち、 逆スクロールでさかのぼって値を確認してください。 普通は BIOS ディスクユニット番号は、 FreeBSD がディスクを検出する順序と同様であり、 最初に IDE、次に SCSI となります。

ディスクをスライシングする際に、 FDISK の画面で表示されるディスクのジオメトリが正しいこと (BIOS の返す値と一致しているか) を確認してください。 万一異なっていたら g を押して修正してください。 ディスクにまったくなにもない場合や、 他のシステムから持ってきたディスクの場合は これを行なう必要があるかもしれません。 これはそのディスクから起動させようとしている場合にのみ、 問題になることに注意してください。 FreeBSD はそのディスクをうまい具合いに他のディスクと区別してくれます。

ディスクのジオメトリについて BIOS と FreeBSD 間で一致させることができたら、この問題はほぼ解決したと思ってよいでしょう。 そしてもはや「危険覚悟の専用」モードは必要ありません。 しかし、まだ起動時に恐怖の read error メッセージが出るようであれば、 お祈りを捧げて新しいディスクを買いましょう。 もう失うものは何もありません。

「危険覚悟の専用ディスク」を通常の PC での使用法に戻すには、 原則として 2 つ方法があります。1 つは十分な NULL バイトを MBR に書き込んで、 きたるべきインストーラにディスクはまっさらだと思い込ませる方法です。 たとえば、こんな感じです。

# dd if=/dev/zero of=/dev/rda0 count=15

また、マニュアルには書かれていない DOS の「機能」

> fdisk /mbr

は、BSD ブートストラップを追い払ってくれる上に、 新しいマスターブートレコードをインストールしてくれます。

7.13.

どのようにしたらスワップ領域を増やせますか?

スワップパーティションのサイズを増やすのが最良の方法ですが、 別のディスクを追加しなくて済むという利点のある方法があります。 経験から得た一般的な方法はメインメモリの 2倍程度のスワップ領域を とるというものです。しかしごく小さなメインメモリしかない場合は、 それ以上のスワップを構成したいと思うでしょう。また、将来のメモリの アップグレードに備え、後でスワップの構成を変更する必要がないように 十分なスワップを構成しておくことは良い考えです。

スワップを別のディスク上に追加することは、単純に同じディスク上 にスワップを追加する場合よりも高速に動作するようになります。 例に挙げれば、あるディスク上のソースをコンパイルしているとして、 スワップが別のディスク上に作られていれば、これらが同じディスク上 にある場合よりも断然速いです。SCSI ディスクの場合は特にそうだと言えます。

ディスクが複数ある場合、スワップパーティションを各ディスクに 作るように構成すると、使用中のディスク上にスワップを置いたとしても、 通常の場合は有益です。一般的に、システムにある高速なディスクには スワップを作るようにすべきでしょう。 FreeBSD はデフォルトでインターリーブなスワップデバイスを 4つまで サポートします。複数のスワップパーティションを構成する際に、 普通はそれらを大体同じくらいの大きさにして作りたいところですが、 カーネルのコアダンプを取るのに都合が良いようにメインの スワップパーティションを大きめにとる人もいます。 メインのスワップパーティションはカーネルのコアがとれるように 最低でも実メモリと同じ大きさにすべきでしょう。

IDE ドライブは同時に同じチャネル上の複数のドライブには アクセスできません (FreeBSD は mode 4 をサポートしていないので、 すべての IDE ディスク I/O は programmed です)。 IDE の場合であってもやはり、スワップを別のハードディスク上に 作成することをおすすめします。 ドライブは実に安いものです、心配するだけ無駄です。

NFS 越しにスワッピングさせる方法は、 スワップ用のローカルディスクが無い場合にのみ推奨されます。 NFS 越しのスワッピングは遅く、FreeBSD 4.x より前のリリースでは 効率が悪いのですが、4.0 以降ではそれなりに高速になります。 そうはいっても、利用できるネットワークの太さに制限されますし、 NFS サーバに余計な負荷がかかります。

これは 64MBの vn-swap を作る例です (ここでは /usr/swap0 としますが、もちろん好きな名前を使うことができます)。

カーネルが次の行を含むコンフィグファイルから構成されているかを 確認します。GENERIC カーネルには、この行が含まれています。

pseudo-device   vn 1   #Vnode driver (turns a file into a device)
  1. vn デバイスを作ります

    # cd /dev
    # sh ./MAKEDEV vn0
  2. スワップファイルを作ります (/usr/swap0)

    # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
  3. スワップファイルに適切なパーミッションを設定します

    # chmod 0600 /usr/swap0
  4. /etc/rc.conf でスワップファイルを有効化させます

    swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
  5. マシンを再起動します

スワップファイルをすぐに有効化させたいのなら以下のようにタイプします。

# vnconfig -e /dev/vn0b /usr/swap0 swap

7.14.

プリンタのセットアップで問題があります

ハンドブックのプリンタの部分を参照してください。 探している問題のほとんどが書かれているはずです。 FreeBSD ハンドブックの「プリンタの利用」をご覧ください。

プリンタによっては、印刷するのにホスト側にドライバが 必要です。これら WinPrinters と呼ばれるものは、 素の FreeBSD では使えません。DOS や Windows NT 4.0 で動作しない なら、そのプリンタはおそらく WinPrinter でしょう。 ただし、唯一の希望が残されています。 ports/print/pnm2ppa の port が 対応しているかどうか確認してみてください。 パッケージの説明にはこう書いてあります。

このソフトウェアは PPA (printer performance architecture) プロトコルの出力を行います。このプロトコル は HP の "Windows 専用" プリンタの一部に使われています。 そのなかには、HP Deskjet 820C シリーズ、HP DeskJet 720 シリーズ、および HP DeskJet 1000 シリーズがあります。(略)

WWW: http://pnm2ppa.sourceforge.net/

7.15.

私のシステムのキーボードマッピングは間違っています。

kbdcontrol プログラムは、 キーボードマップファイルを読み込むためのオプションを備えています。 /usr/share/syscons/keymaps の下にたくさんのマップファイルがあります。 システムに関連のあるものを一つ選んで、ロードしてください。

# kbdcontrol -l uk.iso

/usr/share/syscons/keymaps と拡張子 .kbd は、どちらも kbdcontrol(1) によって使用されます。

これは /etc/sysconfig (または rc.conf(5)) 中で設定することができます。 このファイル中にあるそれぞれのコメントを参照してください。

FreeBSD 2.0.5R やそれ以降の版では、 テキストフォントやキーボードマッピングに関係のあるものはすべて、 /usr/share/examples/syscons の中におさめられています。

現在以下のマッピングがサポートされています。

  • Belgian ISO-8859-1

  • Brazilian 275 keyboard Codepage 850

  • Brazilian 275 keyboard ISO-8859-1

  • Danish Codepage 865

  • Danish ISO-8859-1

  • French ISO-8859-1

  • German Codepage 850

  • German ISO-8859-1

  • Italian ISO-8859-1

  • Japanese 106

  • Japanese 106x

  • Latin American

  • Norwegian ISO-8859-1

  • Polish ISO-8859-2 (programmer's)

  • Russian Codepage 866 (alternative)

  • Russian koi8-r (shift)

  • Russian koi8-r

  • Spanish ISO-8859-1

  • Swedish Codepage 850

  • Swedish ISO-8859-1

  • Swiss-German ISO-8859-1

  • United Kingdom Codepage 850

  • United Kingdom ISO-8859-1

  • United States of America ISO-8859-1

  • United States of America dvorak

  • United States of America dvorakx

7.16.

起動時に、unknown: <PNP0303> can't assign resources というメッセージが表示されるのですが?

以下は、freebsd-current メーリングリストへの投稿からの 抜粋です。

can't assign resources というメッセージは、 そのデバイスがレガシー ISA デバイスで、PnP を意識していない ドライバがカーネルに組み込まれていることを示します。 これには、キーボードコントローラ、プログラム可能な 割り込み制御 IC やその他さまざまな標準的なデバイスが あります。リソースが割り当てられないのは、既にそのアドレスを 使っているドライバがあるからです。

--Garrett Wollman, 2001 年 4 月 24 日

7.17.

ユーザディスククォータが正常に動作していないようです。

  1. / にはディスククォータを設定しないでください。

  2. クォータファイルが置かれるファイルシステム上に クォータファイルを置くようにしてください。

    FilesystemQuota file
    /usr/usr/admin/quotas
    /home/home/admin/quotas

7.18.

わたしの ccd は、 何が適合していない (Inappropriate) のでしょう?

次のような症状が現れます。

# ccdconfig -C
ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format

通常この現象はタイプを「未使用 (unused)」のまま放っておかれた c パーティションをつなげようとした場合に現れます。ccd ドライバは FS_BSDFFS タイプをベースとするパーティションを要求します。 つなげようとしているディスクのディスクラベルを編集して、 パーティションのタイプを 4.2BSD に変更してください。

7.19.

どうしてわたしの ccd のディスクラベルを変更することができないのでしょう?

次のような症状が現れます。

# disklabel ccd0
(it prints something sensible here, so let's try to edit it)
# disklabel -e ccd0
(edit, save, quit)
disklabel: ioctl DIOCWDINFO: No disk label on disk;
use "disklabel -r" to install initial label

これは ccd から返されるディスクラベルが、 実はディスク上にはないまったくの偽の情報だからです。 これを明示的に書き直すことで問題を解消できます、 それには、つぎのようにします。

# disklabel ccd0 > /tmp/disklabel.tmp
# disklabel -Rr ccd0 /tmp/disklabel.tmp
# disklabel -e ccd0
(this will work now)

7.20.

FreeBSD は System V の IPC プリミティブをサポートしますか?

はい。 FreeBSD は System-V スタイルの IPC をサポートします。 共有メモリ、メッセージ、セマフォが含まれます。 以下の行をカーネルコンフィグファイルに加えると、 サポートが有効になります。

options    SYSVSHM          # enable shared memory
options    SYSVSEM          # enable for semaphores
options    SYSVMSG          # enable for messaging

注記:

FreeBSD 3.2 とそれ以降では、 これらのオプションがあらかじめ GENERIC カーネルに含まれていますので、 あなたのシステムにはすでに組み込まれています。

カーネルを再構築してインストールしてください。

7.21.

UUCP でメールを配送するには sendmail をどう使えばよいのですか?

FreeBSD に付属している sendmail は、 インターネットに直接つながっているサイトにあわせて設定してあります。 UUCP 経由で mail を交換したい場合には sendmail の設定ファイルを改めてインストールしなければなりません。

/etc/sendmail.cf を自分の手で改造するのは純粋主義者のやるような事です。 sendmail の version 8 は m4(1) のようなプリプロセッサを通して設定ファイルを生成する新しいアプローチを取っており、 より抽象化されたレベルの設定ファイルを編集します。 /usr/src/usr.sbin/sendmail/cf ディレクトリの中にある設定ファイルを使用してください。

もしすべてのソースをインストールしていない場合には sendmail の設定ツールは、別の tar ファイルにまとめてあります。CD-ROM が mount されている場合には、次のようにしてください。

# cd /cdrom/src
# cat scontrib.?? | tar xzf - -C /usr/src contrib/sendmail

これはたった数 100Kbyte ですから心配ないでしょう。 cf ディレクトリにある README に、m4 での設定の基本的な説明があります。

UUCP での配送のためには、mailertable を使用すれば よいでしょう。これによって、sendmail が配送方式を決定するデータベースを 作成することができます。

まずはじめに、 .mc ファイルを作成しなければなりません。 /usr/src/usr.sbin/sendmail/cf/cf というディレクトリが、 これらのファイルを作成する場所です。既にいくつか例があると思います。 これから作成するファイルの名前を foo.mc とすると、 sendmail.cf を求めているような形式に変換するには、 次のようにしてください。

# cd /usr/src/usr.sbin/sendmail/cf/cf
# make foo.cf
# cp foo.cf /etc/sendmail.cf

標準的な .mc ファイルは次のようになります。

include(`../m4/cf.m4')
VERSIONID(`Your version number')
OSTYPE(bsd4.4)

FEATURE(nodns)
FEATURE(nocanonify)
FEATURE(mailertable)

define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)

MAILER(local)
MAILER(smtp)
MAILER(uucp)

Cw    your.alias.host.name
Cw    youruucpnodename.UUCP

nodnsnocanonify という指定をすることで、 mail の配送に DNS を使用しなくなります。 UUCP_RELAY という 行に関しては、 ある理由から必要ですがそれは聞かないでください。 .UUCP で終わる仮想ドメインを処理することのできるインターネット上での ホスト名をここに書いてください。通常は、ISP の mail リレーホストを 書くことになると思います。

これが終了したら、次に /etc/mailertable というファイルが必要です。標準的な例は次のとおりです。

#
# makemap hash /etc/mailertable.db < /etc/mailertable
#
horus.interface-business.de   uucp-dom:horus
.interface-business.de        uucp-dom:if-bus
interface-business.de         uucp-dom:if-bus
.heep.sax.de                  smtp8:%1
horus.UUCP                    uucp-dom:horus
if-bus.UUCP                   uucp-dom:if-bus
.                             uucp-dom:

見れば分かるように、これは実在する設定のファイルです。はじめの 3 行はドメイン名で指定されたメールが default の経路で配送されずに、 「近道」するために UUCP で隣りのサイトに送るための特別な状況を 処理するものです。 次の行は Ethernet でつながっているローカルのドメインに対しては SMTP で送るための設定です。 最後に、UUCP での隣りのサイトが .UUCP で終わる仮想ドメインの書式で 指定されており、default の rule を uucp-neighbour! recipient で上書きするためのものです。一番最後の行はいつもドットを一つ書きます。 これは、ここまでの行でマッチしなかったすべてのホストにマッチし、 このサイトから世界に向けて出ていくための mail gateway に UUCP で配送するためのものです。 uucp-dom: に続けて書かれているノード名は、 uuname コマンドで指定することによって UUCP で直接配送される正しいノード名でなければなりません。

最後に、このファイルは使用する前に DBM データベースのファイルに 変換する必要があります。これを行なうコマンドラインは mailertable の最初のコメントに書いてあります。mailertable を変更した時には、 必ずこのコマンドを実行してください。

最後のヒントです: もし特定のメール配送がうまく作動するかどうか 確かめたい場合には、sendmail の-bt オプションを 使用してください。このオプションによって sendmail は アドレステストモードで起動します。 0 の後に配送したいアドレスを書いてください。最後の行に、実際に使用される mail agent、この mail agent で送られる送信先のホスト、そして (多分変換されている) アドレスが表示されます。このモードを抜けるには Control-D を押してください。

% sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 0 foo@interface-business.de
rewrite: ruleset  0   input: foo @ interface-business . de
...
rewrite: ruleset  0 returns: $# uucp-dom $@ if-bus $: foo \
< @ interface-business . de >
> ^D

7.22.

ダイアルアップでインターネットに接続する環境でメールをセットアップするにはどうやるの?

静的に IP アドレスが割り当てられる場合は、 デフォルトの状態を変更する必要はありません。 割り当てられた名前をホストネームと するだけで、sendmail が後のことを引き受けてくれます。

ダイアルアップ ppp を インターネット接続に使用し、動的に IP アドレスが割り当てられる場合は、 インターネットサービスプロバイダ (ISP) のメールサーバにメールボックスがあるはずです。 ISP のドメインが myISP.com で、あなたのユーザ名が user だと仮定します。 また、あなたが自分のマシンを bsd.home と呼んでおり、ISP が relay.myISP.com をメールリレーとして使用できると言っているとしましょう。

メールボックスからメールを取ってくるためには、 回収 (retrieval) エージェントをインストールする必要があります。 Fetchmail は多種多様なプロトコルをサポートしているのでお勧めです。 ISP が使用しているのは、大抵 POP3 プロトコルです。 ユーザ ppp を使用している場合、 /etc/ppp/ppp.linkup に以下のように記述すると、 インターネットと接続が完了した時点で自動的にメールを取得するようになります。

MYADDR:
        !bg su user -c fetchmail

ローカルでないアカウントにメールを配送するのに sendmail を使用している場合 (後述)、 上に示したエントリの後に

        !bg su user -c "sendmail -q"

を記述します。これはネットワーク接続が確立したらすぐに sendmail に溜っている mailqueue を強制的に処理させるようにします。

この例では、userbsd.home にアカウントを持ち、 bsd.home 上の user のホームディレクトリに、以下のような .fetchmailrc ファイルがつくられていることを想定しています。

poll myISP.com protocol pop3 fetchall pass MySecret;

言うまでもなく、このファイルは user 以外のユーザが読むことが出来ないようにしなくてはなりません。 内容にパスワード MySecret が含まれているからです。

正しい from: ヘッダをつけてメールを送るためには、 sendmailuser@bsd.home ではなく user@myISP.com を使用するよう教える必要があります。 メールをより早く転送するために、すべてのメールを relay.myISP.com へ送るように sendmail に 指示しておくのも良いでしょう。

上の要件を満たすには、以下のような .mc ファイルが適しています。

VERSIONID(`bsd.home.mc version 1.0')
OSTYPE(bsd4.4)dnl
FEATURE(nouucp)dnl
MAILER(local)dnl
MAILER(smtp)dnl
Cwlocalhost
Cwbsd.home
MASQUERADE_AS(`myISP.com')dnl
FEATURE(allmasquerade)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(nocanonify)dnl
FEATURE(nodns)dnl
define(`SMART_HOST', `relay.myISP.com')
Dmbsd.home
define(`confDOMAIN_NAME',`bsd.home')dnl
define(`confDELIVERY_MODE', `deferred')dnl

.mc ファイルから sendmail.cf への変換方法については、 前のセクションを参照してください. sendmail.cf を更新した後に sendmail をリスタートするのもお忘れなく。

7.23.

この UID が 0 の toor という アカウントとは何ですか? 危険にさらされているのでしょうか?

心配無用です。toor代替の スーパーユーザーアカウントです (toor は root を逆に綴ったものです)。 以前は、bash(1) シェルがインストールされた時に 作成されていましたが、現在は標準で作成されています。 このユーザーが作成されるのは、 スーパーユーザが非標準のシェルを使う場合を想定しており、 root の標準のシェルを変更しなくてもよくなっています。 基本配布に含まれていないシェル (たとえば ports や packages からインストールされるシェル) は、デフォルトでは別のファイルシステムに存在する 可能性のある /usr/local/bin に インストールされることが多いので、これは重要です。 root のシェルが /usr/local/bin にあり、 /usr (または、/usr/local/bin があるいずれかのファイルシステム) が何らかの理由でマウントされていないとすると、 root は問題を解決するために ログインすることができません (シングルユーザーモードで再起動すれば、 シェルのパスの入力を促されるのですが)。

toor を日々の root の仕事を 非標準のシェルで行うために使い、root は シングルユーザーモードや緊急時のために、標準のシェルのままに している人がいます。何もしなければ、パスワードを無効にしてあるので toor ではログインできません。 使いたいなら、root でログインして toor の パスワードを設定しましょう。

7.24.

しまった! root のパスワードを忘れてしまった!

慌てないでください! 単にシステムを再起動し、 シングルユーザモードに移るために Boot: と表示されるプロンプトで boot -s と入力してください (FreeBSD の 3.2 より前のリリースでは -sとなります)。 どのシェルを使うのかという質問には、ENTER キーを押してください。# に移ることができるでしょう。 mount -u / と入力して ルートファイルシステムの読み書きを再マウントし、 mount -a と入力して、 すべてのファイルシステムをマウントし直した後、 passwd root と入力して root のパスワードを設定し直してください。 その後、exit と入力すれば、起動が続けられます。

7.25.

Control-Alt-Delete でシステムが再起動しないようにするにはどうすればいい?

FreeBSD 2.2.7-RELEASE 以降で syscons (デフォルトのコンソールドライバ) を使用している場合には、次の行をカーネルコンフィグレーションファイルに追加して カーネルを再構築し、インストールしてください。

options SC_DISABLE_REBOOT

FreeBSD 2.2.5-RELEASE 以降で PCVT コンソールドライバを使用している 場合には、同様に次の行をカーネルコンフィグレーションファイルに追加して カーネルを再構築し、インストールしてください。

options PCVT_CTRL_ALT_DEL

上にあげたものよりも古い FreeBSD の場合、 現在コンソールが使用しているキーマップを編集し、 キーワード bootnop に書き換えてください。 /usr/share/syscons/keymaps/us.iso.kbd にあります。 その変更を反映させようとして、 このキーマップのロードを明示的に行なうために、 /etc/rc.conf を実行すべきかもしれません。 もちろん他の国のキーマップを使っているのであれば、 代わりにそのキーマップファイルを編集してください。

7.26.

DOS のテキストファイルを UNIX のテキストファイルに整形するにはどうすればいい?

単に次の perl コマンドを実行してください。

% perl -i.bak -npe 's/\r\n/\n/g' file ...

file の部分には処理するファイルを指定してください。 整形後のファイルは元のファイル名で作成され、 整形前のファイルはバックアップとして元の ファイル名の末尾に拡張子 .bak のつけられた名前で作成されます。

あるいは tr(1) コマンドを使うこともできます。

% tr -d '\r' < dos-text-file > unix-file

dos-text-file は DOS 形式のテストファイル、 unix-file には変換された出力が格納されます。 perl を使うよりほんのちょっぴり速くなります。

7.27.

名前で指定してプロセスにシグナルを送るにはどうすればいい?

killall(1) を使ってください。

7.28.

su が not in root's ACL と言って私を悩ませるのはなぜ?

Kerberos の認証システムからくるエラーです。 この問題は致命的なものではなく、 うっとおしいといったものです。 su-K オプションをつけて起動するか、 次の質問で説明されている方法で Kerberos をアンインストールしてください。

7.29.

Kerberos をアンインストールするにはどうすればいいの?

システムから Kerberos を削除するには、 あなたの動かしているリリースの bin ディストリビューションを再インストールしてください。 もし CDROM を持っているのなら、 その CDROM をマウント (マウントポイントは /cdrom と仮定) して、 次のように入力してください。

# cd /cdrom/bin
# ./install.sh

7.30.

疑似ターミナルを追加するには?

telnet、ssh、X、screen をたくさん利用されている場合、 疑似ターミナルが足りなくなっている可能性があります。 これを増やすには次のようにします。

  1. 次の行をカーネルコンフィグレーションファイルに追加して

    pseudo-device pty 256

    新たにカーネルを作りインストールします。

  2. 次のコマンドを実行して

    # cd /dev
    # ./MAKEDEV pty{1,2,3,4,5,6,7}

    新たなターミナル用の 256 個のデバイスノードを作ります。

  3. /etc/ttys を編集し 256 個のターミナルごとの定義を追加します。 既存のエントリーの形式にあわせる必要があるでしょう。 たとえばこんな感じです。

    ttyqc none network

    正規表現を使った指定は tty[pqrsPQRS][0-9a-v] となります。

  4. 新しいカーネルでシステムを再起動すると完了です。

7.31.

snd0 デバイスを作成することができません!

snd というデバイスは存在しません。 この名前は、FreeBSD サウンドドライバによって作成されるさまざまなデバイス、 mixersequencerdsp などを総称したものです。

これらのデバイスを作成するには、次のようにする必要があります。

# cd /dev
# sh MAKEDEV snd0

7.32.

再起動せずにもう一度 /etc/rc.conf を読み込んで /etc/rc を開始させるには?

シングルユーザモードに移行して、 マルチユーザモードに戻ってください。

コンソールで次のように実行します。

# shutdown now(注: -r-h は付けません)
# return
# exit

7.33.

砂場 (sandbox) とは何ですか?

砂場 (Sandbox) とはセキュリティ用語の一つで、 次の二つの意味があります。

  • 一つ目は、「仮想的な『防壁』で囲まれているプロセス」です。 その『防壁』は、そのプロセスに侵入した第三者が、 さらにシステムの広い範囲に影響を与えることを防ぐように設計されます。

    このプロセスの振舞いは、『防壁』の中だけに制限される、と表現できます。 つまり、このプロセスにおいて、『防壁』を越えるようなコードの実行は できないという意味です。そのため、コードの実行におけるセキュリティは 確かなものであると保証でき、実行の詳細な追跡を行なう必要はなくなります。

    その『防壁』とは、たとえばユーザ ID がそれにあたるでしょう。 この定義は、security(7) や named(8) のマニュアルページで用いられています。

    ntalk サービス (/etc/inetd.conf 参照のこと) を例にとってみます。 このサービスはかつて、実行時の ユーザ ID として root を用いていましたが、現在では tty というユーザ ID で動作します。 ユーザ tty は、 ntalk を経由してシステムの侵入に成功した第三者が そのユーザ ID 以上の権限を得ることを、 より一層困難にするために設計された砂場 (sandbox) なのです。

  • 二つ目は「シミュレートされたマシンの内側で実行されるプロセス」のことで、 こちらはより中核的です。 普通に考えれば、あるプロセスに侵入することができる第三者は、 マシンのより広い範囲にも侵入できると信じるものなのですが、 この種のプロセスの場合、それは実際にはシミュレートされたマシンに 侵入しただけなので、現実のデータを変更することは何一つできません。

    これを実現するための最も広く用いられている方法は、 シミュレートされた環境をサブディレクトリに構築し、 そのディレクトリに chroot して、そのディレクトリで プロセスを実行すること (つまり、そのプロセスにとって / は システムの実際のルートディレクトリ / ではなく、 chroot されたサブディレクトリを指す) です。

    広く用いられているもう一つの方法があります。 それは、既に存在しているファイルシステムを 読み込み専用 (read-only) でマウントし、その上に、あるプロセスに対して そのファイルシステムが書き込み可能であるように見せるような、 もう一つのファイルシステムの層を用意するものです。すると、 そのプロセスはファイルを書き込むことができると認識し、 実際に書き込むことができるのもその特定のプロセスだけ - システムにある他のプロセスは書き込めないのに対して - であるという状況を実現することができます。

    この種の砂場 (sandbox) は、 その非常に透過的な性質を使って、ユーザ (もしくは侵入者) が その事実に気付かないように実現されます。

UNIX は、内部的に二つの砂場 (sandbox) を実装しています。 一つはプロセスレベルのもの、もう一つはユーザ ID レベルのものです。

UNIX プロセスはすべて、他の UNIX プロセスから完全に隔離されています。 どのプロセスも、他のプロセスのアドレス空間を変更することはできません。 これは、あるプロセスが他のプロセスのアドレス空間を上書きできるような、 クラッシュにつながる行為が容易に実現できる Windows とは全く異なるものです。

UNIX プロセスは、特定のユーザ ID が所有します。 もし、実行者のユーザ ID が root ユーザのものでなければ、 ユーザ ID は、他のユーザが所有するプロセスから そのプロセスを守る機能を果たすわけです。 また、そのユーザ ID は、ディスク上にあるデータを 保護するのにも使われています。

7.34.

セキュアレベル (securelevel) って何ですか?

セキュアレベルとはカーネルに実装されているセキュリティ機構の一つです。 簡単に言うと、カーネルはセキュアレベルが正の値の時に、 ある特定の操作を制限します。この制限は、たとえスーパユーザ (root のこと) であっても例外ではありません。 この文を書いている時点では、 セキュアレベル機構を使って以下のような操作を制限することができます。

  • schg (system immutable flag) のようなファイルフラグの変更

  • /dev/mem および /dev/kmem 経由でのカーネルメモリへの書き込み

  • カーネルモジュールのロード

  • ipfirewall(4) ルールの変更

稼働中のシステムでセキュアレベルの状態をチェックするには、 次のコマンドを実行します。

# sysctl kern.securelevel

出力には、sysctl(8) 変数 (今の場合は kern.securelevel) と数字が現れます。 数字が現在のセキュアレベルの値です。 これがもし正の値なら、 何らかのセキュアレベルによる制限が有効になっています。

システム稼働中にセキュアレベルを下げることはできません。 これは、それを可能にするとセキュアレベルの意味がなくなってしまうからです。 セキュアレベルが正の値でないことを要求する操作 (たとえば installworld や日付の変更など) を行なう必要がある場合は、/etc/rc.conf にあるセキュアレベルの設定 (kern_securelevelkern_securelevel_enable という変数) を変更して再起動する必要があります。

セキュアレベルに関する詳しい情報や、 各レベルで実現される機能に関しては init(8) のマニュアルページを参照してください。

警告:

セキュアレベルは万能というわけではなく、 弱点も数多く存在します。また、場合によっては、 セキュリティを低下させてしまうこともあります。

最も大きな問題の一つに、 セキュアレベルの機能を有効にするには、 起動処理でセキュアレベルが設定されるまでに使われるすべてのファイルを 保護する必要があるということがあります。 もし攻撃者が、システムがセキュアレベルを設定する前にコードを実行することができるとしたら、 セキュアレベルによる保護は無意味になってしまいます (起動時には低いセキュアレベルでしか実行できない処理を行なう必要があるため、 セキュアレベルの設定は、起動処理の最後の方で行なわれます)。 起動処理で使われるすべてのファイルを保護することは技術的に不可能です。 もしそうできたとしても、システムの保守はまさに悪夢となるでしょう。 設定ファイル一つ書き換えるのにも、 シングルユーザモードに切替えなければならなくなるのですから。

以上で説明した内容やその他の点については、 メーリングリストでも良く話題にのぼります。 議論のようすをこのページから検索してみてください。 セキュアレベルは、 いずれより粒度の細かい機構にとって代わるだろうと考えている人々もいますが、 その点についてはまだ不透明なままです。

どうか注意するようにしてください。

7.35.

フロッピーや CDROM や他のリムーバブルメディアのマウントを一般ユーザーに許可するには?

一般ユーザーでもデバイスをマウントできるようにすることができます。 手順は次のとおりです。

  1. root になって、 sysctl 変数である vfs.usermount1 に設定します。

    # sysctl -w vfs.usermount=1
  2. root になって、 リムーバブルメディアに関連するブロックデバイスに適切なパーミッションを設定します。

    例として、最初のフロッピーデバイスをユーザーがマウントできるようにするには、 次のようにします。

    # chmod 666 /dev/fd0

    operator グループに所属するユーザが CDROM ドライブをマウントできるようにするには 以下のようにします。

    # chgrp operator /dev/cd0c
    # chmod 640 /dev/cd0c
  3. 最後に vfs.usermount=1 という行を /etc/sysctl.conf ファイルに追加し、 ブート時にセットされるようにしておきます。

これで、すべてのユーザは フロッピー /dev/fd0 を 自身の所有するディレクトリへマウントすることができます。

% mkdir ~/my-mount-point
% mount -t msdos /dev/fd0 ~/my-mount-point

これで、operator グループに所属するユーザは CDROM /dev/cd0c を 自身の所有するディレクトリへマウントすることができます。

% mkdir ~/my-mount-point
% mount -t msdos /dev/cd0c ~/my-mount-point

デバイスのアンマウントは簡単です。

% umount ~/my-mount-point

しかし、 vfs.usermount を有効にすることは、セキュリティ上よいことではありません。 MSDOS 形式のメディアにアクセスには、Ports コレクションにある パッケージ mtools を使用した方がよいでしょう。

7.36.

システムを新しい巨大ディスクへ移すにはどうするのですか?

一番良いのは新しいディスクに OS を再インストールして、 それからユーザデータを移すことです。特にあなたが -stable を 複数のリリースを跨いで追い掛けている場合にはこの方法をおすすめします。 あなたは boot0cfg(8) を使うことで booteasy を両方の ディスクにインストールでき、新しい配置で満足している間 デュアルブートができます。これを行ったあとデータを移す 方法を探すなら次の段落は読み飛ばしてください。

何もないディスクへインストールしないことに決めたならば /stand/sysinstall、なり fdisk(8)disklabel(8) なりを使って新しいディスクに パーティションとディスクラベルを作らなければなりません。 また boot0cfg(8) で booteasy を両方のディスクに インストールして、コピーの作業が終わったあとに 古いシステムからでも新しいディスクからでも起動できるように しておく必要があります。この作業の詳細は formatting-media tutorial を見てください。

新しいディスクの立ち上げが終わってデータの移動を 待つばかりになりました。しかし悲しいかな、無闇やたらと コピーすればいいというものではありません。デバイスファイル (/dev) やシンボリックリンクなどは 失敗の元になります。これらを理解するツール、すなわち dump(8)tar(1) 等を使う必要があります。 データの移転はシングルユーザで行うことをお勧めしますが、 絶対と言うわけではありません。

あなたは dump(8)restore(8) 以外のもので root ファイルシステムを移行してはなりません。 tar(1) コマンドでもたぶんうまく行くでしょうが、 やらないほうがいいでしょう。パーティション一つを もう一つのからのパーティションに移すときは dump(8)restore(8) 使うべきです。 パーティションのデータを新しいパーティションに移すのに dump を使うやり方は以下の通りです。

  1. 新しいパーティションに newfs をかける。

  2. それを暫定的なマウントポイントにマウントする。

  3. そのディレクトリに cd。

  4. 古いパーティションを dump し、 その出力をパイプで新しい方へ。

たとえば root を /dev/ad1s1a へ、暫定的なマウントポイントを /mnt として移そうとすると以下のようになります。

# newfs /dev/ad1s1a
# mount /dev/ad1s1a
# cd /mnt
# dump 0uaf - / | restore xf -

もしパーティションの構成を変えようと思っているなら - つまり一つだったものを二つにしたり二つだったものをくっつけたり しようとしているなら、自前であるディレクトリ以下のすべてを 新しい場所へ移す必要が出てくるかも知れません。dump(8) は ファイルシステムに働くのでこの目的には使えません。この場合は tar(1) を使います。一般に /old から /new への移動は tar(1) で 以下のようにします。

# (cd /old; tar cf - .) | (cd /new; tar xpf -)

/old に他のファイルシステムが マウントされていて、そのデータの移動までは考えてないならば 最初の tar(1) に 'l' フラグを追加します。

# (cd /old; tar clf - .) | (cd /new; tar xpf -).

tar(1) のかわりに cpio(1)pax(1), cpdup (ports/sysutils/cpdup) 等を 使っても構いません。

7.37.

システムを最新の -STABLE にアップデートしようとしたのですが -RC や -BETA になってしまいました! 何が起こったのですか?

短い答え: ただの名前です。RC は リリース候補 (Release Candidate) に 由来するもので、リリースが間近であることを意味します。 また、FreeBSD における -BETA は通常、 リリース前のコードフリーズ期間に入っているという意味になります。

長い答え: FreeBSD はそのリリースを 2 ヶ所あるうちの 一方から派生させます。3.0-RELEASE や 4.0-RELEASE の様な (0 のマイナー番号を持つ) メジャーリリースは、一般に -CURRENT と呼ばれる 開発版の流れから分岐させられてできます。3.1-RELEASE や 4.2-RELEASE などのマイナーリリースはアクティブな -STABLE ブランチ (枝) の スナップショットでした。 4.3-RELEASE からは、リリース毎にブランチが作成されるように なりました。ものすごく保守的な開発速度 (主にセキュリティ 勧告のみ) を求めている人は、このブランチを追跡すると よいでしょう。

リリースを作る時になるとそれを分岐させるブランチは 特定のプロセスへ突入します。そのプロセスの一つは コードフリーズ (コードの凍結) です。コードフリーズが 始まると、そのブランチの名前がリリースになろうとしていることを 反映するものに変えられます。たとえば、4.0-STABLE と 呼ばれていたブランチは名前が 4.1-BETA へと 変えられ、コードフリーズとリリース前のテストが 始まったことを示します。 バグの修正はリリースの一部としてコミットされます。 ソースコードがリリースの形を取ったなら名前が 4.1-RC へと 変えられ、それからリリースが作られることを示します。 ひとたび RC のステージになってしまうと、発見された もっとも致命的なバグの修正しかできなくなります。 ひとたびリリースが (この例では 4.1-RELEASE) 作られれば、 そのブランチは 4.1-STABLE と改名されます。

7.38.

新しいカーネルを入れようとしたのですが、 chflags に失敗します。どうすれば良いのでしょう?

簡単な回答: 多分、セキュアレベルが 0 より大きくなっているのでしょう。 直接シングルユーザモードで再起動して、 カーネルをインストールしてください。

詳しい回答: FreeBSD では、セキュアレベルが 0 より大きい場合、 システムフラグの変更が禁止されます。 現在のセキュアレベルは、次のコマンドを使って調べることができます。

# sysctl kern.securelevel

セキュアレベルを下げる操作は、できないようになっています。 そのため、カーネルをインストールするには、 シングルユーザモードで起動するか、/etc/rc.conf のセキュリティ設定を変更して再起動する必要があります。 セキュアレベルの詳細は init(8) を、 rc.conf の詳細は /etc/defaults/rc.conf および、 rc.conf(5) のマニュアルページをご覧ください。

7.39.

システムの時刻を 1 秒以上変更することができないのです! どうすれば良いのでしょう?

簡単な回答: 多分、セキュアレベルが 1 より大きくなっているのでしょう。 直接シングルユーザモードで再起動して、 時刻の変更をしてください。

詳しい回答: FreeBSD では、セキュアレベルが 1 より大きい場合、 1 秒以上の時刻変更が禁止されます。 現在のセキュアレベルは、次のコマンドを使って調べることができます。

# sysctl kern.securelevel

セキュアレベルを下げる操作は、できないようになっています。 そのため、システムの時刻を変更するには、 シングルユーザモードで起動するか、/etc/rc.conf のセキュリティ設定を変更して再起動する必要ばあります。 セキュアレベルの詳細は init(8) を、 rc.conf の詳細は /etc/defaults/rc.conf および、 rc.conf(5) のマニュアルページをご覧ください。

7.40.

rpc.statd(8) にメモリリークを見つけました! メモリを 256 メガバイトも使っています。

いいえ。それはメモリリークではありませんし、 256 メガバイトのメモリを使っている、ということでもありません。 おそらく (ほとんどの場合)、 処理に都合が良いように非常にたくさんの量のメモリを そのプロセスのアドレス空間にマッピングしているのでしょう。 技術的な見地から考えても、これは大きな害があることではなく、 単に top(1)ps(1) といったツールの表示に影響がある程度です。

rpc.statd(8) は、(/var にある) ステータスファイルを自分のアドレス空間にマッピングします。 マッピングは、後で大きな空間が必要になった時に再マッピングしないで済むよう、 非常に大きなサイズを指定して行なわれます。 これは、ソースコードに含まれる mmap(2) 関数のマッピング長を示す引数に 0x10000000 が指定されていることからも分かります。 この数字が IA32 アーキテクチャの持つアドレススペース全体の 16 分の 1、すなわち、ちょうど 256 メガバイトに相当するのです。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。