[OpenBSD] English

10.0 - システム管理


Table of Contents


10.1 - su して root になろうとすると、どうしてグループがちがうとか言われるの?

既存のユーザがsu するには、手作業で "wheel" グループに追加してやる必要がある。これはセキュリティ上の理由からのものだから、だれにそのアクセスをあげるかは注意すること。OpenBSD では、wheel グループの人は su(1) ユーザランド・プログラムを使って root になれる。"wheel" にいないユーザは su(1) は使えない。ericjというユーザを"wheel" に追加するときに /etc/group に足すエントリを以下にしめす。

 もし新しいユーザの追加を adduser(8)でやっているなら、途中でInvite user into other groups:という設定項目が出てくるので、ここで wheel と答えれば wheel に追加される。これをやると /etc/group にその人が追加され、こんな感じになる:

wheel:*:0:root,ericj

 ユーザを"wheel" に加えずに、スーパーユーザの特権の一部をユーザに使わせたい場合には、sudo(8)を使おう。

10.2 - ファイルシステムを丸ごと複製するにはどうすれば?

 ファイルシステムの複製には dump(8)restore(8) を使う。たとえば、SRC ディレクトリ以下のものすべてを DST に複製するには、次のようにする:

# cd /SRC; dump 0f - . | (cd /DST; restore -rf - )

dump はやまほどのバックアップ能力を与えてくれるように設計されているので、単にファイルシステムの一部(あるいは丸ごと)を複製したいくらいのことでいちいち使うようなものでもないかも。それならtar(1)コマンドのほうが高速だ。形式はとても似ている:

# cd /SRC; tar cf -  . | (cd /DST; tar xpf - )

10.3 - システム内のデーモンはどうやって起動するの? (rc(8) の概要)

OpenBSD は rc(8) スタイルの起動をする。これは起動にいくつか鍵となるファイルを持っている。

rc(8) の仕組みは?

 システム管理者が専念すべき主要ファイルは、/etc/rc.conf, /etc/rc.local/etc/rc.shutdown だ。rc(8) の進行を理解してもらうために、以下にフローをつくってみた。:

OpenBSD付属のデーモンやサービスを起動する

 OpenBSD にデフォルトでついてくるデーモンやサービスのほとんどは、 /etc/rc.conf 設定ファイルをいじるだけで起動時にたちあがるようになる。手始めにまずデフォルトの /etc/rc.conf ファイルを見てやろう。こんな感じの行がいっぱいあるはずだ:

ftpd_flags=NO           # for non-inetd use: ftpd_flags="-D"

 いまみたいな行は、ftpd はシステム起動時には立ちあがらない、という意味だ(少なくともrc(8) 経由では。くわしくは Anonymous FTP FAQ を読もう)。いずれにしても各行にはコメントがついていて、そのデーモンやサービスの 通常利用 のときの値をしめしている。だからといって、そのデーモンやサービスでそのフラグを使うべし、ということではない。man(1)をいつでも見て、自分の好きな形で起動するようにできる。たとえばhttpd(8)のデフォルトはこんな具合だ:

httpd_flags=NO          # for normal use: "" (or "-DSSL" after reading ssl(8))

 ここでは明らかに、httpdの起動には、ふつうは何のフラグもいらないということが見て取れる。だからふつうにhttpdを使うだけなら、いまの行を: " httpd_flags=""" にすればいい。でもhttpdを、sslを有効にして立ち上げるには、 "httpd_flags="-DSSL"" というふうに編集しよう(詳しくは SSL FAQssl(8)を参照)。

ローカルのデーモン起動と設定

 portsなどほかの方法でシステムにインストールしたその他デーモンにについては、 /etc/rc.local ファイルを使う。たとえば、 /usr/local/sbin/daemonx にデーモンをインストールしたとしよう。これを起動時にたちあげたい。すると /etc/rc.local にこんなエントリを書き加える:

if [ -x /usr/local/sbin/daemonx ]; then
             echo -n ' daemonx';       /usr/local/sbin/daemonx
fi

 これ以降は、起動時にこのデーモンが実行される。起動時のエラーも見られる。もしエラーなしでふつうにブートしたら、こんな行が表示される:

Starting local daemons: daemonx.

rc.shutdown

/etc/rc.shutdownはシャットダウンのときに実行されるスクリプトだ。システムのシャットダウン前にやってほしいことは、すべてこのファイルに記述しておこう。 apm があったら、 "powerdown=YES" も設定しておこう。これは "shutdown -p"と同じだ。

10.4 - ユーザがあたしの OpenBSD システム経由でリモートからメールを送ろうとすると、リレーアクセスが拒否されるのはどうして?

 ちょっとこれやってみて:

# cat /etc/mail/sendmail.cf | grep relay-domains

 アウトプットはこんな感じだろう:

FR-o /etc/mail/relay-domains

 もしこのファイルがないようなら、これをこしらえよう。リモートからメールを送ってくるホストを、以下の構文で記述する必要がある。:

.domain.com    # domain.com内のホストからはすべてメールやりとりを認める
sub.domain.com # sub.domain.com とそのドメイン内のホストからはすべてメールやりとりを認める
10.2           #IP ネット 10.2.*.*内の全ホストからメールやりとりを認める

これを作り終えたら、sendmail に「HangUP」信号を送るのをお忘れなく(ほとんどのデーモンに設定を読み込みなおさせる信号だ):

# kill -HUP `cat /var/run/sendmail.pid`

参考文献

10.5 - POP を設定したのに、みんなPOPでメールアクセスできずに困っておるのよ。どうしませう?

 POP がらみの問題のほとんどは、一時ファイルとロックファイルの問題だ。pop サーバから次のようなエラーメッセージが出てきたら:

-ERR Couldn't open temporary file, do you own it?

 そうしたらファイル属性を次のようにしよう:

permission in  /var
drwxrwxr-x   2 bin     mail     512 May 26 20:08 mail


