--- [管理番号 141] (最終更新 1999/02/17 23:58:45) Q. ~/.netrc ファイルの書き方がわかりません。man netrcも存在しません。 A. .netrc は man 1 ftp に記述されています。 このファイルのモードは 600(owner 以外が一切読み書きできない状態)にし てください。 --- [管理番号 192] (最終更新 1999/02/17 23:58:45) Q. httpd なら大抵 Virtual Host 機能はサポートされていますが、この機能を 備えた ftpd はありませんか? A. wu-ftpd-2.4.2-BETA-6 以降はサポートしているみたいです。 また、FreeBSD 2.2.2-RELEASE 以降に付属している ftpd は Virtual Host 機 能をサポートしているようです。 [FreeBSD-announce-jp 20] --- [管理番号 198] (最終更新 1999/02/17 23:58:45) Q. ftpサーバを立ち上げたんですが、クライアントからanonymous ftpでログ インして /pub/FreeBSD を覗きにいこうとすると "No such file or directory" とか "FreeBSD: Too many levels of symbolic links." と言われ て叱られてしまいます。何が悪いんでしょう。 A. ユーザ ftpで ftpサーバにログインしたときには ユーザ ftpのホームディ レクトリが全体のルートとして位置付けられます。例えば passwdファイルの 中で /var/ftp をホームディレクトリとして指定している場合は ここがスター ト地点となります。 この下に pub/というディレクトリがないと "No such file or directory" に なります。 また /var/ftp の下に pub/を作らずに 別のディレクトリへのリンクを作って いる場合は注意が必要です。というのは /var/ftp が / になるのでそれより 上には移動することが出来なくなります。例えば /var/ftp の下から ../../../usr/ftp/pub のようなリンクを作っても ..(1つ上) にはもう移動出 きません。/ディレクトリから ..に移動しても、もうそれより上は存在しない ので /のままです。つまり../../../usr/ftp/pub は /var/ftpの下の usr/ftp/pub へのリンクになります。それはきっと存在しないでしょうから "No such file or directory" となるでしょう。 また ../pub にリンクを張った場合は、結局のところ /pub を指しますので pubから pub、自分自身へのリンクになってしまいます。リンクがリンクを指 してそれがループしてしまうので "Too many levels of symbolic links." と言われます。 このように リンクではうまく行かない場合には 直接そのDiskを /var/ftp の下にmountしてしまうと楽です。 --- [管理番号 296] (最終更新 2004/04/09 05:05:18) Q. Anonymous FTP はどうやって立ち上げるのでしょうか? A. OS 付属の ftpd を使うなら、やり方は ftpd(8) に書いてあります。 また /stand/sysinstall で、 設定→ネットワーク→匿名 FTP と選んでいけば設定が可能です。 FreeBSD 4.7-RELEASE のデフォルトでは、inetd(8) は動いていますが、 ftpd などの各種デーモンは起動されないようになっています。 /etc/inetd.conf の #ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l #ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -l の部分の行頭の # を削り、 # kill -HUP `cat /var/run/inetd.pid` と inetd に SIGHUP を送って、inetd が /etc/inetd.conf を読み直す ようにします。 また、FreeBSD 5.x 以降においては、inetd(8) がデフォルトでは 起動されないようになっています。従って、sysinstall で inetd を 有効にするか、/etc/rc.conf に enable_inetd="YES" を追加した上で /etc/inetd.conf を修正してください。 --- [管理番号 428] (最終更新 1999/02/17 23:58:45) Q. wu-ftpd-2.4.2-beta15 を ports を利用してインストールし、anonymous FTP サービスの設定をおこないました。ところが、anonymous FTP で dir し てもファイルの UID が数字で出てしまいます。これをちゃんとユーザ名を表 示するようにするにはどうしたらよいでしょうか? ~ftp/etc/{passwd,group} は用意してあり、GID の方は問題なくグループ名が表示されます。また一般ユ ーザでの FTP 接続した場合はユーザ名も問題なく表示されます。 A. wu-ftpd に限らず、FTP の LIST コマンドや STAT コマンドで実行される /bin/ls コマンド (anonymous FTP の場合は ~ftp/bin/ls) は、ファイルのオ ーナの UID からユーザ名を参照するのに getpwnam(3) を使用します。BSD の getpwxxx(3) 関数はハッシュ化された DB を参照するので、これを用意する必 要があります。そのためには pwd_mkdb(8) コマンドを使います。 /etc/master.passwd の形式で ~ftp/etc/master.passwd を用意して、 $ /usr/sbin/pwd_mkdb -d ~ftp/etc ~ftp/etc/master.passwd を実行することで必要な DB ファイルが作成され、ユーザ名が参照されるよう になります。 --- [管理番号 429] (最終更新 1999/02/17 23:58:45) Q. anonymous FTP サービスにおいて、シンボリックリンク先のファイルやデ ィレクトリが参照できません。 A. ユーザ ftp のホームディレクトリを /home/ftp とした場合、anonymous FTP でアクセスすると /home/ftp に chroot され、/home/ftp がルートディ レクトリ (/) となります。このため、 - /home/ftp をルートディレクトリとするディレクトリツリーの外を参照する ことはできません - シンボリックリンク先が絶対パスとして指定されている場合、そのパスが /home/ftp を / としたパスになっていないと参照することができません 対処法は、/home/ftp 以下のファイルに対して相対パスでシンボリックリンク ファイルを作成するか、/home/ftp をルートディレクトリとした絶対パスを指 定してシンボリックリンクファイルを作成することです。 例) anonymous FTP ユーザから見て /foo/bar が /hoge を指すようにシンボリッ クリンクを作成する場合: 方法1. 絶対パスでリンク先を指定する $ cd /home/ftp/foo $ ln -s /hoge bar 方法2. 相対パスでリンク先を指定する $ cd /home/ftp/foo $ ln -s ../hoge bar 方法 1 の場合、作業の際に broken symbolic になるか、システムのルートデ ィレクトリ上のものを指してしまいます。方法 2 では作業中でもシンボリッ クリンク先が実体を指すので、設定ミスを起こしにくいでしょう。 --- [管理番号 430] (最終更新 1999/02/17 23:58:45) Q. anonymous FTP で、ユーザ ftp のホームディレクトリ以下にないディレク トリにアクセスしたいのですが? A. mount_null(8) を使用して、対象ディレクトリをユーザ ftp のホームディ レクトリ以下に null ファイルシステムマウントするとアクセスできます。 ユーザ ftp のホームディレクトリを /home/ftp とし、アクセスしたいディレ クトリを /some/where とした場合、 $ mkdir /home/ftp/where $ mount_null /some/where /home/ftp/where とすることで、アクセスしたいディレクトリ /some/where を anonymous FTP アクセスでは /where で参照できるようになります。 システム起動時に自動的にマウントするようにするには、/etc/rc.local で mount_null コマンドを実行させるか、/etc/fstab に、 /some/where /home/ftp/where null rw 0 0 を追加すればよいです。マウントオプションは必要に応じて適宜追加・変更し ます。 --- [管理番号 462] (最終更新 1999/02/17 23:58:45) Q. wu-ftpdをバージョンアップしたらアクセスコントロールがされなくなりまし た (ftpaccessが無視される)。 A. 最近の academ 版 wu-ftpd ではオプションが変更され、デフォルトでは ftpaccess を参照しないようになっています。参照するようにするには -a コ マンドライン引数を指定する必要があります。具体的には、/etc/inetd.conf では、 ftp stream tcp nowait root /usr/local/libexec/ftpd ftpd -al ^ の様に ``a'' を追加します (``l'' は syslog を利用してアクセスのログを 残すオプション)。これによりwu-ftpdの設定ファイルである、ftpaccessが参 照されるようになります。 デフォルトでは ``A'' オプションを指定したのと同じ、ftpaccessを参照しな い設定になっています。 詳しくは wu-ftpd の ftpd のマニュアルを参照してください。 --- [管理番号 598] (最終更新 1999/02/17 23:58:45) Q. システムに付属のftpdでanonymousFTPサーバにしました。ユーザanonymous では問題なくログインできますが、一般ユーザではログインできません。なぜ でしょう? /etc/ftpusersにはそのユーザのログイン名は載っていません。 A. ログインするユーザのシェルが/etc/shellsに書かれていないのではありま せんか?ログインするユーザは getusershell(3) が返す標準のシェル (=/etc/shellsに書かれているシェル)を持っていなければなりません。例えば bashを使っているのなら、bashのフルパス名(ex:/usr/local/bin/bash)が /etc/shellsにあるかどうか調べてみましょう。 --- [管理番号 711] (最終更新 1999/02/17 23:58:45) Q. FreeBSD が動いているホストに telnet や rlogin ではログインできるのですが, ftp でログインできません. どうして? A. /etc/shells ファイルに登録されていないシェルをログインシェルとして 使っているユーザは ftp でログインできません. /etc/ftpusers ファイルに登録されているユーザーやグループに属するユーザーも ftp でログインできません. 他にもありますので, 詳しくは ftpd(8) を参照してください. --- [管理番号 976] (最終更新 2001/11/17 19:15:36) Q. NAT (IP Masquerade) 環境なので、ncftp-2.4.3 を PASSIVE ftp mode で 使いたいのですが、うまく動きません。 A. [管理番号 1555] を見てください。 --- [管理番号 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 などとしてください。 --- [管理番号 1555] (最終更新 2001/11/17 19:15:35) Q. FTP の passive (パッシブ) モードの使い方を教えてください。 A. ファイアウォールが存在する場合、その設定によっては active モードでは 外部の FTP サーバを利用できないことがあります。このようなとき、FTP クライアントの設定を passive モードに変更してやると、接続できるように なるかもしれません。 - FreeBSD の ftp(1) コマンドの場合 1. ftp コマンドの起動時に -p オプションをつける 2. pftp (/usr/bin/pftp) を使う。ftp -p と全く同じ 3. ftp> プロンプトで passive と打つ (もう一度 passive と打つと active モードに戻る) 4. 環境変数 FTP_PASSIVE_MODE を設定する 例: % setenv FTP_PASSIVE_MODE YES (csh・tcsh の場合) $ export FTP_PASSIVE_MODE=YES (sh・bash の場合) 環境変数 FTP_PASSIVE_MODE は、fetch(1) コマンドに対しても 有効なので、ports 利用時に指定すると便利です。→ [管理番号 443] なお、FreeBSD 4.0-RELEASE 以降ではデフォルトで FTP_PASSIVE_MODE=YES となります (これは /etc/login.conf に記述されています)。 - ncftp の場合 ncftp では、サイトごとの設定で passive モードに設定し、 なおかつ、~/.ncftp/prefs 内で ftp-mode 1 と書く必要が あります。 各サイトごとの設定変更は次の通りです。 1. ncftp のプロンプトから [open] コマンドを実行 2. 希望のサイトをカーソルキーで選択 3. [/ed] と打ち込んで、Edit モードへ移行 4. [K] キーを押して ``K Can use passive FTP:'' を選択 5. [Space] キーで ``Yes'' に変更し、[Enter] キーで選択 6. [X] キーを押して編集を終了 この変更は保存されます。あとは、そのまま [Enter] キーを押せば passive モードで接続できます。 余談. 多くの Web ブラウザや Proxy サーバも、FTP サーバにアクセスすると きは、デフォルトで passive モードを使うようになっています。 --- [管理番号 2073] (最終更新 2001/11/17 19:15:36) Q. FTP の active/passive モードの仕組みを教えてください。 A. active/passive mode の仕組みを、もう少し具体的に書くと、 FTP というプロトコルは、TCP コネクションを2本使います (HTTP や POP3 では TCP コネクションを1本しか使いません)。 例えば ftp(1) コマンドで FTP サーバに接続すると、 FTP クライアント FTP サーバ ---- 接続 (コマンドコネクション)----> USER ------ コマンド用コネクション ------> PASS ------ コマンド用コネクション ------> という流れでユーザ認証を行ないます (USER・PASS というのは FTP プロトコルの中身です)。 ここで (ftp のプロンプト上で) ls とタイプし、ファイル一覧を 取得しようとすると、 FTP クライアント FTP サーバ PORT ------ コマンド用コネクション ------> LIST ------ コマンド用コネクション ------> <---- 接続 (データコネクション)------ <----- データ用コネクション(1) ------ ファイル一覧送信 と、PORT コマンドで FTP クライアントの IP アドレスとポート番号の 情報を送ります。すると FTP サーバが指定のホスト・ポートに接続し、 データ (ファイル一覧) をクライアントに送ります。引続きファイルを get すると、同様に FTP クライアント FTP サーバ PORT ------ コマンド用コネクション ------> RETR ------ コマンド用コネクション ------> <---- 接続 (データコネクション)------ <----- データ用コネクション(2) ------ ファイル内容送信 となります。FTP サーバが *能動的に* データコネクションを 張りますので、これを active (アクティブ) モード といいます。 これは、FTP サーバが FTP クライアントの動いているホストに接続 するので、ファイアウォールのような環境の中からでは取得できない ことがあります (ファイアウォールの形態次第ですが)。 一方、passive モードは active モードの逆で、ファイル一覧を 取得しようとすると FTP クライアント FTP サーバ PASV ------ コマンド用コネクション ------> LIST ------ コマンド用コネクション ------> ----- 接続 (データコネクション)-----> <----- データ用コネクション --------- ファイル一覧送信 というふうに、FTP クライアント側からFTP サーバ側に接続し、 データ用コネクションを確立します。FTP サーバが *受動的に* データコネクションを受けるので、passive モードと呼びます。 余談. FTP プロトコルについて詳しく知りたければ、RFC 959 を ご覧下さい。デバッグモードで ftp コマンドを実行しつつ (-d オプションを付けて起動する)、適時 % netstat -a -f inet としてポートの状態を見ると、理解しやすいかもしれません。