インストールが終了したら、anonymous FTP の設定をする前に、普通に FTP ができる
ようにします。
まずは、クライアントからの FTP の要求が来たときに、wu-ftpd の ftpd が起動する
ように /etc/inetd.conf ファイルを編集します。wu-ftpd の ftpd は
/usr/sbin/in.ftpd としてインストールされるため、/etc/inetd.conf ファイルの
ftpd のパスを /usr/sbin/in.ftpd に変更します。例として、FreeBSD の場合は、
変更前
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
変更後
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l -a
のように変更します。ftpd のオプションは man ftpd で確認して下さい。
次に、inetd の変更を更新させるため、inetd を再起動します。次のようにして
inetd のプロセス番号を調べて、kill コマンドで HUP シグナルを送ります。
% ps ax | grep inetd
189 ?? Is 0:00.18 inetd
97812 p4 D+ 0:00.00 grep inetd
# kill -HUP 189
ここで一度、ftp コマンドを使用して、wu-ftpd が動くか確認してみます。
FTPサーバのホスト名を hogehoge とすると、
% ftp hogehoge
Connected to hogehoge
220 hogehoge FTP server (Version wu-2.6.0(5) Mon Nov 8 00:11:49 JST 1999) ready.
Name (hogehoge:sakai):
のように表示されれば wu-ftpd が動いています。
Anonymous(匿名)で FTP を使用するには、FTP用のアカウントを作成する必要が
あります。Vine Linux 1.1 では、デフォルトで
ユーザ ftp ユーザID 14
グループ ftp グループID 50
が作成されているので、新しく作成する必要はありません。例として、FreeBSD で
上記のユーザとグループを作成する場合について説明します。
まず、/etc/group ファイルを編集し、以下の行を付け加えます。
# vi group
以下の行を追加
ftp:*:50:ftp
次に vipw を実行し /etc/passwd ファイルを編集します。ユーザ ftp のホーム
ディレクトリ(Anonymous FTP でログインするディレクトリ)を、ここでは
/home1/ftp とします。環境に応じて変更してください。
以下の行を付け加えます。ログインシェルは必要無いため、
FreeBSD では /sbin/nologin 、Vine Linux では /bin/true として、実効性の無い
シェルを指定します。
# vipw
以下の行を追加
ftp:*:14:50::0:0:Anonymous FTP User:/home1/ftp:/sbin/nologin
以上で Anonymous FTP 用のアカウント ftp の作成は終了です。
次に、Anonymous FTP 用のアカウント ftp のディレクトリ(Anonymous FTP でログイン
するディレクトリ)を作成し、オーナーとアクセス権を設定します。
# cd /home1
# mkdir ftp
# chown ftp.ftp ftp
# chmod 555 ftp
次に、ftp ディレクトリの下に、ネットワークで公開するファイルを置くディレクトリ
pub を作成します。また、オーナーとアクセス権を変更します。
# cd /home1/ftp
# mkdir pub
# chown ftp.ftp pub
# chmod 775 pub
次に、ユーザが接続した時に使用するコマンドを格納するディレクトリ bin を作成
します。また、オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir bin
# chown root.root bin
# chmod 111 bin
また、この bin ディレクトリに ls , tar , compress , gzip をコピーし、
アクセス権を設定します。
# cd /home1/ftp/bin
# cp /bin/ls .
# cp /bin/tar .
# cp /usr/bin/compress .
# cp /usr/bin/gzip .
# chmod 111 *
次に、ftp アカウントの設定ファイルを格納するディレクトリ etc を作成し、
オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir etc
# chown root.root etc
# chmod 111 etc
この etc ディレクトリには passwd ファイルと group ファイルを置きます。
これらのファイルは、ftpデーモンが ftp ディレクトリにあるファイルの所有者や
グループを表示するために参照するものです。
/etc/passwd ファイル、/etc/group ファイルをコピーして、root と ftp のエントリ
のみ残して、表示する必要の無いアカウントは削除します。
# cd /home1/ftp/etc
# cp /etc/passwd .
# vi passwd
root と ftp のエントリのみ残して、後は削除
root と ftp のエントリは、ホームディレクトリを / 、シェルは /bin/true 等の実効性の無いシェルを指定
# cp /etc/group .
root と ftp のエントリのみ残して、後は削除
# chmod 444 *
次に、bin ディレクトリに格納してあるコマンドを実行するのに必要な共有ライブラリ
を格納するディレクトリ lib を作成し、オーナーとアクセス権を設定します。
# cd /home1/ftp
# mkdir lib
# chown root.root lib
# chmod 111 lib
bin ディレクトリに格納してあるコマンドの共有ライブラリの依存関係を知るには、
以下のようにします。
% ldd /bin/ls
libwcsmbs.so.0 => /lib/libwcsmbs.so.0 (0x40007000)
libc.so.6 => /lib/libc.so.6 (0x4000b000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
これらの共有ライブラリを lib ディレクトリにコピーします。
# cd /home1/ftp/lib
# cp /lib/libwcsmbs.so.0 .
# cp /lib/libc.so.6 .
# cp /lib/ld-linux.so.2
以上で、とりあえず anonymous FTP の設定は終了です。ここで一度 anonymous で ftp
してみます。FTPサーバのホスト名を hogehoge とします。
% ftp hogehoge
Connected to hogehoge
220 hogehoge FTP server (Version wu-2.5.0(1) Wed Aug 25 14:13:56 EDT 1999) ready.
Name (hogehoge:sakai): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
これで anonymous で ftp ができるようになりました。ls コマンド等で
ディレクトリの中身が表示されることを確認しておきます。
ただ、現在は何故か ls でディレクトリの所有者やグループが番号で表示されて
しまい、名前では表示されません。原因を解明中です。
例えば、外部の人間に対して、アカウントを与えないが、ファイルの
アップロードのみを許可したい場合を考えます。
この場合は、以下のような設定を行います。
- ゲストユーザアカウントを発行し、外部からのファイルのアップロードを認める
- アップロードはゲストユーザのホームディレクトリにのみ許可する
- ゲストユーザには、実効シェルの使用を認めない
- ゲストユーザには、/etc ディレクトリにあるシステム情報を公開しない
まず、ゲストユーザとして、以下のようなアカウントを作成します。
ユーザ guest (UIDは任意)
グループ guest (GIDは任意、FreeBSDでは Gid 31 として既存)
ホームディレクトリ /home1/guest/./ (/home1/guest を仮想 / ディレクトリとする)
シェル /bin/true (実効性の無いシェル)
まず、ゲストユーザが所属するグループの作成を行います。
# vi /etc/group
以下の行を追加(Vine Linux)
guest::31:guest
次に、ゲストユーザアカウントを作成します。
# vipw
以下の行を追加(Vine Linux)
guest:*:3000:31:Guest User:/home1/guest/./:/bin/true
ゲストユーザアカウントのパスワードを設定します。
# passwd guest
/home1/guest ディレクトリを仮想 / (root) ディレクトリとするため、
ホームディレクトリを /home1/guest/./ とします。
また、実効性の無いシェル /bin/true を /etc/shells に登録しておきます。
あとは、anonymous FTP サーバと同じように設定を行います。
/home1/guest ディレクトリ以下に pub , etc , bin , lib ディレクトリを作成し、
必要なファイルをコピーし、必要に応じて編集し、適切なアクセス権とオーナーを
設定します。