[OpenBSD] English

8.0 - 一般的な質問


Table of Contents


8.1 - 最初にログインすると、kerberos の警告がいろいろ出てくるんですけど

 初めてシステムをインストールしてログインしたとき、たぶんこんな警告メッセージが出るだろう:

Warning: no Kerberos tickets issued.

 最初だから、まだシステムの Kerberos は当然設定していないはずなので、もちろんチケットは得られないから、これはあたりまえだ。Kerberos は、ナマのパスワードがネットワーク上を行き来しないようにして、さらにユーザに期限をきることでセキュリティを高めるシステムだ。Kerberosの設定、あるいは設定したのにこのメッセージが出るというときには、faq10 Kerberos の設定 FAQを読もう。

 この警告は無視してもまったく構わない(けど無視せずに Kerberos 使おうぜ。セキュリティが売りの OpenBSD だもん)。以下の記述は、どうしても必要不可欠な場合にだけやること

 どうしてもこの警告に我慢ならず、いまもこの先も絶対にKerberosを使うつもりがないなら、完全に削除する方法は以下の通り:

8.2 - 仮想ターミナルの切り替えはどうするの?

 簡単。[ctrl] - [alt] - [One of the function keys] とタイプして(i386では)。

 仮想ターミナルの機能を持っているのは i386 アーキテクチャだけだ。Xを使っているときでも仮想ターミナルは使える。たとえば、ターミナル 1 で X を起動して、 [ctrl]-[alt]-[F2] でターミナル 2 に切り替えたら、X は一見消えたように見える。ターミナル 1 に戻してもそのままでは出てこない。このときには[ctrl]-[alt]-[F5] で X 画面が戻ってくるよ。


8.3 - root パスワード忘れちゃいました……どうしましょ!

回復のためのステップ:

  1. シングルユーザモードに入る。i386 マシンでは、ブートプロンプトで boot -sとタイプしよう。
  2. ドライブをマウントする。
  3. もし /usr が / とは別のパーティションにあるなら(別にしておくべきなのだぞ)、そっちもマウントしなきゃいけない。
  4. passwd(1)を実行する。
  5. ふつうにマルチユーザモードで起動しよう……そしてこんどはパスワードを忘れたりすんじゃねーぞ!

8.4 - X が起動せずにエラーメッセージが山ほど出てくるぞ

 X の設定が完璧で、ちゃんと機能するはずの XF86Config を使っているなら、たぶん問題は machdep.allowaperture だろう。さらに、カーネル設定で以下のオプションがあるのを確認すること[どっちも GENERIC カーネルには入っている] :

option XSERVER
option APERTURE

 それから /etc/sysctl.conf を編集して machdep.allowaperture=1 とする。これで X がアパーチャドライバにアクセスできるようになる。これはインストール時に、X を使うかどうかの質問で yes と答えていたらちゃんと設定されているはずなんだけどね。OpenBSD は、すべての X サーバについて、アパーチャドライバが設定されていることが必要だ。これがビデオドライバの I/O ポートへのアクセスをコントロールするからだ。

 その他、i386 上での X の問題については、 http://www.xfree86.org/FAQ/にあるXFree86 FAQ を参照。


8.5 - CVS ってなんだ、どう使うの?

 CVS は、OpenBSD プロジェクトがソースコードへの変更をコントロールするのに使っているものだ。 CVS は Concurrent Versions System の略だ。詳しい情報は http://www.cyclic.com/ で読める。CVS をエンドユーザが使えば、ソースの変更やportsツリーをいつも最新にしておける。CVS のおかげで、プロジェクトの数々の CVS ミラーからソースをダウンロードするのはとても簡単だ。

そもそも CVS 環境を設定するには

 最初に CVS 環境を設定するには、やりかたがいくつかある。手始めに、ソースを初めて CVS チェックアウトする必要がある。CD を買った人はおめでとう。CD には、そのリリースの CVS チェックアウトが含まれている。以下のようにすればそれを抽出できる:

1) CD からツリーをコピーしよう (CD は /mntにマウントされているものとする):

# mkdir /usr/src
# cd /mnt; cp -Rp CVS Makefile bin distrib etc games gnu \
include kerberosIV lib libexec lkm regress sbin share \
sys usr.bin usr.sbin /usr/src

2) 別のやり方としては CD を書き込み可能なディレクトリ以下に union mount しよう。ただし union ファイルシステムのコードはまだ完璧ではないことに注意。

