FreeBSD QandA 2002年6月19日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 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) ですので、こちらを使ってください。


QandA
QandA Project
登録・更新 QandA 一覧