permissions in  /var/mail
-rw-------   1 username   username        0 May 26 20:08 username

 もう一つチェックしておきたいのは、ユーザの /var/mail ファイルがそのユーザ自身の所有になっているかどうかだ。もちろんそうなっているはずなんだけれど(つまり /var/mail/joe を所有しているのは joeのはずなんだけれど) もしこれがなぜかまちがっていたら、それが問題のもとだ!

 もちろん /var/mail をグループメールで書き込めるようにしたら、あいまいで変てこなセキュリティ上の問題が起きる。たぶんこうしても何の問題もないだろう。でも、問題の可能性はある(特にあなたが有名なサイトを運営していたりISPだったりしたら...)! OpenBSD の ports コレクションからcucipop みたいな POP デーモンを入れて走らせよう。あるいは単に、自分のpopデーモン用に選んだオプションがまちがっているのかもしれない(たとえばdot lockingとか)。あるいはそれがロックをかけるディレクトリを変えればすむ話かもしれない(ただしそうなるとロックは POP デーモンにとってのみ意味があることになるけれど)。

10.6 - SSL(8) でSecure HTTP サーバを走らせる

 OpenBSD 2.6から、OpenBSD は SSL対応 httpd つきで出荷される。でも各種特許がらみで、いくつかのライブラリは出荷できない。(訳注:2000年9月でこの特許は切れたので、OpenBSD2.8 以降ではこの段落のこれ以降は気にしなくていい)だから RSA 証明書を使うには、システムに追加のライブラリをインストールする必要がある。これは世界でどこにいるかによって、二種類のライブラリになる。 (NOTE: FTP インストールなどのネットワーク経由のインストールをした人は、たぶんすでにこのライブラリもインストール済みだろう)。アメリカ以外に住んでいる人は、"ssl26.tgz"というライブラリ、アメリカ国内の人は"sslUSA26.tgz" を使うこと。これは pkg_add(1) ユーティリティでインストールするものだ。たとえばライブラリの国際版をインストールするには、以下のコマンドを使う。 ${arch} はあなたのマシンのアーキテクチャだ (NOTE:: Alpha アーキテクチャは共有ライブラリがないので、これは使えない)。

# pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/2.6/packages/${arch}/ssl26.tgz

 httpd(8) といっしょに使うには、まず証明書をつくらないといけない。これは/etc/ssl/private/に保存される。ここで示すステップは ssl(8) man ページからとったものだ。詳しい話はそっちを見て欲しい。この FAQ は、webサーバ用に RSA 証明書の作り方は説明するけれど、 DSA サーバ証明書には触れない。これが知りたければ ssl(8) man ページを参照。

 まず手始めに、自分のサーバのキーと証明書をつくらなきゃ。RSA を使うには、まず libssl をアップグレードしておくおと。これで自分のキーを、OpenSSLを使って生成できる:

# openssl genrsa -out /etc/ssl/private/server.key 1024

 あるいはキーをパスフレーズで暗号化して、それをタイプしないとサーバが起動できないようにするには:

# openssl genrsa -des3 -out /etc/ssl/private/server.key 1024

 次のステップは、証明書署名要求を出すことだ。これでCertifying Authority (CA) に証明書にサインしてもらえる。やり方は、以下のコマンドを使う:

# openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr

 これでこの server.csr ファイルは Certifying Authority にわたされ、それがキーにサインしてくれる。こうした CA の一例としては Thawte Certification がある。これは以下の URI でアクセスできる: http://www.thawte.com/。 Thawte はいまのところ RSA キーに署名してくれる。DSA キーも使えるようにするための手続きも進行中だ。

 とてもここまでできないよ、とか、証明書は自分でサインすればいいや、という人なら次のようにできる:

# openssl x509 -req -days 365 -in /etc/ssl/private/server.csr \
       -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt

 /etc/ssl/server.crt/etc/ssl/private/server.key さえきちんとしていれば、httpd(8)-DSSL フラグつきで起動できるはずだ。これであなたのマシンも、ポート 443 でhttpsのトランザクションができるはず。

10.7 - /etc/passwd を vi(1) で編集したのに変更が反映されない。なんでやねん。

 /etc/passwd を編集しても、変更は全部消えてしまう。OpenBSD は /etc/passwd を動的に pwd_mkdb(8)コマンドで生成する。OpenBSD の主パスワードファイルは/etc/master.passwd なのだ。pwd_mkdb(8)によれば、

FILES
     /etc/master.passwd  current password file
     /etc/passwd         a Version 7 format password file
     /etc/pwd.db         insecure password database file
     /etc/pwd.db.tmp     temporary file
     /etc/spwd.db        secure password database file
     /etc/spwd.db.tmp    temporary file

 /etc/passwdのような従来の Unix パスワードファイルの場合、ユーザの暗号化パスワードを含む各種情報が、システム上の万人に提供されていた。(おかげで Crack のようなプログラムのいいカモにされる)。4.4BSD で master.passwd ファイルが導入され、これは拡張フォーマットを持っていて(/etc/passwdで提供されていたものよりオプションが増えた)、root しか読めない。もっと高速にデータアクセスするため、このデータにアクセスするライブラリコールはふつうは /etc/pwd.db と /etc/spwd.dbを読む。

OpenBSD は、パスワードファイルを編集するのに使うツールがついてくる。これが vipw(8) だ。Vipw は vi (あるいは$EDITORで定義したお気に入りのエディタ) を使って /etc/master.passwd を編集させてくれる。その編集がすんだら、自動的に /etc/passwd, /etc/pwd.db, /etc/spwd.db を変更にあわせて更新してくれる。 Vipw はまたこれらのファイルのロックも面倒見てくれるので、あなたの編集と同時にだれかがそれを変えようとしたら、アクセス拒否されるようになっている。

10.8 - ユーザの追加・削除にいちばんいいやり方は?

 OpenBSD 2.6 のユーザなら adduser(8) コマンドがユーザ追加に使える。OpenBSD 2.7 では user(8) コマンドが追加されて、これでユーザやグループの追加と削除の両方ができる。

OpenBSD でユーザ追加にいちばんいい方法は adduser(8) スクリプトを使うことだ。 /etc/adduser.conf を編集すれば、これは好きなようにふるまいを設定できる。vipw(8)を使って手動でユーザを追加してもいいけれど、お奨めなのはadduserのほうだ。adduser(8) は /etc/passwd, /etc/group, と shell データベースに矛盾がないかも見てくれる。 $HOME ディレクトリのエントリも勝手に創ってくれる。さらにはユーザの歓迎メッセージまで送ってくれる。これはあなたのニーズ次第で変えられる。ユーザ追加についてもっと詳しくは adduser_proc(8) man ページを読もう。以下では見本ユーザ testuser をシステムに追加する。この人の $HOME ディレクトリは /home/testuser になって、guest グループに入り、シェルは /bin/kshだ。

# adduser
Use option ``-silent'' if you don't want to see all warnings and questions.

