FTPサーバーの構築

この記事は1年以上前に投稿されたものです。
内容が古い可能性がありますのでご注意ください。

ここではFTPサーバーを構築します。

FTPの機能自体はOpenSSHサーバーがSFTPとして提供していますが、対応していないFTPクライアントでは接続出来ないという難点があります。また、この記事を掲載している当ブログ(WordPress)は自動アップグレードやプラグインの自動インストール機能などがありますが、その際にFTPサーバーかSSH2が必要となりますので、改めて導入を検討します。

FTPサーバーとしては有名なものとして「ProFTPD」と「vsftpd」がありますが、ここではvsftpdを導入します。

【2010.5.20追記】PASVモードに関する設定の記載を追加いたしました。

vsftpdの構築

1.パッケージのインストール

デフォルトではtaskselコマンドでもFTPサーバーはインストールされませんので、aptitudeでインストールします。

[html]sudo aptitude update
sudo aptitude install vsftpd[/html]

2.vsftpdの設定

vsftpdの設定ファイルは/etc/vsftpd.confです。ここでは

  • 複数のローカルユーザーでの利用可
  • ログイン出来るユーザーを制限する
  • ローカルユーザーに対してはchrootを使用
  • Anonymous FTP(匿名FTP)は禁止
  • 昨今の状況を踏まえ、FTP over SSLを導入する
    (この設定については後述するSSLの記事にて説明します)

上記の内容を踏まえて設定を行います。vsftpd.confにはそれぞれの設定の意味が丁寧に記載されていますので分かりやすいかと思います。

[html]sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
#↑バックアップ作成

sudo nano /etc/vsftpd.conf

# Allow anonymous FTP? (Beware – allowed by default if you comment this out).
#anonymous_enable=YES
anonymous_enable=NO
#↑匿名FTPの利用を禁止する

# Uncomment this to allow local users to log in.
local_enable=YES
#↑コメントを外してローカルユーザーに対してFTP接続を許可する

# Uncomment this to enable any form of FTP write command.
write_enable=YES
#↑コメントを外してFTPクライアントからの書き込みを許可する
※ファイルのアップロード、名前の変更、削除等が可能になります

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd’s)
local_umask=022
#↑ローカルユーザーに対してのumaskの設定値を022に変更する
※アップロード後のパーミッションはファイルが「644」、ディレクトリが「755」になります

# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
#↑コメントを外してvsftpdのログを有効にします

# If you want, you can have your log file in standard ftpd xferlog format
#xferlog_std_format=YES
xferlog_std_format=NO
#↑ログをvsftpd形式で記録するようにします(YESは標準形式で保存。NOでvsftpd形式で保存します。)

# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command “SIZE /big/file” in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
#↑上記2つのコメントを外して、アスキーモードでのアップロードおよびダウンロードを有効にします

# You may fully customise the login banner string:
ftpd_banner=FTP server.
#↑コメントを外して=の右側に半角英数字で文字列を記入します
※FTPサーバーの情報を表示しないようにします。

# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
#↑コメントを外して全てのローカルユーザーに対してのchrootを有効にします
※ローカルユーザーは自身のホームディレクトリより上位の階層には移動出来なくなります

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
#↑chrootを有効にするユーザーを指定出来るようになります。[/html]

※上記の「chroot_local_user=YES」が有効になっていると、「chroot_list_enable=YES」に記載されているユーザーのみ、chrootが適用されなくなります。

[html]# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#↑chroot_list_enableを適用させるユーザー名を記載したファイルを指定します。

# You may activate the “-R” option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as “ncftp” and “mirror” assume
# the presence of the “-R” option, so there is a strong case for enabling it.
ls_recurse_enable=YES
#↑コメントを外し、FTPクライアントからディレクトリごと削除出来るようにします

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# This option specifies the location of the RSA key to use for SSL
# encrypted connections.
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#↑デフォルトの設定では、FTP over SSLが有効になっています。

#ファイルの末尾に以下の内容を追記して下さい。
userlist_enable=YES
userlist_deny=NO
#↑FTPでログイン出来るユーザーを制限します。「userlist_enable=YES」で「vsftpd.user_list」を使用するようにし、「userlist_deny=NO」でvsftpd.user_listに記載されたユーザーのみFTPでログイン出来るようになります。

pasv_enable=NO
#pasv_enable=YES
#pasv_min_port=4000
#pasv_max_port=4029
#pasv_addr_resolve=YES #pasv_addressをドメイン名で指定出来るようにする(DNSにドメインが登録されている場合のみ)
#pasv_address=ドメイン名
#↑PASVモードを有効にする場合は、上記5つのコメントを外して有効にして下さい。今回は自宅LAN内からのみFTP接続を許可しているのでPASVモードは不要のため、コメントアウトしています。
※PASVモードは主にルーターを挟んだファイアウォール越しにFTP接続を行う際に必要です。
※2010.5.20追記:pasv_addr_resolve=YESの一行を追加致しました。
pasv_address=ドメイン名 で指定する場合にこの指定が必要になります。それに合わせて、コメント行を4行→5行に変更いたしました。失礼致しました。

