FreeBSD QandA ジャンル別一覧: ftpについて
[管理番号 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 以降はサポートしているみたいです。
<URL:http://www.westnet.com/providers/multi-wu-ftpd.txt>
また、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 などとしてください。
- [管理番号 67] Q.RFC の和訳 (日本語訳) はありますか?A.RFC ならびに Inter...
- [管理番号 200] Q.SOHO / 家庭内LAN を構築しようと考えているのですが、IPアドレスは...
- [管理番号 409] Q.電子ブック (8cm CD) や EPWING 規格 (12cm CD) な...
- [管理番号 553] Q.「RFC 何番を読め」と言われたんですが、RFC とか Internet D...
- [管理番号 699] Q.Limited broadcast ってなんですか?A.宛先が 255.25...
- [管理番号 815] Q.POP プロトコルと POP3 プロトコルって違うんですか?A.「POP プ...
- [管理番号 859] Q.FreeBSD で RADIUS サーバを立てようと思っているのですが、参考...
- [管理番号 1311] Q.(bind-4.x.x で使用していたゾーンファイルのままで)BIND-8....
- [管理番号 1547] Q.wget で HTTP や FTP 経由で再帰的にファイルを取得したいのです...
- [管理番号 2073] Q.FTP の active/passive モードの仕組みを教えてください。A...
[管理番号 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
としてポートの状態を見ると、理解しやすいかもしれません。
- [管理番号 67] Q.RFC の和訳 (日本語訳) はありますか?A.RFC ならびに Inter...
- [管理番号 200] Q.SOHO / 家庭内LAN を構築しようと考えているのですが、IPアドレスは...
- [管理番号 409] Q.電子ブック (8cm CD) や EPWING 規格 (12cm CD) な...
- [管理番号 553] Q.「RFC 何番を読め」と言われたんですが、RFC とか Internet D...
- [管理番号 699] Q.Limited broadcast ってなんですか?A.宛先が 255.25...
- [管理番号 815] Q.POP プロトコルと POP3 プロトコルって違うんですか?A.「POP プ...
- [管理番号 859] Q.FreeBSD で RADIUS サーバを立てようと思っているのですが、参考...
- [管理番号 1311] Q.(bind-4.x.x で使用していたゾーンファイルのままで)BIND-8....
- [管理番号 1547] Q.wget で HTTP や FTP 経由で再帰的にファイルを取得したいのです...
- [管理番号 2073] Q.FTP の active/passive モードの仕組みを教えてください。A...