Reading /etc/shells
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username [a-z0-9_]: testuser
Enter full name []: Test FAQ User
Enter shell csh ksh nologin sh [ksh]: ksh
Uid [1002]: <Enter>
Login group testuser [testuser]: guest
Login group is ``guest''. Invite testuser into other groups: guest no
[no]: no
Enter password []: 
Enter password again []:

Name:     testuser
Password: ****
Fullname: Test FAQ User
Uid:      1002
Gid:      31 (guest)
Groups:   guest
HOME:     /home/testuser
Shell:    /bin/ksh
OK? (y/n) [y]: y
Added user ``testuser''
Copy files from /usr/share/skel to /home/testuser
Add another user? (y/n) [y]: n
Goodbye!

 ユーザを削除するには、 rmuser(8) ユーティリティを使う。これはそのユーザの存在をあとかたもなく消す。 crontab(1) の関連エントリも消えるし、$HOME ディレクトリも (オーナーがそのユーザなら)消えるし、メールも消える。もちろん/etc/passwd/etc/group のエントリも消える。以下は、いま追加したユーザを削除した場合だ。ユーザ名を入力しろとプロンプトされて、ユーザのホームディレクトリを削除すべきか聞かれているのがわかるだろう。

# rmuser
Enter login name for user to remove: testuser
Matching password entry:

testuser:$2a$07$ZWnBOsbqMJ.ducQBfsTKUe3PL97Ve1AHWJ0A4uLamniLNXLeYrEie:1002:31::0:0:Test FAQ User:/home/testuser:/bin/ksh

Is this the entry you wish to remove? y
Remove user's home directory (/home/testuser)? y
Updating password file, updating databases, done.
Updating group file: done.
Removing user's home directory (/home/testuser): done.

10.8.2 - user(8)を使ったユーザの追加

 OpenBSD2.7 リリース以降、多くのコマンドがユーザやグループを扱うために追加された。これらのツールはadduser(8) コマンドのような対話型ではないから、スクリプト内で使うのに向いている。

追加されたコマンド一覧を以下に挙げる:

10.8.2.1 - 実際にユーザを追加する

 user(8) は対話的に使えないので、ユーザを手軽に追加するいちばん簡単な方法はadduser(8) コマンドを使うことだ。実際のコマンド /usr/sbin/user は、その他の /usr/sbin/user* コマンド群のフロントにすぎない。だから、以下のコマンドは user adduseradd を使えば追加できるし、なにがほしくて、何がいらないかはあなたの選択次第だし、コマンドの使い方は一切変わらない。

 この例では、上のadduser でやったのと同じユーザを同じ条件で追加してみようユーザ追加前にデフォルト設定を知っていたほうが、useradd(8) はずっと使いやすい、この設定は /etc/usermgmt.conf に記述してあって、次のようにすると見られる:

$ user add -D
group           users
base_dir        /home
skel_dir        /etc/skel
shell           /bin/csh
inactive        0
expire          Null (unset)
range           1000..60000

 コマンドラインでオプション指定しない限り、この設定が使われる。たとえばここでの例では、ユーザの所属グループは usersではなく guest にしたい。さらにもう一つハードルがある。パスワードはコマンドラインで指定しなきゃいけない。そのパスワードも、暗号化済みのパスワードだ。だからまず encrypt(1) ユーティリティを使ってパスワードを作る必要がある。たとえば OpenBSD のパスワードはデフォルトで Blowfish アルゴリズムを 6 回かける。useradd(8)に指定してやるパスワードをつくるには、まず以下のようにしなきゃいけないわけだ。

$ encrypt -p -b 6
Enter string:                <---- ここで使いたいパスワードを入力
$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq

 これで暗号化されたパスワードができたので、ユーザ追加にとりかかれる。

# user add -p '$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq' -u 1002 \
-s /bin/ksh -c "Test FAQ User" -m -g guest testuser

Note: パスワードのストリングを囲むときには、 ' を使うこと。 "ではないよ。シェルがuser(8)に送る前にこれを解釈しちゃうから。加えて、ユーザのホームディレクトリを作って /etc/skel のファイルをコピーしておいてほしければ、-m オプションをつけるのをお忘れなく。

 ユーザがちゃんとできたか見るには、いろんなユーティリティが使える。以下に、すべてがきちんとつくれたか見るためのコマンドをいくつか挙げよう。

$ ls -la /home
total 14
drwxr-xr-x   5 root      wheel   512 May 12 14:29 .
drwxr-xr-x  15 root      wheel   512 Apr 25 20:52 ..
drwxr-xr-x  24 ericj     wheel  2560 May 12 13:38 ericj
drwxr-xr-x   2 testuser  guest   512 May 12 14:28 testuser
$ id testuser
uid=1002(testuser) gid=31(guest) groups=31(guest)
$ finger testuser
Login: testuser                         Name: Test FAQ User
Directory: /home/testuser               Shell: /bin/ksh
Last login Sat Apr 22 16:05 (EDT) on ttyC2
No Mail.
No Plan.

 これらのコマンドに加えて user(8) は自分なりのユーティリティを提供していて、ユーザ属性を表示できる。これがuserinfo(8)だ。

$ userinfo testuser
login   testuser
passwd  *
uid     1002
groups  guest
change  Wed Dec 31 19:00:00 1969
class
gecos   Test FAQ User
dir     /home/testuser
shell   /bin/ksh
expire  Wed Dec 31 19:00:00 1969

10.8.2.2 - ユーザ削除

 user(8) 以下のコマンドでユーザ削除するには、userdel(8) を使う。これはとても簡単だけれど使いやすいコマンドだ。上の例でつくったユーザを削除するには、単にこうすればいい:

# userdel -r testuser

 -r オプションに注目。ユーザのホームディレクトリもいっしょに削除してほしければこれが必要だ。あるいは -r のかわりに -p を指定しておいたら、ユーザのアカウントはロックされるけれど、情報はなにも削除されない。

10.9 - ftp-専用アカウント (anonymous FTPではない!)をつくるにはどうすんの?

 いくつかやり方はあるのだけれど、よく使われるのは /usr/bin/false というのを /etc/shells に追加することだ。そしてユーザを設定するときにそのシェルを /usr/bin/false に指定してやると、対話型のログインはできなくなるけれど、ftp は使えるようになる。adduser(8) を使うと、デフォルトでホームディレクトリが /home/<user> にできる。それでよければ、これはいじらなくていいけれど、でもこれも好きなディレクトリを指定できる。/etc/ftpchrootにこの人のユーザ名を加えておけば、かれが見られるのは自分のホームディレクトリのファイルだけになる。 ftpd(8)-A オプションを使うと、ftpchrootログインしか受け付けられなくなるよ!