tcp_wrappers=YES
#↑TCP Wrappersによるアクセス制限を有効にします[/html]
(TCP Wrappersについては「サーバーのセキュリティを強化する:その1」をご参照下さい)

(2010.5.20追記)上記の設定でFTPサーバーに接続する場合は、FTPクライアントソフトの設定で「PASVモードでの接続を無効にする(FFFTP)」や「ポート番号21を 明示する(FileZilla)」を行って下さい。

(2010.5.20追記)当自宅LAN環境では、クライアントはNAPT対応ルーターを挟んでいますので、自宅サーバーにはファイアウォール越しにアクセスすることになります。ですので、当自宅LAN環境においてはPASVモードを有効にする必要がありましたorz
当サーバーの設定は、正しくは以下の通りになります(自宅サーバーと自宅LAN内クライアントの間にルーターが挟まっている場合のみで、内部からの接続限定)

[html]#pasv_enable=NO
pasv_enable=YES
pasv_min_port=4000
pasv_max_port=4029
pasv_addr_resolve=NO #名前解決は行いません(内部からの接続限定なので)
pasv_address=自宅サーバーのプライベートIPアドレス[/html]

(2010.5.20追記ここまで)

[html]force_dot_files=YES
#↑ドット(.)ファイルをデフォルトで表示します

ssl_enable=YES
#↑FTP over SSLを有効にします

force_local_logins_ssl=NO
force_local_data_ssl=NO
#↑YESでFTP over SSLでの接続のみ許可します。NOで通常のFTPでも接続出来るようになります。(記述が無い場合、YESとして扱われます)

#vsftpd.confを保存します

#vsftpdを再起動します
sudo /etc/init.d/vsftpd restart[/html]

3.その他の設定について

chrootを適用しないユーザーのリストファイルを作成します。

[html]sudo nano /etc/vsftpd.chroot_list
xxxxxxxxxxxx #←chrootを適用しないユーザーを1行に1つずつ記述します
#vsftpd.chroot_listを保存します[/html]

次にログインを許可するユーザー定義ファイルを作成します。

[html]sudo nano /etc/vsftpd.user_list
xxxxxxxxxxxx #←ログインを許可するユーザーを1行に1つずつ記述します
#vsftpd.user_listを保存します

chown root:root /etc/vsftpd.user_list
chmod 600 /etc/vsftpd.user_list
#↑所有者をrootにし、rootのみファイルの読み書きを許可します[/html]

※上記2ファイルは、内容を変更すると即座に反映されます。vsftpdを再起動する必要はありません。

最後にTCP Wrappersについてですが、サー バーのセキュリティを強化する:その1の時点で自宅LAN内にしかサービスを許可しないようにしています。外部にFTPサーバーを公開される場合は/etc/hosts.allowを編集して下さい。

[html]sudo nano /etc/hosts.allow
#ファイルの末尾に下記内容を追加
vsftpd: ALL[/html]

※TCP Wrappersの内容変更は即座に反映されます。vsftpdを再起動する必要はありません。

また、外部に公開される場合はルーターのポートフォワーディングの設定およびiptablesのポートを開放する必要があります。

ルータに関しては後述する「アドレス変換設定」にて21番およびPASVに使用するポート(上記設定では4000~4029番)を自宅サーバーにフォワーディングして下さい。

iptablesに関しては、「ファイアウォールの設定」で構築したiptablesスクリプトにおいて下記該当箇所のコメントを外し、PASVについては開放するポート番号に書き換えて下さい。

[html]sudo nano /etc/network/if-pre-up.d/iptables

$IPTABLES -A INPUT -p tcp –dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 4000:4029 -j ACCEPT

#iptablesを保存したらネットワークを再起動します
sudo /etc/init.d/networking restart[/html]

参照サイト様

「FTPサーバーの構築」への2件のフィードバック

  1. SkyGarden管理人

    >浜村様
    遅くなりましたがコメントありがとうございます~
    少しでもお役に立ててたら何よりです。

    データ転送ソフトですが、セキュリティ面を考えるとご指摘の通りWinSCPがいいですね。
    今までSFTP対応ソフトとしてFileZillaしか使ったことがありませんでしたので。
    WinSCPはFFFTP風で便利ですね。FFFTPに慣れているとすんなり使えそうです。
    アドバイスありがとうございますm(_ _)m

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA