FreeBSD QandA 2002年6月19日 更新分
管理番号 2185 (新規)
更新履歴
Q. X 端末から XDMCP を使って FreeBSD に接続しようとしていますが、
ログインウィンドウが表示されません。
A. 最近の FreeBSD の xdm は、XDMCP などのリクエストを聞かない設定が
デフォルトになっていますので、そのせいかもしれません。
ハンドブックの
5.6.4. ネットワークディスプレイサーバの起動
<URL:http://www.jp.freebsd.org/www.FreeBSD.org/ja/handbook/x-xdm.html>
を参考に /usr/X11R6/lib/X11/xdm/xdm-config を書き換えてください。
管理番号 1578 (更新)
更新履歴
Q. ssh・slogin・scp を使うたびに、毎回パスフレーズを入力するのが面倒です。
A. 面倒な作業を楽にするためには、何らかの形でマシンに接続情報を残すことに
なります。そのマシンがクラックされた場合、いもづる式に他のマシンも
クラックの対象になってしまいます。セキュリティに対して責任を持てる場合
以外は楽をするべきではありません。このことを認識したうえでお読み下さい。
パスフレーズ入力時に楽するには、ssh-agent を使う方法と ~/.shosts を使う
方法があります。いずれも RSA 認証が必須ですので、まずは [管理番号 1577]
を読んで、公開鍵の設定をして下さい。
[ssh-agent を使う方法]
ssh-agent は一度入力したパスフレーズを覚えてくれるコマンドです。
% ssh-agent tcsh
として新しいシェルを実行し、ssh-add を実行します
(ssh-agent startx & exit で X を起動してもいいですし、
eval `ssh-agent -s` (sh・bash を使っている場合) や、
eval `ssh-agent -c` (csh・tcsh の場合) とタイプしてもいいです。
eval で実行した場合は止めるのもお忘れなく)
次に
% ssh-add
Need passphrase for /home/username/.ssh/identity (username@local).
Enter passphrase: (パスフレーズを入力)
すると、その後からは
% slogin remote.hoge.ac.jp
としてもパスフレーズの入力を求められません。
ログインするたびに毎回 ssh-agent tcsh とタイプするのは面倒なので、
自動的に ssh-agent が実行されるようにしておきましょう。以下のように
いくつか方法がありますが、どれを選んでも構いません。要は ssh を実行
したときに環境変数 SSH_AUTH_SOCK と SSH_AGENT_PID が設定されていれば
よいのです (後述)。
1. ~/.login の最後に
eval `ssh-agent -c`
としておいて、~/.logout に
ssh-agent -c -k
と書いておく。X なしで ssh を使用する人向け。
2. ~/.xinitrc (~/.xsession) に
#! /bin/sh
eval `ssh-agent -s`
twm & # ウィンドウマネージャを起動
PID=$!
...(kterm などの起動)...
wait $PID # ウィンドウマネージャの終了を待ち
eval `ssh-agent -k -s` # ssh-agent を kill
と書いておく。
次に、ssh-add でパスフレーズを入力しなければいけませんが
-----------
#!/bin/sh
if [ "x$SSH_IDENT" = "x" ]; then
SSH_IDENT=$USER@`hostname`
fi
if [ "x$SSH_CLIENT" = "x" ]; then
ident=`ssh-add -l`
if [ "x${ident##* }" != "x$SSH_IDENT" ]; then
if [ "x$DISPLAY" = "x" -o "x$SSH_ASKPASS" = "x" ]; then
ssh-add
else
ssh-add </dev/null
fi
fi
fi
exec /usr/local/bin/${0##*/} "$@"
-----------
というスクリプトを ~/bin/{ssh,slogin,scp} に置いておけば (PATH の先頭に
~/bin を加えておく)、初回のみ自動的にパスフレーズを聞いてきます。
このようなスクリプトを使いたくなければ、
3. ~/.xinitrc (~/.xsession) に
#!/bin/sh
eval `ssh-agent -s`
ssh-add < /dev/unll
...(kterm やウィンドウマネージャの起動)...
と書いておく。
という方法もあります。
この方法を FreeBSD 標準の OpenSSH で行う場合、port/package から
security/openssh-askpass をインストールして下さい。
これは、ssh-agent を実行し、さらに ssh-askpass を実行しています
(ssh-add < /dev/null とすると ssh-askpass が実行されます)。
ssh-askpass はパスフレーズ入力用ウィンドウを開きますので、
そこでパスフレーズを入力します。ここでパスフレーズを入力
しないと他の kterm などが起動しないわけです。
また、お勧めしませんが、
4. ~/.passphrase というファイルにパスフレーズをそのまま
書き込んでおき、~/.xinitrc (~/.xsession) に
#!/bin/sh
eval `ssh-agent -s`
ssh-add -p < $HOME/.passphrase
とすると、パスフレーズの入力は一切必要なくなります。当然、他人に
~/.passphrase を見られるとアウトです。パーミッションに注意しましょう。
また、こんなわかりやすいファイル名にしてはいけません。
いずれの方法でも、ssh-agent を終了すると (=ローカルホストからログ
アウトしてしまうと)、再度 ssh-add でパスフレーズの入力を行なわなくては
いけません。その点では ~/.shosts を使う方法に比べて利便性は落ちます。
以下は、ssh-agent に関する簡単な説明です。ssh-agent を実行すると、
/tmp/ssh-(ユーザ名)/ssh-(プロセス番号)-agent
という UNIX ドメインソケットが作成されます。次に ssh-add を実行すると、
ユーザにパスフレーズの入力を求め、ssh-agent に入力されたパスフレーズを伝えます。
一方、ssh (scp・slogin) が実行されたときは、ssh-agent に (UNIX ドメイン
ソケットを通じて) パスフレーズを問い合わせるので、ユーザは毎回パスフレーズを
入力しなくてもよいわけです。
ssh-add や ssh (scp・slogin) が「ssh-agent が起動されているかどうか」を知るには、
環境変数 SSH_AUTH_SOCK・SSH_AGENT_PID を参照します。そのため、ssh-agent の引数に
シェルを指定したり、eval したりして、最終的に ssh (scp・slogin) に環境変数が
伝わるようにしているわけです。
[~/.shosts を使う方法]
local.hoge.ac.jp の name1 から remote.hoge.ac.jp の name2 に
ログインする例です。なお、ssh-agent・ssh-add は一切使いません。
(1) local.hoge.ac.jp で ssh-keygen を実行し、パスフレーズを入力
(2) slogin -l name2 remote.hoge.ac.jp でリモートにログイン
(3) retemo.hoge.ac.jp で ~/.shosts というファイルを作り、
local.hoge.ac.jp name1
と記述し、
% chmod 600 ~/.shosts
でパーミッションを設定。
(4) さらに remote.hoge.ac.jp から
slogin -l name1 local.hoge.ac.jp
でログイン (逆方向へログイン)。
(5) (4) の slogin を exit で抜ける。
(6) (2) の slogin を exit で抜ける。
すると、ローカルから
% slogin -l name2 remote.hoge.ac.jp
としてもパスフレーズの入力を求められません。これは ssh-agent の方法と違い、
いつでも (いったんローカルホストからログアウトしても) 有効です。
管理番号 2222 (新規)
更新履歴
Q. ja-netscape のメニューやボタンが文字化けします。日本語リソースファイルを
いじったり、~/.Xdefaults で Netscape*fontList を指定したりしてみましたが、
解決できません。
A. KDE をお使いではありませんか?
Control Center → Look & Feel → Style の「他の描画に関する設定」で
「フォントと色を非 KDE アプリにも適用」のチェックを外し、KDE を再起動
してみてください。
少なくとも Netscape 4.x と ja-kde-i18n-2.2.2 の組合せでこの問題が
起きることが確認されています。Mozilla + KDE の場合は問題ありません。
参考 <URL:http://www.jp.redhat.com/support/7.1/sla/71faq.html#1>
管理番号 2224 (新規)
更新履歴
Q. FreeBSD 4.X-RELEASE で May 19 05:52:07 サイト名 sshd[1866]: warning:
/etc/hosts.allow, line 23: can't verify hostname: getaddrinfo(ドメイン
名, AF_INET) failed がでるのですが、セキュリティ上問題はありませんか?
/etc/hosts.allow はオリジナルのまま変更していません。
A. このメッセージは sshd(8) にかぎらず、 libwrap(3) をリンクしたサーバプログ
ラム、具体的には inetd(8), portmap(8), sendmail(8) からも発生します。
これは接続して来たクライアントの逆引き→正引きを行なった後、
/etc/hosts.allow の評価を行ないます。そして 逆引き→正引きを行なった際、正
引き情報と一致しないものを排除するためのものです。該当するアクセスがあれば、
逆引きに失敗するのでこの様な warning が発生します。
ホスト名・ドメイン名を偽造したアクセスである可能性が高いので、 warning が気
になる人は、 /etc/hosts.allow の先頭、少なくとも ALL : ALL : allow の前に、
ALL : PARANOID : RFC931 20 : deny
を追加して下さい。 warning は消えませんが、この様なアクセスを排除することが
できます。
管理番号 2228 (新規)
更新履歴
Q. 乱数を得ようと rand(3) を使ったのですが、非常に質の悪い乱数が
生成されてしまいます。
A. FreeBSD の rand 関数は質の悪い乱数発生関数です。rand(3) には
NAME
rand, srand, rand_r - bad random number generator
===
と書かれています。このマニュアルにある通り、質の良い乱数発生
関数は random(3) ですので、こちらを使ってください。