10.10 - ディスクQuotaの設定

Quota というのは、あるユーザがドライブ上で使うディスクスペースを制限するのに使う。リソースが限られているときにはとても役に立つ。 Quotaの設定方法は2通りある。

 quota 設定第一歩は、カーネル設定の中に option QUOTA が入っていることを確かめることだ。これは GENERIC カーネルでは入っている。それから、/etc/fstab の中で quota を有効にするファイルシステムにマークをつけてやること。quota を使うファイルシステムに、userquotagroupquota というキーワードでマークをしてやる。デフォルトで quota.userquota.group というファイルがそのファイルシステムのルートに創られて、quota 情報が保存される。このデフォルトは userquota=/var/quotas/quota.user とすればオーバーライドされる。もちろんここで指定するのは、quota 情報が入っているどんなファイルでもいい。以下は、userquotaを有効にしたファイルシステムが一つ入った /etc/fstab の例だ。

/dev/wd0a / ffs rw,userquota=/var/quotas/quota.user 1 1

 ではユーザの quota を設定しよう。これにはedquota(8)ユーティリティを使おう。簡単な使い方は、単に edquota <user> とすればいい。edquota(8) は vi(1) や、環境変数 EDITOR に設定されたエディタを使って quota を編集する。たとえば:

# edquota ericj

 すると出てくる出力はこんな感じだ:

Quotas for user ericj:
/: blocks in use: 62, limits (soft = 0, hard = 0)
	inodes in use: 25, limits (soft = 0, hard = 0)

 制限をつけるには、これを編集して次のような感じにしよう:

Quotas for user ericj:
/: blocks in use: 62, limits (soft = 1000, hard = 1050)
	inodes in use: 25, limits (soft = 0, hard = 0)

 ここでは softlimit を 1000 ブロックにセットしてあって、hardlimit は 1050 ブロックにせっとしてある。softlimit というのは、ユーザが制限を越えたという警告を受けて、猶予期間をあげるからその間にディスク使用量を減らしなさい、といわれるところだ。猶予期間は eduquota(8) で -t オプションを使えば設定できる。この猶予期間が終わると、softlimit は hardlimit として処理される。これはふつうは、アロケーションエラーを引き起こす。

 これで quotas が設定されたので、quota を有効にしよう。これには quotaon(8)を使う。たとえば:

# quotaon -a

 これは /etc/fstab を見ていって、quota オプションのついたファイルシステムを有効にしていく。これでquota が有効になったから、quota(1)で見てやれる。quota <user> というコマンドを使えば、そのユーザの情報が見られる。引数なしで呼び出されると、quota コマンドはquota 統計を表示する。たとえば以下のようにしてみよう:

# quota ericj

 得られる結果はこんな感じになるはずだ:

Disk quotas for user ericj (uid 1001): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
              /      62    1000    1050              27       0       0        

 デフォルトで /etc/fstab で設定した quota が起動時にセットされる。これをオフにするには、次のコマンドを使おう:

# quotaoff -a

10.11 - OpenBSD で Kerberos のクライアントとサーバを使う

OpenBSD のユーザ/管理人であるあなたはラッキーですね。KerberosIV がデフォルトシステムのコンポーネントとしてインストールずみなんだから。ここでは Kerberos realm サーバと、クライアントの設定方法を説明しよう。

時間あわせ:xntp のインストール

ものすごく重要なポイントとして、Kerberos クライアントとサーバはシステムの時計がシンクロしていなくちゃだめだ。時計のずれが 5 分以上あったら、変なエラーが出るようになるし、それが時計のずれのせいだとはなかなか気づかないのだ。たとえば:

kinit: Can't send request (send_to_kdc) 

あるいはもっとわかりやすいエラーとしてはこんなの:

kauth: Time is out of bounds (krb_rd_req) 