# mkdir /usr/src
# mount -t union -o -b /mnt /usr/src

 これで /usr/src はきちんとしたチェックアウト領域になって、cvs(1) コマンドはすべてうまくいくようになる。

 OpenBSD CD がなければ、ソースを OpenBSD AnonCVS サーバからとってこなきゃいけない。サーバの一覧は http://www.openbsd.org/anoncvs.html にある。サーバを選んだら、どのモジュールがほしいかを選ぼう。CVS ツリーからチェックアウトできるモジュールは主に3つある:

 ほしいモジュールが決まったら、取ってくるまでにあと一歩だ。どのメソッドを使うかを決めなきゃいけない。デフォルトでは CVS はrsh(1) を使ってファイルを取ってくるけれど、一部の AnonCVS サーバはこれを認めないので、ほとんどの場合は ssh を使うのがいちばんいい。ファイヤーウォールのうしろにいる人たちには、pserver と一部の AnonCVS サーバが ssh をポート 2022 で動くようなオプションがある。どのサーバがどのプロトコルをサポートしているかは http://www.openbsd.org/anoncvs.html を必ずチェックするように。以下に、簡単なソースチェックアウトを試しにやってみよう。ここではアメリカにある AnonCVS サーバを使っているけれど、でもアメリカ以外にいる人は、ちかくのサーバを必ず使うように。世界中にたくさん AnonCVS サーバがあるから、手近なのを使うといい。また、ファイルの取得には、ssh を使っている:

ericj@oshibana:~> export CVS_RSH=/usr/bin/ssh
ericj@oshibana:~> echo $CVS_RSH
/usr/bin/ssh
ericj@oshibana:~> export CVSROOT=anoncvs@anoncvs.usa.openbsd.org:/cvs
ericj@oshibana:~> cvs get src
Warning: Remote host denied X11 forwarding, perhaps xauth program could not be run on the server side.
cvs checkout: in directory src:
cvs checkout: cannot open CVS/Entries for reading: No such file or directory
cvs server: Updating src
U src/Makefile
[snip]

 ここで環境変数 CVSROOT を使っているのにも注意。これは cvs(1) に、どの AnonCVS サーバを使うか指定するものだ。これは -d オプションを使っても指定できる。たとえば:

ericj@oshibana:~>cvs -d anoncvs@anoncvs.usa.openbsd.org:/cvs get src

 以上のコマンドは /usr から実行しよう。すると /usr/src, /usr/ports, and /usr/www というディレクトリができる。もちろんこれは、どのモジュールをチェックアウトするかによる。こうしたモジュールはどこにダウンロードしてもいいけれど、でもそれで作業するつもりなら(つまりビルドしたりするなら)、デフォルトではソースは上記のディレクトリにあるものと想定されている。

CVS ツリーを最新に保つ

 最初のツリーができあがったら、それを最新にしておくのは簡単だ。更新は好きなときにやればいい。AnonCVS サーバごとに更新頻度はちがうから、ここでも http://www.openbsd.org/anoncvs.htmlをチェックしておこう。この例では、www モジュールを anoncvs.usa.openbsd.org から更新する。-q オプションを使っているのに注意。これはサーバからのアウトプットをいちいち全部表示しないようにする。

ericj@oshibana:~> echo $CVSROOT                                 
anoncvs@anoncvs.usa.openbsd.org:/cvs
ericj@oshibana:~> cvs -q up -PAd www
Warning: Remote host denied X11 forwarding, perhaps xauth program could not be run on the server side.
U www/want.html
M www/faq/faq8.html
ericj@oshibana:~>

その他 cvs オプション

 一部の人にとって、こういうリポジトリの更新には帯域幅と時間が深刻な問題となるだろう。だから CVS には -z[1-9] オプションがあって、gzip でデータを圧縮してくれる。これを使うには -z[圧縮レベル] とやる。たとえば圧縮レベル 3 なら -z3 だ。


8.6 - ports ツリーってなに?

 ports ツリーは Makefile の集まりで、ユーザランドのプログラムをダウンロード、パッチ、configure、インストールしてくれる。いちいちこれを手作業しなくても、OpenBSD で実行できるようになるんだ。ports ツリーは OpenBSD ftp サーバの /pub/OpenBSD/2.7/ports.tar.gz にある。最新の ports は 'ports' cvs ツリーか、/pub/OpenBSD/snapshots/ports.tar.gz にある。でもほとんどの人たちには、ports を使うより packages を使うほうがずっといいだろう。Packages は ports から作られて、コンパイル済みですでに使える。packages について詳しくは FAQ8.7を参照。

最新の Ports ツリーを入手する

 最新の ports ツリーを使うつもりなら、最新リリースの OpenBSD を手に入れよう。理由は、ports ツリーはたえず変化して手が加えられていて、OpenBSD のほかの部分との関係が出てくるからだ。もしこのガイドラインにしたがわなければ、更新で細々した問題が出てくるおそれがある。

 OpenBSD Ports ツリーを最新にしておくいちばんいい方法は、cvs(1) を使うことだ。OpenBSD はだれでも使える Anonymous CVS サーバをたくさん持っている。cvs について詳しくは www.openbsd.org/anoncvs.htmlFaq8.5を見てほしい。

 とはいえ、そもそもports ツリーを持っていなくても、OpenBSD ftp サーバからダウンロードできる。ftp サーバの一覧は www.openbsd.org/ftp.html にある。ここから /pub/OpenBSD/2.7/ports.tar.gz をダウンロードして、これを /usr/ports に解凍しよう。たとえば:

ericj@oshibana> ftp ftp://ftp.openbsd.org/pub/OpenBSD/2.5/ports.tar.gz
ericj@oshibana> sudo cp ports.tar.gz /usr
ericj@oshibana> cd /usr; sudo tar xfz ports.tar.gz

 これさえ終われば、あとは cvs(1) を使って Ports ツリーを更新できる。もしベースとして 2.5 リリース用の Ports ツリーから始めた人は、ちょっと変更を加える必要がある。特に make(1)が使うファイルの入った/usr/share/mkは更新する必要がある。もしシステム上に src ツリーがあれば、/usr/share/mkの更新は cvs(1) を使って簡単に以下のようにすればいい:

ericj@oshibana> cd /usr/src/share/mk; sudo make install

 これでしかるべきファイルがしかるべき場所におさまる。これが終わったら、最新の make(1) バイナリも必要になるかもしれない。これは自分でつくるしかない。もしシステムにsrcツリーがなければ、cvs(1) でとってきてコンパイルしよう。例:

ericj@oshibana> export CVS_RSH=/usr/bin/ssh
ericj@oshibana> cvs -danoncvs@any.anoncvs.server:/cvs get src/usr.bin/make
cvs server: Updating src/usr.bin/make
U src/usr.bin/make/Makefile
U src/usr.bin/make/Makefile.boot
U src/usr.bin/make/arch.c
U src/usr.bin/make/bit.h
U src/usr.bin/make/buf.c
U src/usr.bin/make/buf.h
U src/usr.bin/make/compat.c
[SNIP] 
ericj@oshibana> cd src/usr.bin/make; sudo make install

 もしマシン上にすでに src があれば、単に make をアップデートしてインストールすればいい。とりあえず、これだけやってあれば ports ツリーはまともに使えるようになる。

 ports ツリーのスナップショットは毎日つくられて、OpenBSD ftp サーバからダウンロードできる。ファイルは /pub/OpenBSD/snapshots/ports.tar.gzだ。

どんな ports があるの? どうやって探せばいい?

 ports を探す方法は二通りある。まずは www.openbsd.org/portstat.html をチェックすることだ。ここにはいまある ports が一覧になっている。もう一つは、ports ツリーそのものを使って、キーワードで検索をかけることだ。これには make search key="searchkey" とやろう。たとえば 'samba'を検索するとこうなる:

ericj@oshibana> make search key="samba"
Port:   samba-2.0.5a
Path:   /usr/ports/net/samba
Info:   free SMB and CIFS client and server for UNIX
Maint:  ports@openbsd.org
Index:  net
B-deps:
R-deps:
Archs:  any

Port:   ADMsmb-0.2
Path:   /usr/ports/security/ADMsmb
Info:   Samba security scanner
Maint:  dugsong@monkey.org
Index:  security
B-deps:
R-deps:
Archs:  any

Portsのインストール

 Ports の make とインストールは、すさまじく簡単になるようにしてある。以下に、 X11 のプログラム xfig をインストールしたい人の例を挙げておこう。依存関係が自動的に検出されて補われていることに注目:

 まずは、ほしいプログラムのディレクトリに cd する。プログラムを探しているなら、locate データベースを更新するか、さっき説明した検索機能を使おう。ほしいプログラムのディレクトリに入ったら、make install とタイプするだけだ。たとえば:

