2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

vsftpdをソースで使う!

FTP鯖モジュールは、数々あれどいつも思うのは、個々に設定が全然違うんだなぁ~と切実に思う。
今回説明するvsftpdは、セキュリティに十分配慮したFTPのようだ。俺は能書きを読まずに取りかかる方だから、インストール設定を見ただけでもラッパーは勿論アクセス制限がかなり細かく設定できるようだ。設定の方法も比較的簡単なので初心者でも取っつきやすいかも知れない。 wu-ftpdやProFTPDを使ってきたけど、このFTP鯖は一番セキュリティに対しては強力かも知れない。
各ディストリビューションにも標準でバイナリが有るようなので、俺のようにわざわざソースをコンパイルする必要も無いかも知れない。


1.インストール
オフィシャルサイトは、 ここ 2006年4月現在では、vsftpd-2.0.4.tar.gz が最新であった。

1)ソースゲット&展開
jerry:# cd /usr/local/src
jerry:/usr/local/src# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.4.tar.gz
jerry:/usr/local/src# tar zxvf vsftpd-2.0.4.tar.gz
jerry:/usr/local/src# chown -R root.root vsftpd-2.0.4
jerry:/usr/local/src# cd vsftpd-2.0.4

この時、vsftpdをスタンドアローンで動かすために、TCP_Wappersを有効にしたい場合は、
jerry:/usr/local/src/vsftpd-2.0.4# vi builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS → #define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

赤の文字の部分のように訂正してから、makeする。

2)コンパイル&インストール
jerry:/usr/local/src/vsftpd-2.0.4# make
jerry:/usr/local/src/vsftpd-2.0.4# mkdir /usr/local/man/man5
jerry:/usr/local/src/vsftpd-2.0.4# make install

3)設定ファイルコピー&必要な空ディレクトリの作成
jerry:/usr/local/src/vsftpd-2.0.4# cp vsftpd.conf /etc/
jerry:/usr/local/src/vsftpd-2.0.4# mkdir /usr/share/empty


2.vsftpd.confファイルの設定ファイルの編集
手っ取り早くローカルユーザを使った認証でvsftpdを使う設定を紹介。

jerry:/usr/local/src/vsftpd-2.0.4# vi /etc/vsftpd.conf

# 匿名ユーザのアクセスは許可しない(但し、デフォルトでは許可)。
anonymous_enable=NO

# ローカルユーザのアクセス許可の設定。
local_enable=YES

# 書き込みコマンドの使用許可。
write_enable=YES

# ローカルユーザumaskの設定(022に設定して、パーミッションが755になるようにする)。
local_umask=022

# ディレクトリメッセージの許可。これが許可されると、message_file=xxxxxxx (デフォルト: .message ) 指定したメッセージをそのディレクトリ一覧を表示させたときにレスポンスとして定義できる。
dirmessage_enable=YES

# アップロードやダウンロードログが採れる、ログは /var/log/vsftpd.log へ出力される。
xferlog_enable=YES

# データコネクションポートの設定。20番に固定する場合は、YES。
connect_from_port_20=YES

# xferlog_enable=YESでこれを設定することによりかなり詳細なログを出力することが出来るが、俺の場合は必要ないのでNOにした。
xferlog_std_format=No

# アスキーモードでアップロード許可。
ascii_upload_enable=YES

# アスキーモードでダウンロード許可
ascii_download_enable=YES

# FTPバナーを指定。FTPログイン時にバナー文字を表示。
ftpd_banner=Welcome to kozupon.com FTP service.

# ユーザアクセス制限(ユーザ領域より他にはアクセスさせない)
#chroot_list_enable=YES            ← ここでは必要ないのでコメント

# アクセス制限をかけるユーザのリスト
#chroot_list_file=/etc/vsftpd.chroot_list  ← ここでは必要ないのでコメント

# ディレクトリの削除を許可。
ls_recurse_enable=YES