システムの時計をシンクロさせる簡単な方法として ntpd がある。これは packages にも入っているし、ports ツリーでも /usr/ports/net/ntp/にある。むかしはxntpdを使っていたけれど、セキュリティ上の問題からもう使われない。というわけで、まずこれをインストールしよう。

 ここでのインストールは簡単に packages を使おう。CD-ROM に入っているので(え、持ってない? 買え! あとはまあ OpenBSD サイトから packages を入手することもできる。パッケージを手に入れたらあとは root になって:

# pkg_add -v ntp-blahblahtgz

とすればパッケージのインストールは完了。最後に注意書きが出てきたのをきちんと読もう。まず、/etc/ntp.conf を編集して、再起動しろと書いてある。その通りにしよう。

/etc/ntp.conf には、ntp のサーバ、つまり時間あわせのサーバを書けばいい。どこにサーバがあるかは、ntpサーバのありかページを見て、適当なものを Secondary Server の中から選ぶこと。ぼくのはこんな感じだ。

# cat /etc/net.conf
  server yamatohime.nmt.ne.jp
  server azusa.miko.org

これ以外の設定は、packages のほうで全部やってくれる。楽だね。あとは再起動するだけ。これは絶対に必要だ。ntp は、システムの時計というだいじなものをいじるので、いろんなものの前に起動している必要があるからだ。

# reboot

再起動してすぐに、ntpからエラーが出ることがある。システムの時計が狂いすぎていて修正できない、というメッセージだ。これは通常、システムの時計がおかしいのだ。何時間もずれているようだと、そのままではxntp でも修正できない。この場合は /etc/rc.securelevel の ntpd に -g オプションをつけておけば、大幅なずれでも ntp の言うとおりになる。

 でもまあこれは手動で時間をなおしたほうが早いだろう。これは手動で時間をなおしてやろう。たとえばいまが 2001年7月24日14:32くらいだとすると:

# date 0107241432

これでいい。数分単位のずれなら、あとはntpがやってくれる。実行されているかな? 以下のコマンドで見てやろう。

# /usr/local/sbin/ntpq -d
ntpq > pe
    remote          refid       st t when poll reach    delay   offset    disp
==============================================================================
+yamatohime.nmt. v7.nmt.ne.jp    3 u  476  512  377     98.19   54.972   65.29
*azusa.miko.org  ns.nmt.ne.jp    3 u  254  512  377    104.35   56.456   36.09

うん、なんか動いてるみたいね。

ntpについて詳しくは、ntp 総本山を見てやって欲しい。では Kerberos 本体に移ろう。

Kerberos 本体

FAQ のこの部分は、Kerberos の考え方をあなたが事前に知っているという前提で書かれている。すばらしくわかりやすい参考文献としては、以下がある:

あるいは本だと:

Kerberos IV のREALM と SERVERを設定する。

 CIARASYSTEMS.COM というrealm で、avalanche.ciarasystems.com を主サーバにして設定しよう。

 まず手始めに、設定ファイルの編集が必要だ。このファイルは/etc/kerberosIV/にある。気にすべき二つのファイルは krb.realmskrb.conf だ。じゃあまずはkrb.confから。

[root@avalanche kerberosIV] cat krb.conf
CIARASYSTEMS.COM
CIARASYSTEMS.COM avalanche.ciarasystems.com admin server

 ごらんのように、これで kerberos に、ドメイン(または論理realm) が CIARASYSTEMS.COM で、そのドメインのなかで avalanche が管理サーバだというのが伝わる。次に krb.realms を見てやろう。詳しくは krb.confを参照。

[root@avalanche kerberosIV] cat krb.realms
avalanche.ciarasystems.com      CIARASYSTEMS.COM
.ciarasystems.com               CIARASYSTEMS.COM

krb.realms は、ホスト名から そのホストがサービスを提供するKerberos のrealm 名への変換をする。変換ファイルのそれぞれの行は、以下の形式のどれかであるべきだ (domain_name は .XXX.YYYという形式であるべし)。だからこの例では、avalanche は CIARASYSTEMS.COM realm上にあるコンピュータのホスト名だ。ここでも、詳しい情報は the krb.realms man ページを参照。

 次に kdb_init(8) を実行して、初期 Kerberos データベースをつくる。

まず、kerberos の作業用データベースを /var/kerberosにつくってから kdb_initを実行しよう。こんな具合だ:

[root@avalanche kerberosIV] mkdir /var/kerberos
[root@avalanche kerberosIV] kdb_init
Realm name [default  NO.DEFAULT.REALM ]: CIARASYSTEMS.COM
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.

Enter Kerberos master password: not shown
Verifying password -
Enter Kerberos master password:

 次に kstash(8) を使う。これは Kerberos キー配布センター (KDC) データベースのマスターキーをマスターキーキャッシュファイルに入れるものだ。

[root@avalanche kerberosIV] kstash
Enter Kerberos master password:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Wrote master key to /etc/kerberosIV/master_key

 これで暗号化されたマスターパスワードが /etc/kerberosIV/master_keyに保存された。

 次に、Kerberosで保護されるシステムのそれぞれについて、二つの principals がデータベースに追加される必要がある。kpasswdrcmd の二つだ。この2つの principals はがそれぞれのシステム用につくられ、インスタンスは個別システム名になる。

kpasswd and rcmd というデーモン二つは、他のシステムが Kerberosのパスワードを変えたり、rcp, rlogin rshなどのコマンドを実行できるようにする。

# kdb_edit
Opening database...
    
Enter Kerberos master key:
    
Current Kerberos master key version is 1.
    
Master key entered.  BEWARE!

Previous or default values are in [brackets] ,
enter return to leave the same, or new value.

Principal name: passwd
Instance: avalanche

<Not found>, Create [y] ? y

Principal: passwd, Instance: avalanche, kdc_key_ver: 1
New Password:                <----- ここでは「RANDOM」と入力する
Verifying password -
New Password:

Random password [y] ? y

Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 1999-12-31 ] ? 2001-12-31
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.


Principal name: rcmd
Instance: avalanche

<Not found>, Create [y] ? y
Principal: rcmd, Instance: avalanche, kdc_key_ver: 1
New Password:                 <----- ここでは「RANDOM」と入力する
Verifying password -
New Password:

Random password [y] ? y

Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 1999-12-31 ] ? 2001-12-31
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name:               <----- <ENTER> を押すと終了

srvtab ファイルというのがサービスキーファイルだ。各サービスがKerberos利用を認証するためには、これはKerberos キー配信センターのデータベースから抜き出したものでなくてはならない。コマンドラインで指定された各ホスト名ごとに、ext_srvtab(8) がサービスキーファイルの hostname-new-srvtab をつくる。ここにはホスト名をインスタンスのフィールドに持つすべてのエントリが含まれている。

[root@avalanche kerberosIV] ext_srvtab avalanche

Enter Kerberos master password:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Generating 'avalanche-new-srvtab'....

[root@avalanche kerberosIV] mv avalanche-new-srvtab srvtab
[root@avalanche kerberosIV] chmod 600 srvtab

 これでこんどは、ユーザをデータベースに追加できる。

[root@avalanche kerberosIV] kdb_edit
Opening database...
    
Enter Kerberos master key:
    
Current Kerberos master key version is 1.
    
Master key entered.  BEWARE!
Previous or default values are in [brackets] ,
enter return to leave the same, or new value.
    
Principal name: jeremie
Instance:
    
<Not found>, Create [y] ? y
    
Principal: jeremie, Instance: , kdc_key_ver: 1
New Password:                <---- ここで安全なパスワードを入力
Verifying password
    
New Password:                <---- パスワード再入力
Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name:          <---- ここでリターンだけ押すと終了。続けて
			       エントリを足してもいい。

 というわけで、これで Kerberos のいろんなものが設定された。あとは起動時に Kerberos サーバがロードされるようにして、ケルベロス化されたデーモンを有効にするだけ。

In /etc/rc.conf, set:

kerberos_server=YES

In /etc/inetd.conf, uncomment:

telnet       stream  tcp     nowait  root    /usr/libexec/telnetd    telnetd -k
klogin       stream  tcp     nowait  root    /usr/libexec/rlogind    rlogind -k
kshell       stream  tcp     nowait  root    /usr/libexec/rshd       rshd -k
kauth        stream  tcp     nowait  root    /usr/libexec/kauthd     kauthd

Then, either reboot, or:

[root@avalanche /] kill -HUP `cat /var/run/inetd.pid`
[root@avalanche /] /usr/libexec/kerberos >> /var/log/kerberos.log &
[root@avalanche /] /usr/libexec/kadmind -n >> /var/log/kadmind.log &