fenetyllin:/usr/ports/graphics/xfig# make install
===>  Extracting for xfig-3.2.2
===>  xfig-3.2.2 depends on shared library: jpeg.62. - /usr/local/lib/libjpeg.so.62.0 found
===>  xfig-3.2.2 depends on shared library: Xaw3d.6. - not found
===>  Verifying install for Xaw3d.6. in /usr/ports/x11/Xaw3d
>> Xaw3d-1.3.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://crl.dec.com/pub/X11/contrib/widgets/Xaw3d/R6.1/.
Connected to crl.dec.com.
220 crl.dec.com FTP server (Digital UNIX Version 5.60) ready.
331 Guest login ok, send ident as password.
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Type set to I.
250 CWD command successful.
250 CWD command successful.
Retrieving pub/X11/contrib/widgets/Xaw3d/R6.1/Xaw3d-1.3.tar.gz
local: Xaw3d-1.3.tar.gz remote: Xaw3d-1.3.tar.gz
227 Entering Passive Mode (192,58,206,2,5,14)
150 Opening BINARY mode data connection for Xaw3d-1.3.tar.gz (0.0.0.0,0) (290277 bytes).
100% |**************************************************|   283 KB    00:00 ETA
226 Transfer complete.
290277 bytes received in 101.09 seconds (2.80 KB/s)
221 Goodbye.
===>  Extracting for Xaw3d-1.3
/bin/mkdir -p /usr/ports/x11/Xaw3d/work/xc/lib/Xaw3d/X11/Xaw3d
cd /usr/ports/x11/Xaw3d/work/xc/lib/Xaw3d/X11/Xaw3d; ln -sf ../../*.h .
===>  Patching for Xaw3d-1.3
===>  Configuring for Xaw3d-1.3
mv -f Makefile Makefile.bak
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
make Makefiles
[snip]

インストール済みの ports/packagesの一覧

 ports と package のいずれも pkg_info コマンドを使えばインストールされたものの一覧が見られる。

bsd# /usr/sbin/pkg_info
zsh-3.0.5           The Z shell.
screen-3.7.4        A multi-screen window manager.
ssh-1.2.21          Secure shell client and server (remote login program).
emacs-20.2          GNU editing macros.
lynx-2.7.1ac-0.107  An alphanumeric display oriented World-Wide Web Client.
tcsh-6.07.02        An extended C-shell with many useful features.
bash-2.01           The GNU Borne Again Shell.
zip-2.2             Create/update ZIP files compatabile with pkzip.
mm-2.7              Implementation of MIME, the Multipurpose Internet Mail Exten
ircii-2.8.2-epic3.004 An enhanced version of ircII, the Internet Relay Chat client
ispell-3.1.20       An interactive spelling checker.
tin-1.3.970930      TIN newsreader (termcap based)
procmail-3.11p7     A local mail delivery agent.
strobe-1.03         Fast scatter/gather TCP port scanner
lsof-4.15           Lists information about open files.
xntp3-5.92          Network Time Protocol Implementation.
ncftp-2.4.3        
nmh-0.27            The New MH mail handling program
bzip2-0.1p12        A block-sorting file compressor

その他情報

 portsについて詳しくは ports(7) man ページを参照。

 ports ツリーは絶えず拡張しているので、手伝いたければ please see: http://www.openbsd.org/ports.htmlを参照してほしい。


8.7 - packagesって?

 Packages は、いちばんよく使われるプログラムのコンパイル済みバイナリだ。OpenBSD システムでは即使える。portsと同じように、packages も管理更新がとても簡単だ。Packages はどんどん増えているから、リリースごとに新しい packages に注目しよう。

 package 管理に使うツールの一覧を挙げる:

packageの見つけ方

 賢いユーザのあなたはもちろん OpenBSD CD を買ったことと思う。packages は、アーキテクチャごとにわかれてそれぞれの CD 上にある。もし OpenBSD CD をお持ちでないなら、ftp ミラーのどこからでもダウンロード可能だ。ftpミラーの一覧は http://www.openbsd.org/ftp.html にある。Package のありかは /pub/OpenBSD/2.7/packages 以下で、アーキテクチャごとに分かれてディレクトリにおさまっている。

Packageのインストール

 packages のインストールには pkg_add(1) ユーティリティを使う。pkg_add(1) はバカみたいに使いやすいユーティリティだ。以下の2例ではpkg_add(1) を使って package をインストールする。最初の例は pkg_add(1) を使ってローカルディスク上の package をインストールしている。もう一つは、ftp 経由でインストールをしている。どっちも screen-3.7.6 をインストールしている。

ローカルディスクからインストール

$ sudo pkg_add -v screen-3.7.6.tgz
Requested space: 749864 bytes, free space: 2239117312 bytes in /var/tmp/instmp.cpsHA27596
Running install with PRE-INSTALL for `screen-3.7.6'
extract: Package name is screen-3.7.6
extract: CWD to /usr/local
extract: /usr/local/bin/screen-3.7.6
extract: execute 'ln -sf screen-3.7.6 /usr/local/bin/screen'
extract: /usr/local/man/man1/screen.1
extract: /usr/local/info/screen.info
extract: execute '[ -f /usr/local/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > /usr/local/info/dir'
extract: execute 'install-info /usr/local/info/screen.info /usr/local/info/dir'
extract: /usr/local/lib/screen/screencap
extract: /usr/local/lib/screen/screenrc
extract: CWD to .
Running mtree for `screen-3.7.6'
mtree -q -U -f +MTREE_DIRS -d -e -p /usr/local
Running install with POST-INSTALL for `screen-3.7.6'

+---------------
| The file /etc/screenrc has been created on your system.
| You may want to verify/edit its contents
|
| The file /usr/local/lib/screen/screencap contains a
| termcap like description of the screen virtual terminal.
| You may use it to update your terminal database.
| See termcap(5).
+---------------

Attempting to record package into `/var/db/pkg/screen
Package `screen-3.7.6' registered in `/var/db/pkg/screen-3.7.6'

 この例では -v フラグを使って、省略なしのメッセージを表示させている。このオプションは別に必要ないのだけれど、デバッグには便利だし、さらに pkg_add(1) が実際になにをやっているかを理解してもらうためにここでは使っている。でも、本当に意味のあるメッセージも出てきている。/etc/screenrc に関するものだ。こういうだいじなメッセージは、 -v フラグの有無にかかわらず出てくる。

ftp経由でインストール

$ sudo pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/2.6/packages/i386/screen-3.7.6.tgz
>>> ftp -o - ftp://ftp.openbsd.org/pub/OpenBSD/2.6/packages/i386/screen-3.7.6.tgz

+---------------
| The file /etc/screenrc has been created on your system.
| You may want to verify/edit its contents
|
| The file /usr/local/lib/screen/screencap contains a
| termcap like description of the screen virtual terminal.
| You may use it to update your terminal database.
| See termcap(5).
+---------------

 この例では、ぼくが i386 用の package をインストールしたのがわかる。これは自分のアーキテクチャにあわせてほしい。注:すべてのアーキテクチャに同じ package があるとは限らない。ports の中には一部アーキテクチャでは使えないものがあるので。この例では -v フラグを使わなかったので、本当に必要なメッセージしか表示されていない。

インストール済み package を見て削除

 システムにインストール済みの package を見るには pkg_info(1) を使う。これは、package 削除のときに正しい名前を調べるとき便利だ。システムにインストール済みの package を見るには、こうするだけ:

$ pkg_info
sslUSA26           ssl26.1 USA-only non-commercial crypto libs incl. SSL & RSA
mpg123-0.59q       mpeg audio 1/2 layer 1, 2 and 3 player
nmap-2.3b6         port scanning large networks
ircii-2.8.2-epic3.004enhanced version of ircII (internet relay chat)
screen-3.7.6       multi-screen window manager
unzip-5.40         extract, list & test files in a ZIP archive
xntp3-5.93e-export Network Time Protocol implementation
icb-5.0.9          Internet CB - mostly-defunct chat client

 package を削除するには、pkg_info(1) で表示されるpackage の正しい名前を調べて、pkg_delete(1) を使ってそれを削除すればいい。以下の例では screen package が削除されている。ときには、pkg_delete(1) で削除されなかったものを自分で削除しろという指示が出ることがあるのに注意。pkg_add(1) ユーティリティと同じく、-v フラグを使えばアウトプットがもっと省略なしになる。

$ sudo pkg_delete screen-3.7.6

+---------------
| To completely deinstall the screen-3.7.6 package you need to perform
| this step as root:
|
|           rm -f /etc/screenrc
|
| Do not do this if you plan on re-installing screen-3.7.6
| at some future time.
+---------------


8.8 - 起動時に接続していなかったフロッピードライブを使う手はあるかね?

 もちろん。fd*エントリのケツに "flags 0x20" をつけてカーネルをコンパイルしなおそう。こんなラインになるはずだ:

  fd*     at fdc? drive ? flags 0x20

 あとは、フロッピードライブはいつでも使えるようになる。起動時に差し込んであろうとその後だろうと関係なくなる。


8.9 - 起動時オプション:OpenBSD ブートローダを使う

 OpenBSD システムをブートするときに、bootプロンプトが出てきたのに気がついただろう:

boot>

 ほとんどの人は、ここで何もしなくていい。コマンドがなければ、自動的に起動に入る。でもときどき問題が起きたり、特別な機能がほしかったりする。どのときに、ここにオプションを入れると便利だ。まず手始めにboot(8) man ページを一通り読んでほしい。ここではブートローダのいちばんよく使うコマンドをざっと見てやろう。

 手始めに、コマンドがなければブートローダは自動的に /bsd をブートしようとする。これが失敗したら /obsd でやってみて、ブートできるカーネルが見つかるまでこれを続ける。カーネルを手で指定するには、こうタイプしよう:

boot> boot wd0a:/bsd

または

boot> b /bsd

 いまのは、wd0aが root デバイスに設定されていれば機能する。

 OpenBSD カーネルで使えるオプションの簡単な一覧を以下に挙げよう:

オプションの入力は、以下のような形式になる:
boot [ image [-abcds]]

 もっと詳しい話は、boot_i386(8) man ページを読もう。


8.10 - S/Key を OpenBSD システムで使う

 S/Key は「ワンタイム・パスワード」方式だ。保護されていないチャンネル上用に、ワンタイム・パスワードの利用を可能にする。これは ssh や、暗号化されたチャンネルが使えない人にはとても便利なことがある。OpenBSD's S/Key 実装は、単方向ハッシュとして各種アルゴリズムが使える。使えるアルゴリズムの一覧を以下に:

S/Keyの設定 - 第一歩

 まず手始めに /etc/skeykeys というファイルが必要だ。こいつがなければ、スーパーユーザに作ってもらおう。これは次のようにすればいいだけだ:


# touch /etc/skeykeys

 このファイルができれば、S/Key を初期化できる。これにはskeyinit(1)を使うしかない。skeyinit(1) ではまずシステムパスワードを要求される。つまり、システムにログインするときに使ったパスワードだ。skeyinit(1) を保護されていないチャンネル上で動かすのは、まったくおすすめできないので、これは保護されたチャンネル(sshなど)か、コンソールでやること。システムに認証されたら、こんどは別のパスワードを入力しろと言われる。このパスワードは秘密パスワードで、システムパスワードとは別物だぞ。この秘密パスワードは、システムパスワードのように8文字の制限はない。それどころか、最低でも10文字必要だ。数語からなる文章かなんかがいいだろう。以下に、ユーザを追加した例を挙げよう。

oshibana:ericj> skeyinit ericj
[Adding ericj]
Reminder - Only use this method if you are directly connected
   or have an encrypted channel.  If you are using telnet
   or rlogin, exit with no password and use skeyinit -s.
Enter secret password:
Again secret password:

ID ericj skey is otp-md5 99 oshi45820             
Next login password: HAUL BUS JAKE DING HOT HOG

 ここで特にだいじなのが ID ericj skey is otp-md5 99 oshi45820 という一行。これはユーザにいろんな情報を与えてくれる。それぞれの部分を分解して、意義を説明しよう。

 でも直接重要になってくるのがパスワードだ。パスワードは、6つの短い単語でできている。この組み合わせが、空白なんかも含め、あなたのパスワードだ。

実際に S/Key を使ってログインする。

 これでskey は初期化されて、パスワードももらった。ログインの準備完了。s/keyを使ったログインセッションの例を次に挙げよう。

oshibana:ericj> ftp localhost
Connected to localhost.
220 oshibana.shin.ms FTP server (Version 6.4/OpenBSD) ready.
Name (localhost:ericj): ericj
331 Password [ otp-md5 96 oshi45820 ] for ericj required.
Password:
230- OpenBSD 2.5-current (OSHIBANA) #8: Tue Jun 22 19:20:16 EDT 1999
230-
230- Welcome to OpenBSD: The proactively secure Unix-like operating system.
230-
230- Please use the sendbug(1) utility to report bugs in the system.
230- Before reporting a bug, please try to reproduce it with the latest
230- version of the code.  With bug reports, please try to ensure that
230- enough information to reproduce the problem is enclosed, and if a
230- known fix for it exists, include that as well.
230-
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

 シーケンス番号が変わったのに気がついたね。 otp-md5 96 oshi45820. これは、すでに s/key を使ってぼくが数回ログオンしているからだ。でも、一回ログインしたら、次のパスワードはどうやって手に入れる? そうね、それをやるには、使っているシーケンス番号とキーが必要だ。でもシーケンス番号なんかいちいち覚えてられない、と思ったでしょう。簡単だ。skeyinfo(1) を使えば、なにを使うべきかがわかる。たとえばここでは、いずれ必要になるだろうログイン用のパスワードを生成しなきゃならない(これは保護されたチャンネルでやってるのをお忘れなく):

oshibana:ericj> skeyinfo
95 oshi45820

 これをもとに、次のログイン用のパスワードがつくれる。これには skey(1)を使う。上の出力をそのまま使って、パスワードを作ればいい。

oshibana:ericj> skey 95 oshi45820
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:
NOOK CHUB HOYT SAC DOLE FUME

 たぶんあなたたちの多くは、こうしたパスワードを作るのに使えるような保護された接続がいつも使えるわけじゃないだろうと思うし、これを保護されていない接続上で作るのは意味がない。だからいっぺんに複数のパスワードを作っておきたいだろう。どうすればいいか? そうね、 skey(1) に、パスワードをいくつ作りたいかを指定しておけばいい。これをプリントアウトして、出先に持ち歩こう。

oshibana:ericj> skey -n 5 95 oshi45820
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:
91: SHIM SET LEST HANS SMUG BOOT
92: SUE ARTY YAW SEED KURD BAND
93: JOEY SOOT PHI KYLE CURT REEK
94: WIRE BOGY MESS JUDE RUNT ADD
95: NOOK CHUB HOYT SAC DOLE FUME

 ここで、最初に使うのがいちばんさいごに出てきたパスワードだということに注意。番号は100からだんだん減っていくんだからね。

S/Key を telnet(1), ssh(1), rlogin(1)で使う

S/Key を telnet(1), ssh(1), rlogin(1) で使うのは、ftp とだいたい同じだけれど、でも最初に入れるパスワードは「s/key」にすること。例:

ericj@oshibana> telnet localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

OpenBSD/i386 (oshibana) (ttyp2)

login: ericj
Password:              <------------ここで "s/key" と入力。
otp-md5 98 oshi45821
Response: SCAN OLGA BING PUB REEL COCA
Last login: Thu Oct  7 12:21:48 on ttyp1 from 156.63.248.77
Warning: no Kerberos tickets issued.
OpenBSD 2.5-current (OSHIBANA) #4: Thu Sep  2 23:36:16 EDT 1999

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

You have mail.
ericj@oshibana>

S/Keyのコントロール

 S/Key をもっと細かくコントロールするには /etc/skey.access ファイルがある(これはデフォルトでは存在しないので、自分でこさえるように)。このファイルは主に3つの方法で S/Key を制限できる:

 もしある一人のユーザ (ericj) が特定の IP (10.1.1.5) からログインしてくるのを認めたければ、こんなファイルをつくる。

# cat /etc/skey.access
permit internet 10.1.1.5
permit user ericj


8.11 - あたしの Macintosh の時計が遅れまくってるわよ?

 これはハードウェアのバグのせいなのよ。OpenBSD は、現在の時間を追いかけるのにクロック割り込みを使うけれど、この割り込みはアップルのアーキテクチャではプライオリティが最低になっている。そこで負荷が重くなると(たとえばディスクやネットワークの活動中)、クロック割り込みは捨てられて、Unixのクロックはあまり進まないってことになる。

 MacOS は、つねにハードウェアクロックを読みにいってこの問題を回避している。OpenBSD は、ハードウェアクロックは起動時にしか読まない。シャットダウン時には、カーネルはUnix時間をもとにハードウェアクロックを修正するほどは自信がないことがわかるだろう。この時間のロス問題はよく知られているからだ。

 いちばんいい解決法は、xntp を走らせることだ(ports/packageコレクションに入っている)。これは、外の時間サーバをもとに時計をあわせてくれる。インストールや設定の詳細は、FAQ10:xntpで時間あわせを参照しよう。そして途中でちょっと時間がずれるくらいは我慢することだね。ときどき、時間のロスが大きすぎると、xntpd ですらこわがって時間をなおしてくれないけれど、この場合は /etc/rc.securelevel の ntpd に -g オプションをつけておけば、大幅なずれでも xntp の言うとおりになる。

 もう一つ、もっと簡単だけれど厳密さには欠ける方法が、rdate(8) を定期的に実行させることだ。crontabにエントリをつくって、できれば -a オプションをつけて時間が「ジャンプ」しないようにする。もしあなたが常時接続を使っておらず、PPPを利用しているなら、 rdate(8) の起動に使えるところは /etc/ppp/ppp.linkup ファイルで rdate(8) を呼ぶようにしてもいいだろう。

http://www.macbsd.com/macbsd/macbsd-docs/faq/faq-3.html#ss3.17 も参照のこと。


8.12 - OpenBSD はマルチプロセッサマシンで動くかしら?

 動かない。

OpenBSD/i386 はマルチプロセッサを使わない。マルチプロセッサシステムボードでは、プロセッサを一つだけ使って動く。OpenBSD/sparc は、マルチプロセッサの sparc システムではそもそも動かない。ほかのプラットホームでも、マルチプロセッサ機能はいまのところサポートされていない。

 理由は簡単:マルチプロセッサマシンにさわれる開発者があまりいないからだ。もしマルチプロセッサマシンを寄付しないなら、http://www.openbsd.org/donations.htmlを参照。開発者たちは、SMPサポートをするのにi386, sparc, hppa などのマルチプロセッサハードウェアの寄付を求めております。OpenBSD にマルチプロセッササポートをつけるプロジェクトも動いていて、進捗は http://www.openbsd.org/smp.htmlでわかる。


8.13 - ttyデバイスを使おうとすると Input/output エラーが時々出るぞ

 OpenBSD 2.6 以降は、OpenBSD システム側から開始する接続には /dev/cuaXX を使わないとダメなのだ。 /dev/ttyXX デバイスは、ターミナルやダイヤルイン利用だけになった。確かに昔は tty デバイスも使えたんだけれど、いまの OpenBSD カーネルはもうこれとは互換性がない。

 cua(4)から引用:

ハードウェアターミナルポートの場合、ダイヤルアウトはコーリングユニットというデバイスノードをマッチさせることでサポートされている。たとえば、/dev/tty03 というターミナルは、対応する /dev/cua03 というコーリングユニットを持っている。この二つのデバイスは、ダイヤルインデバイスノードに128を足したマイナー番号を持つ、コーリングユニット・デバイスノードを作ることで区別される。  ダイヤルイン・デバイス(tty) はふつうは、システムに自分がアクティブなのを示すためにはハードウェア信号を必要とする一方で、ダイヤルアウト・デバイス(cua)はそれを必要とせず、モデムのようなデバイスと邪魔なしに通信できることになる。これはつまり、getty(8) のようなプロセスは、ダイヤルイン・デバイスでは接続が確立するまで待つということだ。一方、ダイヤル・アウト接続(まったく同じターミナルポートでも)はシステム上のほかの何一つじゃますることなく確立できる。getty(8) プロセスは、ターミナルポートで何か起きていることさえ気がつかない。もしダイヤルアウト接続が完了したあとで、接続の呼び出しがきたら、 getty(8)はダイヤルアウトの活動になにも気がつかずに、それにきちんと対応する。

8.14 - OpenBSD 用の Netscape バイナリってどこで見つかるの?

 OpenBSD 専用のNetscape バイナリというのはない。でも OpenBSD はほかの OS のバイナリエミュレーションをサポートしているから、ほかのバイナリが使えるのだ。

 Ports システムを使えば、何の問題もなくインストールできるはず。Portsツリーがインストールしてあれば、Navigator Port と Communicator Port は /usr/ports/www/netscapeにある。


8.15 - いまやOpenBSD の一部となったmg エディタはどうやって使うの(2.6以降!!)?

Mg は Emacs-系のマイクロテキストエディタだ。マイクロというのはつまり小さいってわけ(Emacs はでっかいもんね!) 基本的なことは mg(1) manページを読もう。それとソースコードについてくるチュートリアルも参照。もっとおもしろい質問については (たとえば「おれのマシンにはメタキーがないぞ!」とか)、Emacs FAQを参照のこと。

 なお mg は小さな Emacs 実装で、Emacs 17 相当のテキストエディタ機能しかない。Emacs のほかの機能はあまり実装されていないぞ(たとえばメールやニュース機能、Lisp, C++, Lex, Awk, Java, などのモード...)


8.16 - Ksh はぼくの .profileを見てないみたいだぞ!

 理由として考えられるのは二つ。

1) .profile の所有者がそのユーザになってない
これは簡単になおせる。ある ユーザ名について、

# chown ユーザ名 ~ユーザ名/.profile

2) ksh を X windows の中から使っている
 xtermでは、ksh の argv[0] がダッシュ(-)でプリペンドされていないのだ。argv[0] の前にダッシュ(-)をつければ、csh と ksh にも、ログインファイルを解釈しなきゃいけないんだな、とわかる。(csh のログインファイルは .login で、それとは別に .cshrc がcsh の起動時に必ず実行される。これは ksh のほうがもっとはっきりしている、起動スクリプトは .profile 一つしかない。このファイルは、シェルがログインシェルでないときには無視される。)

 これをなおすには、ホームディレクトリに .Xdefaults というファイルをつくろう。そこに XTerm*loginShell: true と書いておく。(訳注:.Xresourcesを使うほうがよいぞ)。

$ echo "XTerm*loginShell: true" > ~/.Xdefaults

 ほかではこんな必要はなかったかもしれない。一部の X Windows のインストールは、この設定をデフォルトにするからだ。OpenBSD は、XFree86 の流儀にしたがうことにしている。


8.17 - /etc/motd ファイルを変更しても上書きされちゃうみたいなのはなぜ?

 /etc/motd ファイルは、システムのブートのたびに編集されて、最初の一行がカーネルバージョン情報で置き換わる。このファイルを編集するときには、必ずてっぺんから二行あけたところから始めるのをお忘れなく。さもないと/etc/rc が、ブート時に、/etc/motdを編集するときに削除しちゃうよ。


8.18 - どうして www.openbsd.org は Solarisで動いてるの?

 開発者は一人残らず、こんなのどうでもいいことだと思ってはいるのだけれど、メーリングリストなんかでしょっちゅう出てくる質問なので、ここで答えておこう。 www.openbsd.org とメインの OpenBSD ftp サイトは、カナダはアルバータ大学の SunSITE でホスティングしてもらっているのだ、このサイトはでかい Sun システム上でホストされていて、ディスクもいっぱいあるし、インターネットの帯域幅も太い。SunSITE のおかげで OpenBSD グループはこの帯域幅にアクセスできるのだ。だからメインサイトはここで動いてる。OpenBSD ミラーの多くは OpenBSD で動いているけれど、それはこれほどの太い帯域幅へのアクセスが保証されていないから、グループとしては、メインサイトはアルバータ大学の SunSITE におくことにしたわけ。


8.19 - OpenBSD 2.8 でネットワークカードが認識されないで困ってます。

 OpenBSD 2.8 だと、一部のマシンがネットワークカードをきちんと認識しなかったり、一つのマシンに複数のネットワークカードがあると、ハングしたりするという問題が生じている。これは PCIBIOS の問題で、きちんと動くようにするにはちょっと迂回すればいいだけだ。起動時設定を入力してやって、PCIBIOS を無効にしよう。例を以下に示す:

boot> boot -c
OpenBSD 2.8 (GENERIC) #377: Tue Oct 24 03:04:08 MDT 2000
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Intel Pentium III (Coppermine) ("GenuineIntel" 686-class) 390 MHz
cpu0: FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,SYS,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXS
R,SIMD
real mem  = 66629632 (65068K)
avail mem = 56770560 (55440K)
using 838 buffers containing 3432448 bytes (3352K) of memory
UKC> disable pcibios
UKC> quit
[... snip ...]

 これが終わったら、FAQ 5.6 の指示にしたがって新しいカーネルをつくろう。そうすればもうこの話はこの先心配しなくてよくなる。


[FAQ トップに戻る] [7.0 - キーボード制御] [9.0 - Linuxからのお引っ越し]


OpenBSD Valid XHTML 1.0! www@openbsd.org 翻訳上の問題はhiyori13@alum.mit.edu

$OpenBSD: faq8.html,v 1.55 2000/09/20 00:17:24 ericj Exp $