# PAMサービスで使用するサービス名の設定
pam_service_name=vsftpd

# 単独でvsftpdを実行するか、inetdスーパーデーモンから実行するかの設定。NOでinetdスーパーデーモンから実行する。
listen=NO

# TCP_WRAPPERを許可(新しいバージョンでは、listen=NOにすれば自動的にラッパーモードになり、このオプションは必要ないかも。エラーが出たらコメントして欲しい)。
tcp_wrappers=YES

注 : = の前後はスペースを挿入してはいけない。


3.起動設定
俺の場合、vsftpd.confの記述でlisten=NOにしたのでinetdスーパーデーモンから実行するようにしている。したがって、

jerry:/usr/local/src/vsftpd-2.0.4# vi /etc/inetd.conf
ftp   stream    tcp    nowait    root    /usr/sbin/tcpd /usr/local/sbin/vsftpd

とした。これで、ラッパーも効くはずである。


4.動かしてみる

jerry:/usr/local/src/vsftpd-2.0.4# ftp localhost
Connected to localhost.localdomain.
220 Welcome to jerry FTP service.
Name (localhost:mity): mity
331 Please specify the password.
Password:*******
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -al
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 3 1000 1000 4096 Oct 12 2005 .
drwxrwsr-x 4 0 50 4096 Apr 05 06:14 ..
-rw——- 1 1000 1000 309 Apr 13 00:28 .bash_history
-rw-r–r– 1 1000 1000 567 Sep 10 2005 .bash_profile
-rw-r–r– 1 1000 1000 1834 Sep 10 2005 .bashrc
drwx—— 2 1000 1000 4096 Oct 12 2005 .ssh
226 Directory send OK.
ftp> cd /
250 Directory successfully changed.
ftp> ls -al
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 21 0 0 4096 Sep 10 2005 .
drwxr-xr-x 21 0 0 4096 Sep 10 2005 ..
drwxr-xr-x 2 0 0 4096 Apr 28 05:47 bin
drwxr-xr-x 3 0 0 4096 Feb 15 05:23 boot
lrwxrwxrwx 1 0 0 11 Sep 10 2005 cdrom -> media/cdrom
drwxr-xr-x 11 0 0 24576 Mar 14 07:09 dev
drwxr-xr-x 58 0 0 4096 Apr 28 06:40 etc
drwxrwsr-x 4 0 50 4096 Apr 05 06:14 home
drwxr-xr-x 2 0 0 4096 Sep 10 2005 initrd
lrwxrwxrwx 1 0 0 27 Sep 10 2005 initrd.img -> boot/initrd.img-2.6.8-2-386
drwxr-xr-x 8 0 0 4096 Apr 28 05:47 lib
drwxr-xr-x 2 0 0 49152 Sep 10 2005 lost+found
drwxr-xr-x 4 0 0 4096 Sep 10 2005 media
drwxr-xr-x 2 0 0 4096 Dec 15 2004 mnt
drwxr-xr-x 2 0 0 4096 Sep 10 2005 opt
dr-xr-xr-x 43 0 0 0 Mar 14 16:14 proc
drwxr-xr-x 3 0 0 4096 Apr 07 00:55 root
drwxr-xr-x 2 0 0 4096 Apr 28 05:47 sbin
drwxr-xr-x 2 0 0 4096 Sep 10 2005 srv
drwxr-xr-x 9 0 0 0 Mar 14 16:14 sys
drwxrwxrwt 4 0 0 4096 Apr 28 07:31 tmp
drwxr-xr-x 12 0 0 4096 Sep 10 2005 usr
drwxr-xr-x 13 0 0 4096 Sep 10 2005 var
lrwxrwxrwx 1 0 0 24 Sep 10 2005 vmlinuz -> boot/vmlinuz-2.6.8-2-386
226 Directory send OK.
ftp> by
jerry:/usr/local/src/vsftpd-2.0.4#

以上、バッチリである。

以上

コメント