Note: これはかなり単純なサーバ設定だ。ふつうはサーバを二重化しておいて(一つをスレーブにして)、片方のサーバがダウンしてもKerberos に依存しているサービスすべてがダウンしたりしないようにする。また指定の principal に「su」権限を与えるにはthe FreeBSD Handbookを参照。

……ともったいをつけずに、su 権限を追加してみよう。やりかたは簡単だ。上のところで、Principal nameを入力したあとに「Instance」を入力するところが出てきて、上では何も入れずにリターンを押した。su権限を与えるには、その Instanceのところで「root」と入力すればいいだけだ。あとはまったく同じ。上で指定した jeremie に、su権限を与えてみよう。もちろんそれ以前に、jeremieはwheelグループに参加している必要がある。これについてはFAQ 10.1を参照。

[root@avalanche kerberosIV] kdb_edit
Opening database...
    
Enter Kerberos master key:
    
Current Kerberos master key version is 1.
    
Master key entered.  BEWARE!
Previous or default values are in [brackets] ,
enter return to leave the same, or new value.
    
Principal name: jeremie
Instance:root
    
<Not found>, Create [y] ? y
    
Principal: jeremie, Instance:root , kdc_key_ver: 1
New Password:                <---- ここでrootパスワードを入力
Verifying password
    
New Password:                <---- パスワード再入力
Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 20 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name:          <---- ここでリターンだけ押すと終了。続けて
			       エントリを足してもいい。

上の例と一つだけちがうのが、Max ticket lifetimeの指定のところだ。suはなるべく一時的にしておきたいし、長期でチケットが生き残るとセキュリティ上の問題になることがある。だからチケットの寿命は短くしておこう。せいぜい 20 分とか。これについては、デフォルト値も自動的に配慮してくれている。

クライアントのワークステーションをケルベロス化する

 gatekeeper というワークステーションを、 CIARASYSTEMS.COM realm にいるものとして設定し、メインのサーバを avalanche.ciarasystems.com にするように設定しよう。

 まず手始めに、上のマシンと同じように krb.confkrb.realms を設定しよう。これは gatekeeper が、KDC がどのサーバか、どのドメイン上にいるかわかるようにするためだ。ファイルの中身をもう一度挙げておこう。

[root@gatekeeper kerberosIV] cat krb.conf
CIARASYSTEMS.COM
CIARASYSTEMS.COM avalanche.ciarasystems.com admin server

[root@gatekeeper kerberosIV] cat krb.realms
avalanche.ciarasystems.com      CIARASYSTEMS.COM
.ciarasystems.com               CIARASYSTEMS.COM

 では設定がすんだので、kerberos を初期化しよう。チケットをもらうには、kinit(1)を使う。

xyz:jeremie% kinit
The OpenBSD Project (gatekeeper)
Kerberos Initialization
Kerberos name: jeremie
Password:

 これで同定されたから、klist(1)でチケット一覧を表示して自分のが出るか見てみよう。

xyz:jeremie$ klist
Ticket file:    /tmp/tkt1000
Principal:      jeremie@CIARASYSTEMS.COM

  Issued           Expires          Principal
Jun 28 01:03:25  Jun 28 11:03:25  krbtgt.CIARASYSTEMS.COM@CIARASYSTEMS.COM

 なんかうまくいったみたいだね。あとはテストしてみるだけだ。ここでは、rlogin(1) と telnet(1)でテストしてみよう。

xyz:jeremie% telnet avalanche
Trying 192.168.0.38...
Connected to avalanche.
Escape character is '^]'.
[ Trying mutual KERBEROS4 ... ]
[ Kerberos V4 accepts you ]
[ Kerberos V4 challenge successful ]
Last login: Sun Jun 27 22:52:25 on ttyp1 from gatekeeper
Warning: no Kerberos tickets issued.
OpenBSD 2.5 (AVALANCHE) #5: Tue Apr  6 01:18:16 EDT 1999

あるいは

xyz:jeremie% rlogin avalanche
Last login: Sun Jun 27 22:53:39 on ttyp1 from gatekeeper
Warning: no Kerberos tickets issued.
OpenBSD 2.5 (AVALANCHE) #5: Tue Apr  6 01:18:16 EDT 1999

 これで確かに rlogin セッションの認証に Kerberos が使われているのがわかる。発行されたチケットをどれでも削除するには、kdestroy(1)を使う。たとえば:

xyz:jeremie% kdestroy
Tickets destroyed.
xyz:jeremie% rlogin avalanche
krcmd: No ticket file (tf_util)
rlogin: warning, using standard rlogin: can't provide Kerberos auth data.
avalanche: Connection refused

「Warning: no Kerberos tickets issued」とでてきてもご心配なく。これは、ここでは kerberos 認証をしているだけで、ticket passing はしていないからだ。もし ticket passing をしたければ、それをサポートしているOpenSSH を使おう。そのままの KerberosIV は tgt passing のサポートもない―― AFS kaserverによる krb4 の実装しかない。通常の KerberosIV kdc は ticket にリストされたクライアントの IP アドレスをチェックするからだ。

10.12 - Anonymous FTP サービスの設定

Anonymous FTP は、アカウントのない人たちにFile Transfer Protocol を使ってあなたのコンピュータ上のマシンにアクセスさせるものだ。以下に、このanonymous FTP サーバの概観、そのログとりその他の設定について述べる。

FTP アカウントの追加

 まず手始めに、システム上に "ftp" というアカウントが必要だ。このアカウントは、使用可能なパスワードを持ってはいけない。ここではログインディレクトリを /home/ftp にするけれど、どこでも好きなところに指定してかまわない。anonymous ftp を使うとき、ftp は chroot して 'ftp' ユーザのホームディレクトリに移る。これについて詳しく知りたければ ftp(8)chroot(2) man ページを参照。以下に ftp ユーザ追加の例を挙げる。ここでは adduser(8)を使う。 さらに /etc/shells に /usr/bin/false を追加しておこう。これがこの ftp ユーザにあげる "シェル" だ。このためかれらは、空のパスワードをもらってもログインできない。これには簡単に echo /usr/bin/false >> /etc/shellsとすればよろしい。で、adduser の質問のときにそのシェルがあらわれるようにしたければ、 /etc/adduser.confも変更しておくこと。

oshibana# adduser
Use option ``-silent'' if you don't want see all warnings & questions.

