--- [管理番号 186] (最終更新 1999/02/17 23:58:45) Q. /etc/hosts.conf に hosts <改行> bind と書いたのに 名前解決に /etc/hosts ファイルを参照してくれません。 A. "hosts.conf" ではなく "host.conf" です。"s" が余分です。 --- [管理番号 195] (最終更新 2000/12/07 02:37:48) Q. gated で routed を置き換える時の gated.conf は rip yes; だと聞いて、routed を gated に置き換えたんですが RIP の流れてこない ネットワークへの経路がなくなってしまいます. A. RIP の流れてこない口は passive に指定しましょう。詳しくは を見て下さい。また、 に NEC の近藤さんの翻訳された日本語ドキュメントもあります。 --- [管理番号 196] (最終更新 2001/11/17 19:15:36) Q. routed が sendto(vx1, 224.0.0.1): No route to host というメッセージを延々と出し続けます。 A. routed(8) に「-P no_rdisc」オプションを追加すれば、消えませんか? このオプションは `Internet Router Discovery Protocol' を無効にします。 これで問題なければ、/etc/rc.conf に router_flags="-q -P no_rdisc" の設定を追加すれば良いでしょう。 --- [管理番号 205] (最終更新 1999/02/17 23:58:45) Q. Apache HTTPd を起動すると、次のようなメッセージが出力されます。 httpd: cannot determine local host name. Use Server Name to set it manually. A. 英文の通り、手動で ServerName を定義してやらなければなりません。 /usr/local/etc/apache/httpd.conf に ServerName myname.domain の行を追加して、Apache HTTPd を再起動します。 --- [管理番号 623] (最終更新 1999/02/17 23:58:45) Q. DEC 2114x チップの NIC を使っていますが、 de0: abnormal interrupt: transmit underflow (raising TX threshold to 96|256) de0: abnormal interrupt: transmit underflow (raising TX threshold to 8|512) de0: abnormal interrupt: transmit underflow (raising TX threshold to 1024) de0: abnormal interrupt: transmit underflow (switching to store-and-forward mode) というようなメッセージが出ます。 A. このメッセージは、de ドライバが「2114x が送信アンダーフロー割り込み を発生した」ことを検出したという意味です。 結論から先に言うと、問題は (ほとんど) ありません。 この「送信アンダーフロー割り込み (transmit underflow)」は、2114x が送 信データをメインメモリから自分の FIFO に取り込み、イーサネットに送信す る過程で、FIFO に取り込むスピードよりもイーサネットに送信するスピード が速いために FIFO が空になることにより発生します。 これは、PCI バスの転送スピードが遅く、イーサネットがすっからかんのとき に顕著になります。 de ドライバは送信アンダーフロー割り込みが発生した場合、できるだけ自分 の FIFO にデータを溜めてから送信をするように、送信スレッショルドをだん だん大きくします。これが raising TX threshold to xxx の意味です。 # ちなみに、xxx の数字は、プログラムのミスで # 72|128、96|256、128|512、160|1024 # となるのが正しいようです。(/sys/pci/if_de.c を見てください。) さらに、それでもアンダーフローが発生するようであれば 1 パケット分のデー タが FIFO に溜るまで送信しない store-and-forward モードになります。(メッ セージの最後の行です。) この状態まで来ると、もうアンダーフローは発生し なくなるはずです。 送信アンダーフローが生じた際には、それまで FIFO に溜まっていたデータま でしか送出されず、送出されるイーサパケットは途中で切れた形となります。 したがって、通信の相手先では変なパケットを受け取ることになり、たとえば、 それがイーサパケットの最後尾に付加されるべき CRC (Cyclic Redundancy Check) が付いていない状態のパケットとみなされた場合は、次のような bad crc とのメッセージが表示されるでしょう。 de0: receive: xx:xx:xx:xx:xx:xx: bad crc 送信アンダーフローは PCI バスの転送速度が足りないことから発生しますの で、根本的な対策は PCI バスの転送速度を 2114x のために確保することです が、以下に、いくつか ad hoc な対策をあげておきます。 1.BIOS の設定メニューで PCI バスのレイテンシタイマを調整してみる。 2.PCI バスに接続している不要なデバイスを減らす。(できれば...だけど) 3.PCI バス上で 2114x の転送優先順位を上げる。(BIOS の改造が必要だけど) 4.PCI バスの転送速度を上げる。(規格外の改造が必要だけど) 5.イーサネットに他の機器を接続して、イーサネットを混ませる。(イミなし) 6.時々へんなパケットがイーサネット上に送信されるが気にしない。 送信アンダーフローが頻発するようであれば、イーサネット上を変なパケットで 占有されてしまうため、貴重なネットワーク資源を無駄にする可能性もありますが 送信アンダーフローが頻発しないのであれば 6 で良いのではないでしょうか? 注意: 以上の説明は、いろいろな意味で「正常」なシステムを前提にしています。 ハードウェアの不具合や相性問題等が直接的または間接的 (他のデバイスが PCI バスを占有している等) 原因になっていないとも限りません。PCI バス が混んでいるはずが無いのにアンダーフローが発生するとかアンダーフロー があまりに頻発するようであれば、いろいろな角度からシステム全体のチェッ クをしてみた方が良いでしょう。 --- [管理番号 632] (最終更新 1999/02/17 23:58:45) Q. あるホストのディスクを、他のホストのテープ装置を使ってバックアップ したいのですが。 A. tar、dump コマンドは バックアップの出力先ファイルに ユーザー@ホスト:出力先ファイル という形式を指定できます。rmt(8)、rcmd(3) のマニュアルを参照して下さい。 以下に具体的な使用例を示します。 hostA テープ装置のあるホスト hostB バックアップしたいホスト 1. hostAの設定をします。 テープ装置をアクセスするユーザーを追加します。 tape:*:888:5::0:0:tape:/home/tape: このユーザーは operator グループに所属している必要があります。 /home/tape/.rhosts に 以下の行を記述します。 hostB root このファイルは、tape または root に所有され、所有者以外の書き込みが禁 止されている必要があります。 /etc/inetd.confファイルの以下の行を有効にします。 shell stream tcp nowait root /usr/libexec/rshd rshd 2. hostBでのバックアップ。 # dump 0uf tape@hostA:/dev/nrst0 /dev/rwd0s1a # tar cvpf tape@hostA:/dev/rst0 . [注] FreeBSD の デバイスファイルは tar (GNU tar) で正しくバックアップをとる ことができません。このためシステム全体のバックアップをとる場合は dumpや cpio 等を使う方が良いでしょう。 また、この設定は、場合によってはセキュリティホールとなる場合も考えられ ますから tcp_wrapper(tcp_wrappers)等を併用することも検討して下さい。 --- [管理番号 651] (最終更新 1999/02/17 23:58:45) Q. ネットワークインタフェースの設定をしています. rc.conf を直せと 言われたのですが「ネットワークアドレス」と「ブロードキャストアドレス」を 書くところがありません. どこに書けばいいのですか? A. 例えば, rc.conf には以下のような行があるとおもいます. >network_interfaces="ed0 lo0" # List of network interfaces (lo0 is loopback). >ifconfig_ed0="inet 192.168.1.1 netmask 255.255.255.0" >ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. ifconfig_ed0 の行がきちんと書いてあれば, ネットワークアドレスと ブロードキャストアドレスは勝手に設定されますのでなにもしなくて構いません. 上の例では, ed0 に 192.168.1.1 という IP アドレスを設定し, ネットマスクは 255.255.255.0(24bit) にしていますが、この場合ネットワークアドレスは 192.168.1.0 に, ブロードキャストアドレスは 192.168.1.255 に設定されます. 計算の仕方は, ネットワークアドレス: IP アドレスとネットマスクの論理積 ブロードキャストアドレス: ネットワークアドレスと, 「ネットマスクを bit 反転したもの」の論理和 です. 上の例の場合, IP アドレス: 192.168.1.1 (= 0xc0180101) ネットマスク: 255.255.255.0 (= 0xffffff00) ですので, ネットワークアドレス: 0xc0180101 と 0xffffff00 の論理積をとって, 0xc0180100 = 192.168.1.0 ブロードキャストアドレス: 0xc0180101 と 0x000000ff の論理和をとって, 0xc01801ff = 192.168.1.255 となるわけです. --- [管理番号 652] (最終更新 1999/02/17 23:58:45) Q. ネットワークの組替えをしたら、ネットワークインタフェースカードの Link ランプがつかなくなってしまいました。どこを調べたらいいですか? A. とりあえず以下をチェックしてみてください。 1. ちゃんと RJ45 コネクタの爪が「カチン」と言うまで深く挿してますか? 挿さっているようでも実は端子が接触していないことがあります。 2. PC からのケーブルを、hub の cascade ポートに繋いでいませんか? 逆に、hub 同士を繋ぐときに cascade ポート以外のところに繋げていませ んか? または、hub の横にある cascade / 通常ポートの切り替えスイッチを間違 えていませんか? 3. クロスケーブルとストレートケーブルを間違って使ってませんか? 4. ネットワークインタフェースカードはちゃんとマザーボードに挿さってます か? PCI スロット (または ISA スロット) から抜けかかっていませんか? 5. DE-500 等のように、10Base-T/100Base-TX(10M/100Mbps) 切り替え式のネッ トワークインタフェースカードの場合、自動切り替えをやめて ifconfig を 使って手動でメディアタイプを変えてみてください。 6. ネットワークインタフェースカードはカーネルに認識されていますか? 7. hub を 4 台以上イモヅル式に繋いでいませんか? hubのイモヅル接続は 3 台 まで、という電気的制限があります。場合によっては 3 台以下でも駄目にな ります。 8. 残念ながら、一部のネットワーク機器には相性があることが知られています。 接続された 2 機器間の電気的特性があわないことがあるのです。 新しく増やした機材があったら、以前使えていたことのある機材ととりかえ てみてください。 --- [管理番号 669] (最終更新 1999/02/17 23:58:45) Q. 起動時から、IP と IPX の両方のプロトコルを BIND したい。 A. /etc/rc.conf を編集します。例えば NE2000 互換 NIC ならば、以下のよ うに記述します。 ifconfig_ed0="inet 192.168.0.254 mask 255.255.255.0" ifconfig_ed0_ipx="ipx 0xFF" これで起動時に NIC に IP がアドレス 192.168.0.254 で、IPX がネットワー クアドレス (FF)h で振られます。 --- [管理番号 670] (最終更新 1999/02/17 23:58:45) Q. FreeBSD のコンソールでログインして、そこから Linux マシンに telnet でログインしようとすると $ telnet linux Trying 192.168.1.1... Connected to linux Escape character is '^]'. Connection closed by foreign host. となってログインできません。FreeBSD から linux へ rlogin はできます。 また、linux 側でアクセス制限はしていません。 A. telnet コマンドは手元の環境変数 TERM を相手の telnetd に知らせます。 コンソールでは環境変数 TERM は cons25 に設定されています。cons25 とい うタイプは FreeBSD 特有のものですので、他の OS では定義されていないこ とがほとんどです。定義されていなくても普通は支障がないのですが、 Linux(slackware 3.4) の場合はなぜか telnetd がこけてしまいます。 コンソールで環境変数 TERM を vt100 に設定しなおせばログインできるでしょ う。 --- [管理番号 676] (最終更新 1999/02/17 23:58:45) Q. telnet で login しようとすると login プロンプトが表示されるまで 1分以上かかります。ping は正常に返ってきますし、マシンの負荷が 高いわけでもありません。 A. FreeBSD の telnet は、ログをとるために telnet してきた端末の IP アドレスからホスト名を調べようとします。 このとき、DNS による 名前の逆引きを正しくできず、タイムアウトする までに時間が掛かっていることが原因だと思われます。 このような症状のときには DNS の設定をまず最初に疑うと良いでしょう。 相手側 (telnet を受ける側) のマシンで、 /etc/resolv.conf で指定 している DNS server を使用して、こちら側のマシン (telnet を実行する マシン) の IP アドレスから hostname を、検索できるかを % nslookup "こちらのマシンのIPアドレス" で確認します。Server failed のようになってしまうのであれば、 telnetd が DNS への検索にかかる時間の分 login プロンプトが 表示されるまで待たされることになります。 解決方法は、 1.相手側から到達できる DNS サーバを 相手側の /etc/resolv.conf に記述する 2.DNS を使用しないように 相手側の /etc/host.conf から bind を削除する、 3.または、/etc/host.conf で、bind よりも、hosts を先に記述し、/etc/hosts ファイルに hostname と IP の対応表を記述しておく。 などがあります。 --- [管理番号 695] (最終更新 1999/02/17 23:58:45) Q. 装着した NIC が認識はされているのに正常に動作しません。 A. irq や I/O アドレス (at 0x280-0x29f という部分) が FreeBSD 側の設定と ボード側の設定で一致していることを確かめてください。 もし間違いがなければ、probe 処理が干渉している可能性があるので、 必要なもの以外の device をすべて disable にして試してみてください。 ちなみに、特に FreeBSD(98) において、この干渉が起こる可能性が高くなっています。 --- [管理番号 747] (最終更新 1999/02/17 23:58:45) Q. tcp_wrapper (tcp_wrappers/tcpd)で、条件に引っかかった時に メールで通知しようと、hosts.deny に shell command を指定した のですが、tcpdchk のチェックで bad option name エラーになります。 A. make 時のオプションで -DPROCESS_OPTIONS が指定されているか 確認してください。packages を利用した場合および ports をそのまま 利用して build した場合には -DPROCESS_OPTIONS は指定されています。 (1) -DPROCESS_OPTIONS が指定されていない場合 daemon_list : client_list [ : shell_command ] で、直接 shell_command を指定できます。詳しくは hosts_access(5) を 参照してください。 (2) -DPROCESS_OPTIONS を指定している場合(ports/packages 利用時) daemon_list : client_list : option : option ... のように、option 指定が拡張されていますので、hosts_options(5) を 参照して設定してください。   shell_command を指定する場合は、spawn オプション(子プロセスによる 実行)指定を使用してください。   例: ALL: ALL: spawn /usr/bin/mail -s '%s denied access from %c' root & --- [管理番号 792] (最終更新 1999/02/17 23:58:45) Q. timed をスレーブモードで使用したらいきなり時刻が 9 時間進んでしまい ました。どうしたらいいですか? A. 内蔵時計を JST にして、インストール時の時刻設定で、内蔵時計が地方時 を表すようにした場合、このような現象が発生します。簡単な対策は、内蔵時 計が UTC を表すようにすることです。sysinstall や tzsetup で変更して下 さい。 ただし、内蔵時計を UTC にすると、DOS や Windows を起動した時にも UTC になります。 --- [管理番号 800] (最終更新 2000/03/04 08:15:40) Q. あるポート (port) 番号を使っているプログラムがどれなのかを 調べる方法はありますか? A. 以下に示す方法が考えられます。 A1. FreeBSD 3.1-RELEASE 以降なら sockstat(1) で調べられます。 なお、このコマンドは perl スクリプトで、やっている事は ほとんど A2. の説明そのものです。 A2. netstat -A コマンドと fstat コマンドを組み合わせれば調べられます。 netstat -an で使用中のポート番号の一覧が表示されます。さらに -A を 指定すると、プロトコル制御ブロック (pcb) のアドレスも表示されます。 どのプログラムが どの socket を使っているかは fstat コマンドで 調べられますので、この pcb を対応付ければわかります。 例えば、調べたいポート番号を1234番とすると % netstat -anA | fgrep '*.1234' の結果の第一フィールドを f074a000 とすれば % fstat | grep f074a000 でわかります。 A3. port/package を使って sysutils/lsof をインストールしてあれば、 su で root 権限を得て、 % lsof -i :1234 とすることで、ポート番号 1234番を使用しているコマンドを 調べることができます。 --- [管理番号 801] (最終更新 2000/03/04 08:15:47) Q. network を利用するサーバプログラムを起動しようとしたら Unable to bind address Can't bind socket と言われてサーバプログラムが起動しません。 A. root 以外の権限で port番号 1024 未満を利用するサーバプログラムを起動し ようとしているか、何か別のプログラムがこのサーバプログラムが使う port 番号を先に使ってしまっているようです。 1024 未満の port 番号は特権 port と呼ばれ、root 以外の権限で起動された プログラムは、この特権portで接続を待ち受けることができない決まりになっ ています。 network を通じて通信するプログラムは 相手のマシンを識別する IPアドレス と相手のマシンの各プログラムを識別する port番号を指定して通信を行います。 IPアドレスが電話番号、port番号は内線番号と思ってください。 どのサーバプログラムが何番の port番号を利用するのかはだいたい決まって います。/etc/services に port番号の対応表があります。 どのプログラムがどの port番号を使っているかの調べ方は [管理番号 800] を参照してください。 サーバプログラムによっては、どちらの理由で bind に失敗したのか、ヒント になるメッセージを出力する場合があります。 Permission denied というメッセージは、root権限を持たないプログラムが特権port を使おうと したことを意味します。 Address already in use というメッセージは、別のプログラムが先にこのサーバプログラムが使おうと している port番号を使ってしまっていることを意味します。 --- [管理番号 814] (最終更新 1999/02/17 23:58:45) Q. 上位ネットワーク管理者より ネットワークを割り当ててもらったところ netmaskの長さが 8bit単位でありません。 この様なネットワークで DNS の逆引きさせるには どうすればいいですか? A. netmaskの長さが 8bit単位でないネットワークでの逆引きを解決する方法 はいくつかあります。どの様に解決するかは、そのネットワーク管理者の 方針によって変わりますので、そのネットワークを割り当てた上位の管理 者に相談してください。 なお、上位の管理者に相談する前に オライリー・ジャパンから発行されて いる 「BIND & DNS改訂版」の 9章 9.5 in-addr.arpa ドメインのサブドメ イン の部分を予習しておくと いいでしょう。 参考書: 書名 DNS&BIND 改訂版 発行元 オライリー・ジャパン 発売元 オーム社 ISBN: ISBN4-900900-42-7 C3055 定価: 4,800円(税別) --- [管理番号 824] (最終更新 2001/10/14 11:51:14) Q. ネットワーク上にある Windows マシンのディスクをマウントしたい。 A. Sharity と Sharity-Light というのがあります。 Sharity は commercial product、Sharity-Light は free product です。 を参照してください。 Sharity-Light は ports に入っています。 --- [管理番号 827] (最終更新 2003/05/17 21:39:26) Q. リモートから telnet 接続できないようにするにはどうすればいいんでしょ うか。 A. いくつかの方法が考えられます。 ・/etc/inetd.conf の telnet stream tcp nowait root /usr/libexec/telnetd telnetd という行の先頭に「#」をつけてコメント行にしてしまう。 (kill -HUP `cat /var/run/inetd.pid` を忘れずに)。 この方法だと、localhost からの telnet 接続もできなくなる。 なお FreeBSD 4.4-RELEASE 以降から、telnetd を含めた inetd 経由で 起動されるデーモンは、全て標準で無効になりました。 ・tcp_wrapper(tcp_wrappers) を使って、一部のホストからのみ telnet 接続できるようにする。なお、ルータや xinetd で設定することもでき る。 ・該当アカウントのパスワードファイルのシェルを変更しておく。 ユーザ単位での管理で、telnet 接続させたくないユーザのログインシェ ルに、たとえば /sbin/nologin などを指定して、これを /etc/shells に登録しておく。 なお、 ・telnet のポート番号を変えてしまう。 デフォルトの telnet ポートは23番だが(/etc/services を参照)、これ を別の空いているポートに変えておく。この方法だと、telnet のポート 番号を知っている自分だけが telnet できる。 というのは、ポートスキャンされれば一発でばれます。やめておきましょう。 --- [管理番号 828] (最終更新 1999/07/24 15:31:37) Q. Windows95/98 を含む LAN で時刻を同期させたいのですが、どうしたら よいのでしょうか? A. 以下の方法があります。 A1. PC-UNIX機で xntpd を動かし、Windows95 マシンで桜時計などの NTPクライアントを動かす。 桜時計はフリーソフトで、 から入手できます。 xntpd で上位サーバ無しで相互の同期を取る場合、一工夫いるようです。 [FreeBSD-users-jp 18626] xntpd の設定 のスレッドを参考にしてください。 A2. PC-UNIX機で timed を動かし、Samba をいれて Windows 付属の NET TIMEコマンドで同期させる。 Samba で export されたディレクトリを Windows 側にマウントさせるための コマンドとまとめてバッチファイルにしてスタートアップにいれておけば 起動する毎に時間を同期させられます。 Samba については [管理番号 178]、[管理番号 308] を参考にしてください。 A3. PC-UNIX機で timed を動かし、Windows95マシンに Network Time for Windows をインストールして、スタートアップにいれておく。 この方法だと、Windowsマシンを起動する毎に時間を同期させられます。 Network Time for Windowsは フリーソフトで、 から入手できます。 --- [管理番号 829] (最終更新 1999/02/17 23:58:45) Q. ルータを作りました。ブロードキャストは転送してくれないのですか? A. 自分の属しているネットワーク宛のは、してくれません。 Limited broadcast が転送されないのは、そう有るべきなので良 いのですが、Directed broadcast が転送されないのは現在の実装 の制限で、改善されるべきでしょう。 FreeBSD-2.1 系の頃はカーネルオプションの options DIRECTED_BROADCAST を指定する事で動作を選べたようです。 (稼働は 2.1.7.1R のみ確認 [FreeBSD-users-jp 28263]) FreeBSD-2.2 系では、このオプションとそれに関わるコードは削 除されているようです。 NetBSD、OpenBSD のソースを見ると、それらでは改善されていて、 sysctl(8) で動作を選べるようです。 (動作は未確認) なお、 Limited broadcastの意味については [管理番号 699] Directed broadcastの意味については [管理番号 700] を参照してください。 --- [管理番号 835] (最終更新 2001/08/12 02:51:18) Q. FreeBSD 上でパソコン通信のホストを運営したいと思いますがどんな プログラムがありますか? A. 現在わかっているのは STBBS と ANNBBS の二つです。 STBBS (日本語) ANNBBS から入手可能です。おためしください。 --- [管理番号 1006] (最終更新 2002/02/14 00:39:59) Q. getty(8) で待たせてある ttyd0 ポートにアクセスすると、login プロンプトが 以下のように文字落ちし、login できません。 reeBSD 化けたホスト名 (tty0) loi: A. モデムと getty とでパリティの設定 (even, odd, none)に 相違があります。 モデムへのパリティ設定は、モデムに送る AT コマンドにて行われます。 モデムへの設定を tip(1) で行っている場合は、/etc/remote に記述している 指定しているエントリの pa フラグを再確認してください。 pa フラグを指定しない場合、デフォルトで pa=even (偶数パリティ) になります。 (see remote(5)) getty へのパリティ設定は、/etc/gettytab にて行われます。/etc/gettytab に 記述している指定しているエントリのパリティ設定フラグを再確認してください。 指定しているエントリが std.* を使っている場合は、np (ノンパリティ) が 既に記述されています。(see gettytab(5)) --- [管理番号 1053] (最終更新 2001/08/12 02:51:16) Q. スタンドアロンなマシンで、他の user に mail を出したのですが、戻って 来ました。 (もちろん、user名はあってますし、ドメイン名も間違ってません。) A. 「ドメイン名も間違ってません。」ということは、"username@domainname" 形式で送っていますね? "username" のみで送ったら、たぶん届くことでしょう。 どうしても、「"username@domainname" 形式で送りたい。」と思うなら、 /etc/host.conf を変更しましょう。 [管理番号 185]、[管理番号 344] が参考になるでしょう。 --- [管理番号 1095] (最終更新 2000/01/20 19:42:32) Q. dhcp で取得した IP アドレスを知るにはどうすればよいですか。 A. dhcp で取得したものに限らず、現在ネットワークインターフェイスに割り 振られている IP アドレスは、 ifconfig ネットワークインターフェイス名 (例: ifconfig ed0) または ifconfig -a で確認することができます。 --- [管理番号 1121] (最終更新 2000/05/24 20:48:06) Q. Fast Ethernet カードの 10Mbps or 100Mbps の速度切替はどうやって 指定すればいいのでしょうか? A. おそらく正解への早道は、使用なさっているドライバの man ページに書か れていると思います。de ドライバなら de(4)、fxp ドライバなら fxp(4) という具合です。 FreeBSD 2.2.2R までは ifconfig(8) のオプションの link? や -link? を 組み合わせて指定していました。 FreeBSD 2.2.5R 以降は ifconfig(8) の media というオプションで指定 できます。一般的にデフォルトでは 10Mbps/100Mbps を自動認識する autoselect モードに設定されていますが、de ドライバでは次の様にすれ ば、明示的に通信速度を固定できます。 # ifconfig de0 media 10baseT/UTP とやると 10Base-T # ifconfig de0 media 100baseTX とやると 100Base-TX などに切り替えられます。 また、Full duplex モードと Half duplex モードは、mediaopt という オプションで切り換えできます。 # ifconfig de0 media 100baseTX mediaopt full-duplex とやると 100base-TX の全二重 (Full duplex) に切り替えられます。 --- [管理番号 1547] (最終更新 2001/02/18 15:26:53) Q. wget で HTTP や FTP 経由で再帰的にファイルを取得したいのですが。 A. HTTP や anonymous FTP の場合は、それぞれ wget -m -np http://host/dir/ wget -m ftp://host/dir/ でできます。 HTTP では、http://host/robots.txt に探索を排除する記述があると、 ファイルを再帰的には取得できません。 また、 wget は HTML の OBJECT 要素、CITE 属性、LONGDESC 属性、 USEMAP 属性、PROFILE 属性、スクリプトなどに対応しておらず、 これらで参照されるファイルは取得できません。スタイルシートへの 対応も不完全です。 普通の FTP で、例えば ~/dir 以下を取得したい場合、 wget -m ftp://user:pass@host/dir/ とします。 普通の FTP で、ホームディレクトリ以外、例えば /dir 以下を取得したい 場合は、絶対パスで、 wget -m ftp://user:pass@host/%2Fdir/ と書きます。 %2F はルートディレクトリを表すスラッシュを URL エンコード したものです。スラッシュをエンコードせずに、 wget -m ftp://user:pass@host//dir/ としても同じ結果が得られますが、これは RFC 的に正しくありません。 (従って wget 以外に応用しようとするとうまくいかない可能性があります)。 一般的な URL の書式については RFC2396 を、HTTP URL や FTP URL の 解釈については RFC1738 を参照してください。 host というディレクトリを掘られたくなければ、-nH を、home/user/ と いったディレクトリを掘られたくなければ、--cut-dirs=2 を追加すれば よいでしょう。 wget には多くのオプションがありますので、詳しくは wget --help や info wget などとしてください。 --- [管理番号 1576] (最終更新 2000/04/19 21:36:51) Q. rsh・rlogin・rcp って何ですか。 A. 他のホストでコマンドを実行 (rsh)、他のホストから (あるいは 他のホストへ) ファイルをコピー (rcp)、他のホストにログイン (rlogin) するコマンドです。 相手側に対応する rshd、rlogind などのサーバが用意されている 必要があります。FreeBSD では、これらのサーバはデフォルトで 実行されるようになっています。 local.hoge.ac.jp の user1 というユーザが、remote.hoge.ac.jp に hoge2 というユーザとしてログインする場合、 % rlogin -l user2 remote.hoge.ac.jp とします。もしリモートとローカルでユーザ名が同じなら `-l user2' は 省略可能で、単に % rlogin remote.hoge.ac.jp とすればよいです。 また、相手側のホスト (remote.hoge.ac.jp) の ~/.rhosts という ファイルに local.hoge.ac.jp user1 と記述しておくと、local.hoge.ac.jp から - rlogin 時にパスワード入力が不要 - rsh・rcp が使用可能。こちらもパスワード入力が不要 ができるようになります。 - rsh の使い方。 local.hoge.ac.jp から remote.hoge.ac.jp で ls コマンドを 実行するには % rsh -l user2 remote.hoge.ac.jp ls とします。 - rcp の使い方。 % rcp user2@remote.hoge.ac.jp:/dir1/dir2/file . remote.hoge.ac.jp の /dir1/dir2/file を local.hoge.ac.jp の カレントディレクトリにコピー % rcp user2@remote.hoge.ac.jp:dir1/dir2/file . ホームディレクトリ以下の dir1/dir2/file がコピーされます。 % rcp file user2@remote.hoge.ac.jp:~/dir1/dir2/ 逆向きにリモートへファイルをコピー % rcp user2@remote.hoge.ac.jp:~/dir1/\*.txt ~/dir1 エスケープすればワイルドカードも使えます。 上の例とは逆に、local.hoge.ac.jp の ~/.rhosts に remote.hoge.ac.jp user2 と書いておくと、remote.hoge.ac.jp から local.hoge.ac.jp へ、 ノーパスワードで rsh・rlogin・rcp が実行できます。 要は、 「ログインしたいホストの ~/.rhosts に」 「どこのホストのどういう名前のユーザを許可するか」 を書いておくわけです。 r* コマンドは便利なのですが、セキュリティを重視するサイトでは、 rsh・rlogin・rcp の代わりに ssh を使うところが多いです。 また、セキュリティ以外の面でも、ネットワークが細い場合は -C オプションによる圧縮の効果もあります。できるだけ ssh を 使う方がよいでしょう。 [管理番号 1577] ssh・slogin・scp って何ですか。 r* コマンドで接続させないようにするには、/etc/inetd.conf から shell stream tcp nowait root /usr/libexec/rshd rshd login stream tcp nowait root /usr/libexec/rlogind rlogind のエントリを # でコメントアウトしたあと、 # killall -HUP inetd として現在実行中の inetd にファイル変更を反映させます。 仮に r* コマンドを使用可能にするとしても、tcp_wrapper (tcp_wrappers) を導入し、指定したホスト以外からの rsh・rlogin・rcp を弾くようにした方がよいでしょう。 --- [管理番号 1577] (最終更新 2001/08/12 05:25:04) Q. ssh・slogin・scp って何ですか。 A. 簡単に言うと、rsh(1)、rlogin(1)、rcp(1) のセキュリティを高めたものです。 相手側に対応するサーバ sshd(8) を実行しておく必要があります。 FreeBSD 4.0-RELEASE 以降なら、OpenSSH に変更を加えたものがシステムに インストールされます。リリースによっては FreeBSD のインストール の際に明示的にインストールするようにインストーラに指示しなければ なりません。 2001 年 6 月 2 日現在、FreeBSD のバージョンによって二系統の ssh があります。一つは OpenSSH 2.3 ベースのもので、もう一つが OpenSSH 2.9 ベースのものです。 それ以前の FreeBSD なら相手側とローカル側の両方のマシンに、 ports から ssh をインストールしておけば OK です。ports には ssh-1.2.27 と openssh、openssh-portable などがあります。 商用の ssh にはライセンスが緩いが SSH1 しか使えないものと ライセンスが厳しいかわりに SSH2 の使えるものの二種類があります。 詳細は を参照してください。 また、ssh の暗号化の仕組みを知りたい方は、 が参考になるでしょう。 単純に telnet(1) や rlogin(1) の代用としてなら、いたって簡単に使えます。 例えば、リモートホスト remote.hoge.ac.jp にログインするには、 % slogin remote.hoge.ac.jp -l username username@remote.hoge.ac.jp's password: あるいは % ssh username@remote.hoge.ac.jp username@remote.hoge.ac.jp's password: とします。ここで相手先のパスワードを入力すれば OK です。ローカルホ ストとリモートホストでユーザ名が同一であれば、username の指定は 省略できます。 これはパスワードを crypt し、/etc/master.passwd のエントリと一致するか どうかを試しているだけですが、ネットワークを流れるデータが暗号化 されているので telnet や rlogin よりは安全です。 --- [管理番号 1578] (最終更新 2002/08/24 06:22:40) Q. ssh, slogin, scp, sftp を使うたびに、毎回パスワード/パスフレーズを 入力するのが面倒なのですが、省略することは出来ませんか? A. 面倒な作業を楽にするためには、何らかの形でマシンに接続情報を残すことに なります。そのマシンがクラックされた場合、いもづる式に他のマシンも クラックの対象になってしまいます。セキュリティに対して責任を持てる場合 以外は楽をするべきではありません。このことを認識したうえでお読み下さい。 なお、この QandA の内容は OpenSSH のバージョン 2.9 以降に基づいています。 (OpenSSH2.9 は FreeBSD 4.5-RELEASE および 4.6-RELEASE に付属しています。) 古いバージョンの OpenSSH や、他の SSH の実装 (ports の security/ssh 等) では、一部の機能が使えなかったり、設定方法が異なる場合があります。 SSH で使われる認証方法を分類すると以下のようになります。 A. パスワード認証 PasswordAuthentication (SSH1, SSH2) B. 公開鍵認証 PubkeyAuthentication (SSH2) RSAAuthentication (SSH1) C. ホストベース認証 HostbasedAuthentication (SSH2) RhostsRSAAuthentication (SSH1) D. その他 このうち、公開鍵認証やホストベース認証を使っている場合は パスワード/パスフレーズの入力を省略することができます。 [公開鍵認証の場合] 公開鍵認証を行なうためには、まず認証鍵の作成が必要です。 [管理番号 1948] [管理番号 1949] を読んで認証鍵の設定をして下さい。 秘密鍵は絶対に洩れてはいけない情報ですので、ファイルに記録される際は 安全性を考えて鍵作成時に入力したパスフレーズによって暗号化されています。 ssh 接続時にパスフレーズの入力を求められるのは、認証を行なうために 暗号化された秘密鍵を復号する必要があるからです。 そこで、あらかじめ復号済みの秘密鍵を記憶しておくことで 接続のたびにパスフレーズを入力する手間を省いてくれる ssh-agent というコマンドが用意されています。 もちろん、復号済みの秘密鍵は ssh-agent プロセスのメモリ内だけに 記憶されているので、メモリの内容を直接覗かれたりしない限り 秘密鍵が洩れる心配はありません。 ssh-agent を利用するには以下の 2 つの手順が必要です。 1. ssh-agent を起動する。 2. ssh-add を使って、秘密鍵を復号し ssh-agent に登録する。 1. ssh-agent を起動する。 ssh-agent の起動方法は 2 つあります。 ひとつは % ssh-agent tcsh として新しいシェルを起動する方法です。 この場合、新しく起動したシェルの中からだけ ssh-agent の機能を 利用することができます。シェルが終了すると ssh-agent も 自動的に終了します。 もうひとつは % eval `ssh-agent -c` % ...(ssh-add, ssh, scp 等の利用)... % eval `ssh-agent -c -k` として、現在のシェルに対し ssh-agent の情報を eval によって 伝える方法です。この場合は、ssh-agent は自動的には終了しないので eval `ssh-agent -c -k` で終了させるのを忘れないようにして下さい。 また、bash や zsh など sh 系のシェルを使っている場合は ssh-agent -c の代わりに ssh-agent -s と指定して下さい。 2. ssh-add を使って、秘密鍵を復号し ssh-agent に登録する。 ssh-agent が起動できたら、続いて認証鍵の登録を行ないます。 引数に秘密鍵のファイル名を指定して ssh-add を実行して下さい。 % ssh-add ~/.ssh/identity パスフレーズを入力してやれば鍵の登録は完了です。 また、X を使用している場合は % ssh-add ~/.ssh/identity < /dev/null とすることで GUI のパスフレーズ入力ウインドウを開くことができます。 ただし、あらかじめ port/package から security/openssh-askpass を インストールしておく必要があります。 ssh-agent の起動と認証鍵の登録が終れば、パスフレーズを入力することなく ssh, scp 等が利用できるようになります。 上記の手順をさらに自動化する方法も紹介します。 a. pam_ssh を使う。 4.6-RELEASE からは、pam_ssh module を使うことが出来ます。 /etc/pam.conf を適切に設定してやれば、 ログイン時に ssh-agent の起動や認証鍵の登録を、 ログアウト時に ssh-agent の終了を自動で行なってくれるようになります。 /etc/pam.conf の xdm 部分の設定例は次のようになります。 xdm auth required pam_unix.so xdm auth optional pam_ssh.so use_first_pass xdm account required pam_unix.so xdm session optional pam_ssh.so xdm session required pam_permit.so xdm password required pam_deny.so このように設定し、UNIX パスワードと同じパスフレーズで SSH の秘密鍵を作成しておくと、ログイン時に自動で ssh-agent が起動し、その秘密鍵が登録されるようになります。 また、起動した ssh-agent はログアウト時に自動的に終了します。 詳しくは、pam_ssh(8), pam.conf(5) を参照して下さい。 b. スタートアップスクリプトで ssh-agent を起動させる。 pam_ssh を使わない場合は、~/.login 等のスタートアップスクリプトで ssh-agent を起動する方法があります。 コンソールからログインしている人は、~/.login の最後に eval `ssh-agent -c` としておいて、~/.logout に eval `ssh-agent -c -k` と書いておくとよいでしょう。 xdm を使用している人は ~/.xsession に ----------- #!/bin/sh eval `ssh-agent -s` twm & # ウィンドウマネージャを起動 PID=$! ...(kterm などの起動)... wait $PID # ウィンドウマネージャの終了を待ち eval `ssh-agent -s -k` # ssh-agent を kill ----------- と書いたり、 ----------- #!/bin/sh xrdb .Xresources exec ssh-agent fvwm # ウィンドウマネージャを ssh-agent の制御下で起動 ----------- と書いておくとよいでしょう。 次に、ssh-add でパスフレーズを入力しなければいけませんが ----------- #!/bin/sh if [ -z "${SSH_IDENT}" ]; then SSH_IDENT="${HOME}/.ssh/identity" fi if [ -n "${SSH_AUTH_SOCK}" -a -z "${SSH_CLIENT}" -a -f "${SSH_IDENT}" -a -f "${SSH_IDENT}.pub" ]; then FINGERPRINT=`ssh-keygen -l -f "${SSH_IDENT}.pub" | awk '{print $2}'` if ! ssh-add -l | grep "${FINGERPRINT}" >/dev/null; then if [ -z "${DISPLAY}" -o -z "${SSH_ASKPASS}" ]; then ssh-add "${SSH_IDENT}" else ssh-add "${SSH_IDENT}" (22) sshd (6010) ↓ 暗号化された通信路 ↑ X server (6000) xclock (環境変数 DISPLAY 参照) 3. TCP ポートフォワーディング オプション : -L port:host:hostport -L port/host/hostport (IPv6) 設定ファイル : LocalForward port host:hostport TCP/IP ポート host:hostport を、リモート側から暗号化された通信路 を経由してローカルの port に転送します。通常 host は ssh の接続先ホ ストですが、それ以外のホストを指定してもかまいません。この場合、接 続先ホストと host 間の通信は暗号化されませんので、注意してください。 なお、host は接続先ホストから見た名称となります。 オプション : -R port:host:hostport -R port/host/hostport (IPv6) 設定ファイル : RemoteForward port host:hostport TCP/IP ポート host:hostport を、ローカル側から暗号化された通信路 を経由してリモートの port に転送します。これを見てピンときた人もい るでしょうが、これを使えば X11 forwarding をエミュレートできます。 どの指定方法も必要なら複数指定することができます。 4. POP over ssh 例えば、ホスト remote.hoge.ac.jp の POP3 サーバとのデータのやりとりを telnet(1) で行うと、 % telnet remote.hoge.ac.jp 110 ... USER username (ユーザ認証) PASS password .... RETR 1 (メール番号 1番を取得) .... (メールの内容が送られてくる) QUIT となります。これではパスワードやメールの内容が全て平文でネットワーク 上を流れてしまいます。 リモート (remote.hoge.ac.jp) に sshd(8) が上がっている場合は、この代わりに % ssh -L 8000:remote.hoge.ac.jp:110 remote.hoge.ac.jp とします。そして、ローカルのポート 8000 にアクセスすると、 % telnet localhost 8000 ... USER username (ユーザ認証) PASS password .... RETR 1 (メール番号 1番を取得) .... (メールの内容が送られてくる) QUIT と、remote.hoge.ac.jp:110 の代わりに localhost:8000 に接続して、 同じ POP3 プロトコルをしゃべればメールが取得できるわけです。 ssh(1) が自動的にリモートのポート 110 宛に転送してくれます。 流れるデータは全て暗号化されており、-C で圧縮することもできます。 a) Netscape Netscape Messenger では、サーバ名を指定する所に 「ホスト名:ポート番号」 (例 localhost:8000) と記述します。なお、メールを取り込む前に % ssh -L 8000:remote.hoge.ac.jp:110 remote.hoge.ac.jp を実行しなくてはいけません。 b) fetchmail(1) POP over ssh の例は、fetchmail のオンラインマニュアルにも載っています。 以下の ~/.fetchmailrc はその一例です。この例では pophost には直接 ssh で接続できないので、shellhost を経由しなければならないと仮定し ています。 ---[~/.fetchmailrc の例]--- defaults proto apop timeout 120 mda "/usr/local/bin/procmail -d localuser" username popuser password poppass postconnect "/usr/sbin/sendmail -q"; poll pophost.domain via localhost port 10110 with proto pop3: preconnect "ssh -f -L 10110:pophost.domain:110 shellhost.domain -l popuser sleep 20 /dev/null 2>&1"; --- local shellhost (10110) ssh (xxx)<================>(22) sshd ↑↓ 暗号化された通信路 ↓↑ LAN fetchmail (110) POP3 server pophost 5. IMAP over ssh 6. SMTP over ssh a) sendmail(8) + CF まず、sendmail.cf を作りなおします。CF の .def ファイルを編集して、 未使用のメーラを SMTP over ssh 用に設定します。 ESMTP_MAILER_ARGS='IPC $h 10025' ESMTP_MAILER_FLAG_BASE="$SMTP_MAILER_FLAG_BASE" 上の例では esmtp メーラを使い、ssh による TCP forwarding にポート番 号 10025 を割り当てます。つぎに配送方法の指定ですが、基本的に全ての メールを暗号化して送るのなら以下のような指定になるでしょう。 DIRECT_DELIVER_DOMAINS='local.domain' DIRECT_DELIVER_MAILER=smtp DEFAULT_RELAY='esmtp:[localhost]' DELIVERY_MODE='queue' または、逆に一部のドメイン宛のみ暗号化するのなら、STATIC_ROUTE_FILE か MAILERTABLE を使用すれば良いでしょう。 [mailertable の例] myoffice.domain esmtp:[localhost] % ssh -f -C -L 10025:localhost:25 host.myoffice.domain sleep 60 % sendmail -q 7. NNTP over ssh a) leafnode(8) ports から入れたのなら /usr/local/share/doc/leafnode+/config.example に例があります。 8. rsync(1) オプション : -e ssh または --rsh=ssh 環境変数 : RSYNC_RSH % rsync -avz --delete --rsh=ssh . user@remote:dir/ カレントディレクトリ配下のツリー全体を remote の ~user/dir/ ディレ クトリへ反映させます。その際 remote との接続に ssh を使用します。 なお、ssh 側で既に Compression yes になっている場合は、rsync の -z オプションは無意味でしょう。 $ export RSYNC_RSH=ssh (sh 系) % setenv RSYNC_RSH ssh (csh 系) 環境変数を設定しておけば、オプション指定は省くことができます。 9. cvs(1) 環境変数 : CVS_RSH $ export CVS_RSH=ssh (sh 系) % setenv CVS_RSH ssh (csh 系) % cvs -d freefall.FreeBSD.org:/home/ncvs checkout src/sys CVS リポジトリのあるサーバへの接続に ssh を使います。 10. VPN using ssh 例えば、出先からプロバイダ経由で社内のサーバを利用するような場合、 通信路を暗号化したトンネルを構築すればデータを安全に利用できます。 まず、手元のクライアント及びサーバとなるマシンの /etc/ppp/ppp.conf に以下の設定を追加します。ssh コマンドはクライアントの root 権限で 動かしますので、ssh -l user officeserver でログインできる事を確認し てください。また、user が root 以外の場合は、サーバの /etc/group の network グループに user を登録する事を忘れないで下さい。 ---[ppp.conf の例]--- sloop: set timeout 0 set log phase chat connect lcp ipcp command set openmode passive set device "!ssh -l user officeserver exec /usr/sbin/ppp -direct loop-in" set dial set login set ifaddr 127.0.0.2 127.0.0.3 set server /var/tmp/loop "" 0177 loop-in: set timeout 0 set log phase lcp ipcp command allow mode direct --- 以下はクライアントでのオペレーション例です。この例では、最初の ppp(8) でプロバイダへ接続していますが、専用線を使う環境では省くことができ るでしょうし、ipfw(8) を利用してゲートウェイとして動作させることも できます。 % su # ppp -quiet -auto provider # eval `ssh-agent -c` # ssh-add # ppp -background sloop # suspend % execute your network application... % % # pppctl /var/tmp/loop close # eval `ssh-agent -k -c` # pppctl /var/tmp/provider 'close; quit all' --- [管理番号 1601] (最終更新 2001/04/18 02:12:12) Q. TDK LAK-CD021BX のように fe driver で動く PC Card ether device が FreeBSD 4.0-RELEASE で使えません。何故でしょうか。 A. FreeBSD 4.0-RELEASE では PC Card 周りが newbus 化されましたが、 この時点では fe driver はまだ newbus 化されておらず、PC Card では利用できませんでした。 2000年9月14日に fe driver も newbus 化され、FreeBSD 4.1.1-RELEASE 以降では PC Card でも使えるようになりました. --- [管理番号 1646] (最終更新 2002/08/24 06:22:40) Q. FireWall を構築しました。破棄 (deny) したパケットの log を取りたいので すが、どのようにすればよいでしょうか? A. 次のオプションを含めてカーネルを構築してください。 options IPFIREWALL_VERBOSE options "IPFIREWALL_VERBOSE_LIMIT=30" オプションの詳しい解説はファイル「/usr/src/sys/i386/conf/LINT」を読ん でください。 次に、rc.firewall に記述している ipfw のルールに 「log」を追加してくだ さい。 例えば次のようなルールを記述していたら、 $fwcmd add 65000 deny all from any to any 「deny」の次に「log」という引数を追加してください。 $fwcmd add 65000 deny log all from any to any 記述したら reboot してください。 成功したら次のようなメッセージが console に表示されます。 ipfw: 65000 Deny P:2 123.456.789.012 224.0.0.2 out via mx0 ipfw: 65000 Deny ICMP:9.0 123.456.789.012 224.0.0.1 in via mx0 以上は FreeBSD 3.4-RELEASE にて確認されました。 以下の参考文献を参照してお使いのシステムに当てはまるかどうか確認して下さい。 参考文献: ipfw(8) FreeBSDハンドブック 「6.4 ファイアウォール」 ファイル 「/usr/src/sys/i386/conf/LINT」 --- [管理番号 1676] (最終更新 2004/04/09 05:05:55) Q. 動作確認が取れている型式の NIC を導入しましたが、うまく認識しません。 A. 一般に原因としては、 (1)NIC が故障している (2)カーネルが対応していない (3)チップが対応していない という 3 つの可能性が考えられます。次の順序で確認をしてみてください。 (1) MS-Windows や MS-DOS で使用することが出来ますか? (出来る場合) → NIC は正常です。次の確認へ進んで下さい。 (出来ない場合)→ NIC が故障している可能性があります。 NIC のマニュアルなどを確認の上、問題がありそうなら、 製造元に確認されることをお勧めします。 (2) カーネルで NIC が使用できるようになっていますか? 確認は、起動時の User Configuration mode や dmesg で行なえます。 (ない場合)→ カーネルの再構築を行なって下さい。 (あった場合)→次の確認へ進んで下さい。 (3) NIC に搭載されているチップの型番は、どうなっていますか? これはかならず NIC を実際に見て確認してください。 同一型番であっても製作時期(ロット)が変われば使用されているチップが 異なることもあり得ます。もしチップの型番が異なるようであれば、あきら めて他の NIC を購入するか、patch を作りましょう。 --- [管理番号 1779] (最終更新 2001/10/19 21:29:42) Q. Web ページの更新のためにインターネットから安全に ftp で接続すべく、 ssh の port forwarding を使おうと思ってはまりました。パスワードは 暗号化に成功しますが、データ転送の暗号化がうまくできません。 A. クライアント側の OS によって以下のような方法があります。 1) Unix 普通の ftp(1) を ssh(1) の TCP port forwarding でちゃんと動かすのは 面倒なので、hsftp(1) か sftp(1) を使うのがいいでしょう。FreeBSD では、 どちらも Ports Collection の ports/ftp/hsftp 及び ports/ftp/sftp にあ ります。 hsftp(1) は、内部で ssh(1) と scp(1) のフロントエンドとして働き、コピー などのコマンドは、ftp(1) とほとんど同じです。ただし ssh-agent(1) など を使って、scp(1) をパスワード(パスフレーズ)の入力なしに実行できるよう にしておく必要があります。 sftp(1) も hsftp とほぼ同様ですが、リモート側に sftpserv というプログ ラムが必要になります。もし、リモート側にインストールされてなければ、 交渉して入れてもらうか自分で用意しましょう。なお、OpenSSH についてくる sftp-server(8) は SSH Communications Security 社 の ssh (いわゆる 「本家ssh」) バージョン2 についてくる sftp に対応するためのもので、 ports/ftp/sftp についてくる「sftp サーバ」(sftpserv) とは別物です。 FreeBSD 4.2R からは付属しますが互換性はありません。ややこしいのは、 どちらも「sftp」を名乗っていることです。 ftp と比べるとサポートされているコマンドは少ないですが、 sftp> help Supported commands are: ? help open close get mget put mput cd pwd ls dir mdir mkdir rmdir rename rm delete mdelete lcd exec quit exit bye binary ascii image version これぐらいのコマンドが使えます。これは、hsftp でもだいたい同じです。 また、ports/net/rsync を ssh 経由で使えばディレクトリの内容をまとめて アップデートすることができます。 % rsync -auzvC --delete --rsh=ssh . user@server:public_html 2) Java MindTerm を使えば,FTP-tunneling は簡単に出来ます。もちろん、Control port (21/tcp) だけでなく Data port (default:20/tcp) も SSH 経由になり ます。SCP の機能も入っているので,そちらを使ってもいいですが、Web ページ の更新には FTP が使えたほうが便利です。 v1.2.1 までのライセンスは GPL ですが,v2 以降が GPL になるかどうか決まっ ていないようです。v2 以降は SSH2 に対応します。2000年12月現在 v1.9.9pre2 が、バイナリのみ公開されています。 JAVA でインプリメントされているので,java1.1 以降に対応した JVM があれ ば OS は問いません。こちらでは,Linux, Windows, Macintosh で動作する ことを確認しています。 3) Windows 現在では MindTerm を使うのが一番簡単そうな方法ですが、TeraTermPro に ttssh を組み合わせた環境では、scp 機能がないため次のような方法が用いら れてきました。 3-a) 単純に scp をインストールして済ます。 3-b) Delegate を併用する方法です。 次の Web ページが TeraTerm + ttssh の使い方として、よくまとまってると 思います。この中で ftp については「書かないけど」の部分ですね。 以下に [FreeBSD-users-jp 49239] を元に説明します。hostA がローカル側、 hostB がリモートホスト、[a],[b] は Unix では 1024 以上の空いてる port ですが、Windows では 1024 の制限はないようです。以下の説明では [a]=21, [b]=8021 としています。 hostA> ssh -L [a]:localhost:[b] -L [b-1]:localhost:[b-1] hostB o メニューバー Setup → SSH Forwarding で以下のように設定 Local 21 to remote "localhost" port 8021 Local 8020 to remote "localhost" port 8020 o hostA から hostB に ttssh でログイン hostB> delegated -P[b] SERVER=ftp://localhost:21/ RELIABLE=localhost o hostB のプロンプトで delegated を実行 % delegated -P8021 SERVER=ftp://localhost:21/ RELIABLE=localhost hostA> ftp -p localhost [a] o hostA から localhost の port 21 に passive (PASV) モードで ftp 接続 Delegate は passive mode だと [b-1] にデータ転送用の port を用意して くれるようです。このスレッドには書いてませんが、セキュリティ的には delegated のオプションに TIMEOUT=900 ぐらいはつけておいたほうが吉だと 思います。 4) おまけ SSL 対応の wu-ftp です。 下記の URL に SSL 関係のリンク集がまとまっています。 あと、ssh ではないですが Zebedee というのもあります。 --- [管理番号 1788] (最終更新 2001/08/12 05:25:05) Q. corega PCI-TXL(VIA VT6102 + LSI L80225/B) が認識されません。 A. 4.1-RELEASE 以降なら標準でサポートされており GENERIC な kernel で認識され ます。 しかし、Windows 終了直後、電源を切らずに FreeBSD を起動し直すと MAC address が引けないという報告があります。 vr0: port 0xe000-0xe0ff mem 0xfa000000-0xfa0000ff irq 9 at device 10.0 on pci0 vr0: Ethernet address: 00:00:00:00:00:00 vr0: MII without any phy! このように表示される場合、電源を一度切り (ATX の場合は、主電源も一度切ってから) FreeBSD を立ち上げてみましょう。 vr0: port 0xe000-0xe0ff mem 0xfa000000-0xfa0000ff irq 9 at device 10.0 on pci0 vr0: Ethernet address: aa:bb:cc:dd:ee:ff miibus0: on vr0 ukphy0: on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto 4.0 や 3.x-RELEASE 以前で使うのであれば [FreeBSD-users-jp 53044] の patch を参考して if_vr.c, if_vrreg.h を修正しましょう。 (ただし、3.2-RELEASE 以前は未確認) [管理番号 58] で紹介されている三平氏の page に動作事例が紹介されています。 そちらを、参照されるのもいいでしょう。 --- [管理番号 1871] (最終更新 2001/04/18 02:12:14) Q. ADSL/xDSL を使い PPPoE nat+ppp で内部ネットワークから閲覧できない サイトがあります。どうすればいいですか? (対象 OS: FreeBSD 3.4-RELEASE〜FreeBSD 4.2-RELEASE) A. ADSL の場合パケットサイズが 1454 になっており通常の 1500 より少なく なります。原因として、そのサイトは「Path MTU discovery」機能をサポート していないと思われます。 解決策 1. tcpmssd モジュールを使い送り出す前に問題が発生しないようにする。 /ports/net/tcpmssd 2. 4-STABLE が利用可能なら Version2.3 以降の ppp にアップデートする (4.3-RELEASE 以降の ppp は Version2.3 です)。4-STABLE な CVS の ソースを取ってきてコンパイル。 3. 内部ネットワークのマシンの MTU を 1454 に変更する。 参考 URL --- [管理番号 1947] (最終更新 2002/02/14 00:39:59) Q. SSH1(プロトコル 1) と SSH2(プロトコル 2) とがあると聞きました。 どうちがうのでしょうか? また、どちらがより望ましいのでしょうか? A. SSH1(プロトコル 1) には プロトコル 1.3 と 1.5 があり、 基本的に RSA 公開鍵暗号を用いて認証を行い、通信の隠蔽のために 3DES や Blowfish などの暗号を用います。 通常、「ssh の RSA 認証」と呼ばれる場合には、プロトコル 1 を指す場 合が多いようです。OpenSSH のバージョンによってはこれを RSA1 などと 呼ぶ場合もあります。 SSH2(プロトコル 2) は以前まであった RSA の特許問題の回避を意図して DSA 公開鍵暗号を用いて認証を行うように実装されたものです。 現在では、RSA の特許問題が解消したので、プロトコル 2 の RSA 認証 というのも存在しています。 相違ですが、プロトコル 1 がデータが改竄されていないかどうかの チェックに単純な CRC を用いていたのに対して、プロトコル 2 では より強力な HMAC アルゴリズムによるチェックに改善されています。 また、プロトコル 2 では通信の隠蔽のための対称アルゴリズムを 選べるように設計されているので、理論的にはプロトコル 2 の 方が安全です。 FreeBSD 間でのみの通信が前提となるのなら SSH2 だけにしても問題は ありませんが、他の OS、ことに Windows 系の OS との組合せでは クライアントが SSH2 をサポートしてないということもあります。 注意しなければならないことは、プロトコル 1 と 2 の間には互換性が なく、プロトコル 2 しかサポートしない設定の sshd とはプロトコル 1 しかサポートしていないクライアント(TTSSH など)は通信ができない ということです。こういったことから、一概にどちらが良いかは 安全性ばかりでは断定はできません。 これらのプロトコル間の相違、実装の歴史、他 OS のクライアントの 実装状況については 以下のドキュメ ント群が参考になるでしょう。 また、アルゴリズムとプロトコルそして鍵の保管場所の相違などについて まとめると: [OpenSSH 2.3 ベース] 例えば 4.3-RELEASE, 4.4-RELEASE の ssh はこちらです。 アルゴリズム プロトコル 秘密鍵 公開鍵 RSA1 SSH1 ~/.ssh/identify ~/.ssh/identify.pub DSA SSH2 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub RSA SSH2 未サポート [OpenSSH 2.9 ベース] 4.5-RELEASE, 5.0-CURRENT の ssh はこちらです。 アルゴリズム プロトコル 秘密鍵 公開鍵 RSA1 SSH1 ~/.ssh/identify ~/.ssh/identify.pub DSA SSH2 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub RSA SSH2 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub という対応があります(2.3 ベースの OpenSSH のプロトコル 2 には RSA 認証はありません)。また、鍵のペアの生成の際に ssh-keygen(1) を使用する場合、ベースとなった OpenSSH のバージョンに依存して オプションが異なります。 詳しいことは ssh-keygen(1) の man page を参照してください。 --- [管理番号 1948] (最終更新 2001/08/12 05:25:04) Q. SSH プロトコル 1 の RSA 公開鍵暗号を使った認証で ssh(1) を運用したいの ですが、どうしたらよいでしょうか? A. サーバ側の設定は終っているものとして説明します。FreeBSD の場合、 /etc/rc.conf に sshd_enable="YES" という設定をいれておけば SSH1 の RSA 認証が使えます。 まずローカルホストで ssh-keygen(1) を実行し、認証鍵を作成します。 この際に秘密鍵を保護するためのパスフレーズが尋ねられます。 パスフレーズは自由に決められ、バージョンによってはパスフレーズなしでも 運用が可能ですが、他人が推測しにくく、できるだけ長いもの (数十文字でも構いません。)にしましょう。 % ssh-keygen Generating public/private rsa1 key pair. Enter file in which to save the key (/home/user/.ssh/identity): (リターン) Enter passphrase (empty for no passphrase): (パスフレーズを入力) Enter same passphrase again: (再度同じパスフレーズを入力) Your identification has been saved in /home/user/.ssh/identity. Your public key has been saved in /home/user/.ssh/identity.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@local これで秘密鍵が ~/.ssh/identity に、公開鍵が ~/.ssh/identity.pub に 保存されます(上記実行例は OpenSSH 2.9 ベースのもの、4.3-RELEASE などでは、OpenSSH 2.3 ベースなので多少出力は異なります)。 また、OpenSSH 2.9 ベースの FreeBSD なら、タイプを指定して % ssh-keygen -t rsa1 でも可能です。 次に slogin(1) ないしは ssh(1) でリモートホストにログインし、 相手先の ~/.ssh/authorized_keys に公開鍵 (ローカルにできた ~/.ssh/identity.pub) の内容をそのままコピーし追加します。 このとき、公開鍵一つにつき一行なので、余計な改行や空白を入れないよ うに注意します。もし ~/.ssh/authorized_keys がなければ新規作成しま す。理論上はこれは公開鍵なので人に見られても構いませんし、事実 ssh-keygen(1) の man page にもそのような記述がありますが、念のため % chmod 600 ~/.ssh/authorized_keys とパーミッションは落としておいたほうが無難です。 再度、ローカルから % slogin remote.hoge.ac.jp -l username とします。すると、今度は username@remote.hoge.ac.jp's password: でなく、 Enter passphrase for RSA key 'username@local.hoge.ac.jp': と表示されるはずです。ここでパスフレーズを入力するとログインできます。 ここでは相手側の /etc/master.passwd のパスワードエントリは *全く* 参照 されていません。パスワードとパスフレーズは全くの別物です。 また、パスフレーズも秘密鍵もいずれもネットワークを介してやりとりさ れていません。原理だけ説明すると、接続先の sshd(8) で生成した乱数を ~/.ssh/authorized_keys に入れておいた公開鍵で encrypt してクライアン トに送り、クライアントはこれを秘密鍵で decrypt して sshd に返します。 sshd はかえって来たものが最初に送った乱数と一致していればログインを 許可しているだけです。 まとめると、ホスト A、B、C があり、ホスト A から ホスト B、C に SSH プロトコル 1 の RSA 認証を行う場合は、 - ホスト A で ssh-keygen - ホスト A の ~/.ssh/identity.pub を ホスト B とホスト C の ~/.ssh/authorized_keys にコピーし、chmod 600。 とします。さらに ホスト B から ホスト C に RSA 認証を行いたいなら - ホスト B で ssh-keygen - ホスト B の ~/.ssh/identity.pub を ホスト C の ~/.ssh/authorized_keys に追加。 となります。つまりホスト C の ~/.ssh/authorized_keys には ホスト A とホスト B 両方の公開鍵 (identity.pub) が入っているわけです。 パスフレーズ以外では、ssh・scp・slogin の使い方は rsh・rcp・rlogin と ほぼ同じです。 [管理番号 1576] rsh・rlogin・rcp って何ですか。 を参考にして下さい。 毎回パスフレーズを入力しなくてもすむ方法については [管理番号 1578] で、 より便利な ssh の機能については [管理番号 1579] で解説しています。 --- [管理番号 1949] (最終更新 2001/08/12 05:25:04) Q. SSH プロトコル 2 の DSA 公開鍵暗号を使った認証で ssh(1) を運用した いのですが、どうしたらいいでしょうか? A. サーバ側の設定は終っているものとして説明します。FreeBSD の場合、 /etc/rc.conf に sshd_enable="YES" という設定をいれておけば SSH2 の DSA 認証が使えます。 まずローカルホストで ssh-keygen(1) を実行し、認証鍵を作成します。 この際に秘密鍵を保護するためのパスフレーズが尋ねられます。 パスフレーズは自由に決められ、バージョンによってはパスフレーズなしでも 運用が可能ですが、他人が推測しにくく、できるだけ長いもの (数十文字でも構いません。)にしましょう。 % ssh-keygen -d Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): (リターン) Enter passphrase (empty for no passphrase): (パスフレーズを入力) Enter same passphrase again: (再度同じパスフレーズを入力) Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@local などとします(なお、4.3-RELEASE などの FreeBSD の一部のバージョンで は、2.3 ベースの OpenSSH を採用しているため上記実行例は 多少異なります)。 あるいは OpenSSH 2.9 ベースの ssh を使用している FreeBSD でなら % ssh-keygen -t dsa などとします。 次に slogin(1) ないしは ssh(1) でリモートホストにログインし、 相手先の ~/.ssh/authorized_keys2 に公開鍵 (ローカルにできた ~/.ssh/id_dsa.pub) の内容をそのままコピーし追加します。 このとき、公開鍵一つにつき一行なので、余計な改行や空白を入れないよ うに注意します。もし ~/.ssh/authorized_keys2 がなければ新規作成しま す。理論上はこれは公開鍵なので人に見られても構いませんし、事実 ssh-keygen(1) の man page にもそのような記述がありますが、念のため % chmod 600 ~/.ssh/authorized_keys2 とパーミッションは落としておいたほうが無難です。 また、OpenSSH 2.9 ベースの ssh がインストールされている場合には、 プロトコル 2 の RSA も使えます。異なるのは % ssh-keygen -t rsa として認証鍵を作成し、あとは DSA 鍵の場合と同様に ~/.ssh/id_rsa.pub をリモートホストに転送し、~/.ssh/authorized_keys2 に追加します。 パスフレーズ以外では、ssh・scp・slogin の使い方は rsh・rcp・rlogin と ほぼ同じです。 [管理番号 1576] rsh・rlogin・rcp って何ですか。 を参考にして下さい。 毎回パスフレーズを入力しなくてもすむ方法については [管理番号 1578] で、 より便利な ssh の機能については [管理番号 1579] で解説しています。 --- [管理番号 1950] (最終更新 2001/08/12 05:25:04) Q. SSH2(SSH プロトコル 2) で RSA 認証を使いたいのですが、うまく行きま せん。 A. インストールされている ssh(1) によってはプロトコル 2 の RSA 認証は サポートされていない可能性があります。OpenSSH 2.3 ベースの ssh では これはサポートされていません(例えば、4.3-RELEASE 以前の FreeBSD にインストールされている標準の ssh など)。 インストールされている ssh(1) のバージョンを確認してください。例え ば、C シェルなら % ssh -v |& more などとすればバージョンが確認できます。もし OpenSSH_2.9 green@FreeBSD.org 20010503, SSH protocols 1.5/2.0 などという表示が得られたら、この ssh はプロトコル 2 の RSA を サポートしています。各種の設定を再度確認しましょう。 もしも、 SSH Version OpenSSH_2.3.0 green@FreeBSD.org 20010321 などという表示がでた場合には、プロトコル 2 の RSA は使えないので、 ports などからインストールしましょう。 --- [管理番号 1952] (最終更新 2001/10/22 01:18:34) Q. 外部ネットワークにあるサーバに socks 経由で接続しているセッションが、 ある程度の時間何もせずに放置しておくと切断されてしまいます。 A. socks はデフォルトでは 15 分間無通信状態のセッションをタイムアウトして セッションを切断してしまいます。man socks5 すると、SOCKS5_TIMEOUT という 環境変数でタイムアウトの時間を設定できることがわかります。上記環境変数を 設定するか、socks5.conf で下記のように設定することができます。 set SOCKS5_TIMEOUT 120 上記の設定を行うと、タイムアウトが 2 時間になります。 --- [管理番号 2125] (最終更新 2002/02/20 10:50:33) Q. ノートパソコンで /etc/rc.conf に xntpd_enable="YES" と書いて ntpd を起動すると、ntp server と正常に通信が行えず時刻が同期 しません。何か良い手はありませんか。 A. PC card NIC を認識して IP アドレスが割当てられる前に ntpd が 起動するために、正しい自分の IP アドレスではなく 127.0.0.1 か ら ntp server と通信しようとするのが原因です。 /etc/rc.conf 内の pccardd_flags に -z を追加すれば、PC card が 認識されるまで起動処理を待つようになり、正常に動作するように なります。 --- [管理番号 2224] (最終更新 2002/06/18 23:56:59) 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 は消えませんが、この様なアクセスを排除することが できます。 --- [管理番号 2247] (最終更新 2003/10/16 23:20:37) Q. フレッツ ADSL と ppp(8) を使ってインターネットに接続しています。 自動リダイアルモード (-ddial) で、PPPoE 接続が切れても、自動的に 再接続してくれません。 A. フレッツ ADSL の場合、 PPPoE 接続が切れたことを ppp で認識できない ことがあります。これを改善するためには、なんらかの方法で PPPoE 接続が 切断されたかどうかを調べる必要があります。 対策としては、以下の方法があります。 1. PPP 設定ファイルで、 "enable lqr" とする。 この場合、 ppp は、30 秒に 1 度、 PPPoE 接続先に LQR パケットを送る。 LQR パケットが連続して 5 回無視されたら (つまり、 PPPoE 接続先から 150 秒応答がなければ)、 ppp は自動的に PPPoE 接続を切断する。 2. 以下のようなスクリプトを書く。 「 PPPoE 接続先 (ifconfig で tun* のデバイスを見た時、 -> の 右側に書いてある IP アドレス ) に ping を飛ばす。 飛ばないようなら PPPoE 接続が切断されたとみなし、 ppp を再起動する。」 [FreeBSD-users-jp 63734] から始まるスレッドが参考になるでしょう。 --- [管理番号 2255] (最終更新 2002/08/24 06:22:44) Q. cron 等から起動されるバッチ処理の中で ssh を利用したいのですが、 ログインを自動化するにはどうすればよいですか? A. 二つの方法があります。 一つは、ホストベース認証を使う方法です。詳しい設定方法は [管理番号 1578] で紹介されていますので、そちらを参照して下さい。 もう一つは、パスフレーズの設定されていない秘密鍵を使う方法です。 [管理番号 1578] では、公開鍵認証で ssh-agent を使う方法を紹介していますが、 これは ssh-agent をあらかじめ起動しておく必要があるため、cron 等からの 利用には向いていません。 もちろん、秘密鍵ファイルにパスフレーズを設定しないということは パスワードを生でテキストファイルに保存しているのと同義ですから、 より厳重に鍵ファイルを管理しなければなりません。 そこで、万が一秘密鍵ファイルを盗まれた場合のリスクを軽減するため、 利用制限付きの認証鍵を作成する方法を紹介します。 以下の手順は、OpenSSH 2.9 と 3.4p1 で実行できることを確認しています。 1. パスフレーズのない認証鍵を新しく作成します。 % ssh-keygen -t rsa1 -N "" -f ~/.ssh/backup SSH2 を使う場合は '-t rsa1' を '-t dsa' や '-t rsa' に変えて下さい。 2. 作成された公開鍵ファイル ~/.ssh/backup.pub の先頭に「オプション」を 追加します。 % vi ~/.ssh/backup.pub ... % cat ~/.ssh/backup.pub command="/usr/bin/tar czf - hoge",no-pty,no-port-forwarding 1024 35 1472731(以下略) この例では、"/usr/bin/tar czf - hoge" というコマンドだけが実行可能な ように指定しています。オプションには他にも多くの種類があります。 詳しくは sshd(8) を参照して下さい。 3. 編集した公開鍵ファイルをリモートホストへ転送します。 % cat ~/.ssh/backup.pub | ssh remotehost 'cat >> .ssh/authorized_keys' これで、準備は完了です。 % ssh -q -i ~/.ssh/backup remotehost > backup.tgz とすると、リモートホストでの "/usr/bin/tar czf - hoge" の出力が ローカルホストの backup.tgz に格納されます。 また、万が一 ~/.ssh/backup の内容が洩れたとしても、 この鍵では "/usr/bin/tar czf - hoge" というコマンドしか実行できないので 被害を最小限に押えることができます。 なお、/etc/ssh/sshd_config に以下のように記述しておくと、 通常の root ログインを禁止しながら、command オプションを指定した 公開鍵認証のみを許可することができます。 ----------- PermitRootLogin forced-commands-only ----------- この機能はリモートバックアップ等を実行する場合に非常に便利です。 --- [管理番号 2341] (最終更新 2003/05/17 21:39:22) Q. 複数の ISP と契約し、FreeBSD をルータとして接続した時にルーティングが うまく行きません。 ISP0 ISP1 | | | | |if0 |if1 +-------------+ | FreeBSD Box | +-------------+ 上記のような構成で、Default Gateway を ISP0 側に設定しました。この状態 で外部ネットワークからアクセスすると ・if0 に振っている IP アドレスにアクセスすると問題なくつながります。 ・if1 に振っている IP アドレスにアクセスすると繋がりません。 Default Gateway を ISP1 側に設定して外部ネットワークからアクセスすると ・if0 に振っている IP アドレスにアクセスすると繋がりません。 ・if1 に振っている IP アドレスにアクセスすると問題なくつながります。 最初の構成に戻して tcpdump(1) で調べたところ外部ネットワークから if1 に 振っている IP アドレスにアクセスすると、戻りのパケットが if0 から送出し ているのが確認できました。どうやら、if1 のアドレスは ISP0 でフィルター されているようです。 if1 にアクセスされたときに if1 からパケットを送出するようにするにはどの ようにすれば良いのでしょうか 。 A. ipfw(8) の fwd をつかって下さい。Default Gateway が ISP0 に向いている場合、 # /sbin/ipfw fwd {ISP1 Gateway address} from {if1 のアドレス} to not {if0のネットワークアドレス} とすれば if1 へのアクセスの戻りのパケットは ISP1 に向かって送出される ようになります。 なお ipfw の使い方に関してはハンドブックや ipfw(8) などご参照下さい。 --- [管理番号 2567] (最終更新 2004/04/09 05:05:43) Q. ssh で remote login した jail で X アプリケーションを実行すると、 次のエラーが出て実行できません (FreeBSD 4.9-RELEASE で確認)。 % xterm X11 connection rejected because of wrong authentication. X connection to localhost:10.0 broken (explicit kill or server shutdown). A. 原因はよく分からないのですが、/etc/ssh/sshd_config に X11UseLocalhost no という設定を行なえば起動できるようです。 この変更に伴い、DISPLAY 環境変数が「localhost:10.0」から 「ホスト名:10.0」に変わります。