Reading /etc/shells
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username [a-z0-9_]: ftp
Enter full name []: anonymous ftp
Enter shell csh false ksh nologin sh tcsh zsh [sh]: false
Uid [1002]:
Login group ftp [ftp]:
Login group is ``ftp''. Invite ftp into other groups: guest no
[no]: no
Enter password []:
Use an empty password? (y/n) [y]: y

Name:     ftp
Password: ****
Fullname: anonymous ftp
Uid:      1002
Gid:      1002 (ftp)
Groups:   ftp
HOME:     /home/ftp
Shell:    /usr/bin/false
OK? (y/n) [y]: y
Added user ``ftp''
Copy files from /usr/share/skel to /home/ftp
Add another user? (y/n) [y]: n
Goodbye!

ディレクトリの設定

 ユーザそのものといっしょに、いまので /home/ftp というディレクトリができた。これはこっちの希望通りだけれど、anonymous ftp で使ってもらうにはもうちょっと細工が必要だ。この細工については ftp(8) man ページに説明してある。

 /home/ftp/usr or /home/ftp/bin ディレクトリは作らんでよろしい

 以上のディレクトリはすべて、所有者を「root」にしておく。以下に、最終的にディレクトリがどんな感じになるかを示しておこう。

oshibana# pwd 
/home
oshibana# ls -laR ftp
total 5
dr-xr-xr-x  5 root  ftp    512 Jul  6 11:33 .
drwxr-xr-x  7 root  wheel  512 Jul  6 10:58 ..
dr-x--x--x  2 root  ftp    512 Jul  6 11:34 etc
dr-xr-xr-x  2 root  ftp    512 Jul  6 11:33 pub

ftp/etc:
total 43
dr-x--x--x  2 root  ftp    512 Jul  6 11:34 .
dr-xr-xr-x  5 root  ftp    512 Jul  6 11:33 ..
-r--r--r--  1 root  ftp    316 Jul  6 11:34 group
-r--r--r--  1 root  ftp  40960 Jul  6 11:34 pwd.db

ftp/pub:
total 2
dr-xr-xr-x  2 root  ftp  512 Jul  6 11:33 .
dr-xr-xr-x  5 root  ftp  512 Jul  6 11:33 ..

サーバを起動してログ取り開始

 ftpd の場合、これを inetd から実行するのか、あるいは rc スクリプトで開始するのか選べる。以下の例では、デーモンを inetd.confから起動することにしよう。 まずはftpdのオプションいくつかを頭に入れておこう。/etc/inetd.conf is: のデフォルトの記述はこうだ:

ftp             stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -US

 ここでは ftpd は -US オプションで起動されている。これは anonymous 接続を /var/log/ftpd にログして、同時に発生するセッションを /var/run/utmp にログする。これでセッションが who(1) で見られるようになる。なかには、 anonymous サーバだけを走らせて、ユーザには ftp を許可しないようにしたい人もいるだろう。これには ftpd を -A オプションで起動する。以下に挙げるのは、ftpd を anonymous 接続でのみ認める形で起動する例だ。さらに -ll オプションもついている。これはそれぞれの接続を、get, retrieveなどの ftp コマンドとあわせて syslog にログする。

ftp             stream  tcp     nowait  root    /usr/libexec/tcpd       ftpd -llUSA

Note - トラフィックのすごく高い ftp サーバを運用する人は、ftpd を inetd.conf から起動しないほうがいいかも。いちばんいいのは、inetd.conf の ftpd をコメントアウトして、ftpd を -D オプションつきで rc.conf から起動することだ。これで ftpd はデーモンとして起動して、inetd から起動するよりオーバーヘッドもずっと小さくなる。rc.conf から起動するときの記述例はこんな感じだ。

ftpd_flags="-DllUSA"           # for non-inetd use: ftpd_flags="-D"

 これはもちろん、/etc/inetd.confから ftpd をはずしておかないとうまくいかない。

その他関連ファイル

10.13 - ftpd(8)でユーザをホームディレクトリから出られないようにするには

OpenBSDの ftpd(8) は、デフォルトでこれを簡単にこなせるようになっている。これは /etc/ftpchroot ファイルを使えば実現できる。ユーザは必ずしも信用できるとは限らないから、ホームディレクトリに押し込めておくことも必要になる。これはデフォルトでは、有効になっていない。デフォルトのふるまい例を以下に示そう。

$ ftp localhost
Connected to localhost.
220 oshibana FTP server (Version 6.4/OpenBSD) ready.
Name (localhost:ericj): ericj
331 Password required for ericj.
Password: *********
230- OpenBSD 2.6 (GENERIC) #690: Fri Oct 29 16:32:17 MDT 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> cd /
250 CWD command successful.
ftp> ls
227 Entering Passive Mode (127,0,0,1,60,7)
150 Opening ASCII mode data connection for 'file list'.
altroot
bin
dev
etc
home
mnt
root
sbin
stand
tmp
usr
var
bsd
sys
boot
226 Transfer complete.
ftp> quit
221 Goodbye.

 ごらんのとおり、全サーバへのアクセスが認められてしまう。この世が完璧であらゆるユーザが全面的に信用できるのであれば、これでもよいのだけれど、残念ながらそうはいかない。ユーザを制限するには、そのユーザ名を /etc/ftpchroot ファイルに記述しておく。以下の例では、 "ericj" というユーザが制限されている。

$ cat /etc/ftpchroot
#       $OpenBSD: faq10.html,v 1.47 2000/07/09 00:42:27 ericj Exp $
#
# list of users (one per line) given ftp access to a chrooted area.
# read by ftpd(8).
ericj

 これだけで、"ericj" というユーザは自分のディレクトリから出られなくなる。次の例でわかるように、 / ディレクトリがいきなりこの人のホームディレクトリになっている!

$ ftp localhost
Connected to localhost.
220 oshibana FTP server (Version 6.4/OpenBSD) ready.
Name (localhost:ericj): ericj
331 Password required for ericj.
Password: *********
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /
250 CWD command successful.
ftp> ls
227 Entering Passive Mode (127,0,0,1,92,171)
150 Opening ASCII mode data connection for 'file list'.
.login
.mailrc
.profile
.rhosts
.ssh
.cshrc
work
mail
src
226 Transfer complete.
ftp> quit
221 Goodbye.

10.14 - OpenBSDにパッチをあてる

 OpenBSD ソースツリーはたえず変化して改善されているし、同時によくある問題へのフィックスもされて、そのためのパッチが公開される。こうしたパッチは errata ウェブページ(http://www.openbsd.org/errata.html)で公開されて、カテゴリー別にわかれている。こうしたカテゴリーはアーキテクチャごとに適用されるべきパッチと、アーキテクチャと関係なく適用すべきパッチとにわかれる。

 でも、パッチは OpenBSD への機能追加のためには行われないことに注意。これは、すぐに対応が必要な、だいじな信頼性改善やセキュリティ上の問題への対応のためだけに使われる。ただしそれに対応するかどうかは、いつもながら、システム管理者次第だ。

 たとえば talkd(8) に、errata.htmlからのパッチをあててみよう。

こうしたパッチは、CVS ツリーにあるやつとはちがうの?

 http://www.openbsd.org/errata.html にポストされるパッチは、最新リリースソースツリーに対するものだ。最新の CVS ツリーに対するパッチは、リリースシステムでは求められないようなその他の変化が入っているかもしれない。

システムにパッチをあてる準備をしよう。

 OpenBSD オペレーティングシステム用のパッチは、diffで配布されている。これはもとのソースコードから変わった部分を含んでいるテキストファイルだ。これはバイナリ形式では配布されていない。つまりシステムをパッチするには、OpenBSD リリースバージョンのソースコードが手元にないとダメだ。OpenBSDのソースコードが全部そろっている必要はないけれど、自分がパッチするプログラムの分は全部必要だ。たとえばカーネルをパッチするなら、カーネルのソースが手元に要るのだ。

 cvs(1) を使うと、手軽に好きな anonymous cvs サーバから、自分の必要なソースだけを持ってこられる。サーバ一覧は http://www.openbsd.org/anoncvs.html を参照。

 最新リリースソースコードをcvs(1) でもってくるには、以下のコマンドを使う:

$ cvs -danoncvs@anoncvs5.usa.openbsd.org:/cvs co -rOPENBSD_2_7_BASE src/libexec/talkd/
cvs server: Updating src/libexec/talkd
U src/libexec/talkd/announce.c
U src/libexec/talkd/talkd.c
U src/libexec/talkd/talkd.h

 自分のほしいコードの CVS パスを調べるには、あてたいパッチの Index: 行を見るのだ。ここでは CVS パスは src/libexec/talkd/ だ。必ず OPENBSD_version_number_BASE のリビジョンをチェックしよう。"BASE" がないと、安定ブランチをチェックアウトしていることになる。これはじゃまになるほかのコードが入っているかもしれない。すでにパッチブランチをおっかけているなら、パッチはすでにソースに含まれているはずだけれど、必ずチェックして確かめよう。http://www.openbsd.org/plus.html を見れば、どのパッチがパッチブランチに適用されたかはわかる。もしパッチがまだあたっていないあったら、上のコマンドを須加って最新リリースソースコードを持ってこよう。

 あと、公式 OpenBSD CD を買った人は、直接 CD からソースコードをとってくるといい。CD からソースをとってくる方法については、CD 付属の紙を見よう。こうすれば、anoncvs経由でソースを持ってこなくていい。

Apply by doing:
        cd /usr/src
        patch -p0 < 026_talkd.patch
        cd libexec/talkd
        make obj && make depend && make && make install

Index: libexec/talkd/announce.c <------ Path to sources 
===================================================================
RCS file: /cvs/src/libexec/talkd/announce.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- libexec/talkd/announce.c    1998/08/18 03:42:10     1.8
+++ libexec/talkd/announce.c    2000/07/06 00:01:45     1.9
@@ -160,6 +160,6 @@
                *(bptr++) = '\n';
        }
        *bptr = '\0';
-       fprintf(tf, big_buf);
+       fprintf(tf, "%s", big_buf);
        fflush(tf);
 }

 しかるべきソースを手に入れたら。パッチをもってきて、src/に置いてやる。

パッチをあてる

$ cd /usr/src
$ patch -p0</path/to/026_talkd.patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Apply by doing:
|       cd /usr/src
|       patch -p0 < 026_talkd.patch
|       cd libexec/talkd
|       make obj && make depend && make && make install
|
|Index: libexec/talkd/announce.c
|===================================================================
|RCS file: /cvs/src/libexec/talkd/announce.c,v
|retrieving revision 1.8
|retrieving revision 1.9
|diff -u -r1.8 -r1.9
|--- libexec/talkd/announce.c   1998/08/18 03:42:10     1.8
|+++ libexec/talkd/announce.c   2000/07/06 00:01:45     1.9
--------------------------
Patching file libexec/talkd/announce.c using Plan A...
Hunk #1 succeeded at 160. <------------ Patch Succeeded
done
$ cd /usr/src/libexec/talkd/
$ ls
CVS             announce.c      print.c         table.c         talkd.c
Makefile        announce.c.orig process.c       talkd.8         talkd.h
$ make obj && make depend && make
making /home/ericj/lsrc/src/libexec/talkd/obj
mkdep -a /home/ericj/lsrc/src/libexec/talkd/talkd.c /home/ericj/lsrc/src/libexec/talkd/announce.c /home/ericj/lsrc/src/libexec/talkd/process.c /home/ericj/lsrc/src/libexec/talkd/table.c /home/ericj/lsrc/src/libexec/talkd/print.c
cc -O2     -c /home/ericj/lsrc/src/libexec/talkd/talkd.c
cc -O2     -c /home/ericj/lsrc/src/libexec/talkd/announce.c
cc -O2     -c /home/ericj/lsrc/src/libexec/talkd/process.c
cc -O2     -c /home/ericj/lsrc/src/libexec/talkd/table.c
cc -O2     -c /home/ericj/lsrc/src/libexec/talkd/print.c
cc   -o ntalkd talkd.o announce.o process.o table.o print.o
nroff -Tascii -mandoc /home/ericj/lsrc/src/libexec/talkd/talkd.8 > talkd.cat8
$ sudo make install
install -c -s -o root -g bin  -m 555 ntalkd /usr/libexec
install -c -o root -g bin -m 444 talkd.cat8 /usr/share/man/cat8/talkd.0
/usr/share/man/cat8/ntalkd.0 -> /usr/share/man/cat8/talkd.0

 これが終わったら、該当サービスを再起動しよう。



[FAQ トップへ] [9.0 - Linux からのお引っ越し] [11.0 - パフォーマンスのチューニング]


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

$OpenBSD: faq10.html,v 1.53 2001/04/22 05:33:54 austin Exp $