Debian 8 (Jessie) - FTP サーバ構築!
Updated:
Debian GNU/Linux 8 (Jessie) に FTP サーバを構築する方法についての記録です。
以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)
0. 前提条件
- Debian GNU/Linux 8 (Jessie) での作業を想定。
- 接続元のマシンは Linux Mint 17.1(64bit) を想定。
- 接続テストでは FileZilla という FTP クライアントを使用する。
1. vsftpd のインストール
# apt-get -y install vsftpd
2. vsftpd 設定ファイルの編集
File: /etc/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# anonymous によるログインを無効化
anonymous_enable=NO
# ローカルアクセスの許可
local_enable=YES
# 書き込み許可
write_enable=YES
# アスキーモードでの転送を許可
ascii_upload_enable=YES
ascii_download_enable=YES
# chroot 有効化
chroot_local_user=YES
# chroot リスト有効化
chroot_list_enable=YES
# chrootリスト指定
chroot_list_file=/etc/vsftpd.chroot_list
# ディレクトリごと一括での転送を有効化
ls_recurse_enable=YES
# chroot のルートディレクトリ指定 ( 最終行に追加 )
# ( 指定しない場合はユーザーのホームディレクトリ直下 )
# public_htmlを指定した場合で、且つ当該ディレクトリがないとログインできないので注意
#local_root=public_html
3. ホームディレクトリより上層へのアクセス許可設定
ホームディレクトリより上層へのアクセスを許可するユーザのリストを作成する。(上記設定ファイル内の “/etc/vsftpd.chroot_list” のこと)
指定は、1行に1ユーザ。
File: /etc/vsftpd.chroot_list
1
masaru
4. SSL サーバの構築
vsftpd を SSL/TLS で使用できるようにするには SSL サーバが必要であるので、OpenSSL をインストールする。
# apt-get -y install openssl
5. サーバ証明書の作成
vsftpd を SSL/TLS で使用できるようサーバ証明書を作成する。
# cd /etc/ssl/private
# openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Generating a 1024 bit RSA private key
.......++++++
................++++++
writing new private key to '/etc/ssl/private/vsftpd.pem'
------------------------------------------
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
------------------------------------------
Country Name (2 letter code) [AU]:JP # <= 国の略名
State or Province Name (full name) [Some-State]:Shimane # <= 都道府県名
Locality Name (eg, city) []:Matsue # <= 市区町村名
Organization Name (eg, company) [Internet Widgits Pty Ltd]:mk-mode.com # <= サイト名(何でもよい)
Organizational Unit Name (eg, section) []: # <= 部署名(空でよい)
Common Name (e.g. server FQDN or YOUR name) []:ftp.mk-mode.com # <= ホスト名
Email Address []:root@mk-mode.com # <= 管理者メールアドレス
作成したサーバ証明書のパーミッションを設定する。(所有者読み込み専用に)
# chmod 400 vsftpd.pem
6. vsftpd 設定ファイルの編集
サーバ証明書を使用できるよう vsftpd 設定ファイルを以下のように編集する。(最終行に追加)
File: /etc/vsftpd.conf
1
2
3
4
ssl_enable=YES # SSL有効化
force_local_data_ssl=YES # SSL必須にする
force_local_logins_ssl=YES # SSL必須にする
ssl_ciphers=HIGH # 追加(FTP クライアント FileZilla に対応するため)
7. vsftpd の再起動
設定を有効化するために、vsftpd を再起動する。
# systemctl restart vsftpd
8. ファイアウォール (ufw) の設定
外部に公開する場合は、TCP ポート 21(FTP) へのアクセスを許可する必要がある。
# ufw allow 21/tcp
Rule added
Rule added (v6)
# ufw status
Status: active
To Action From
-- ------ ----
9999/tcp ALLOW 192.168.11.0/24
53 ALLOW Anywhere
53 ALLOW Anywhere (v6)
21/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere (v6)
(今回は IPv6 を使用しないので v6 の行を削除してもよいが、あってもおそらく問題ない)
9. 動作確認
クライアント側からコマンドラインや FTP クライアントでサーバに接続して、アップロード・ダウンロード等各種操作が可能かチェックする。
FTP クライアント FileZilla なら以下のように設定してログイン。
- ホスト:サーバホスト名 or サーバ IP アドレス
- プロトコル:「FTP - ファイル転送プロトコル」
- 暗号化:「明示的な FTP over TLS が必要」
- ログオンの種類:「通常」 or 「パスワードを尋ねる」
- ユーザ:ユーザ名
- 転送モード:「アクティブ」
10. 自動起動の設定
vsftpd インストール直後はマシン起動時に自動で vsftpd が起動するようになっている。
自動起動しないように設定するなら以下のようにする。
# systemctl disable vsftpd
Synchronizing state for vsftpd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d vsftpd defaults
Executing /usr/sbin/update-rc.d vsftpd disable
insserv: warning: current start runlevel(s) (empty) of script `vsftpd' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `vsftpd' overrides LSB defaults (0 1 6).
# systemctl list-unit-files -t service | grep vsftpd
vsftpd.service disabled # <= disabled であることを確認
逆に自動起動するように設定するなら以下のようにする。
# systemctl enable vsftpd
Synchronizing state for vsftpd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d vsftpd defaults
insserv: warning: current start runlevel(s) (empty) of script `vsftpd' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `vsftpd' overrides LSB defaults (0 1 6).
Executing /usr/sbin/update-rc.d vsftpd enable
# systemctl list-unit-files -t service | grep vsftpd
vsftpd.service enabled # <= enabled であることを確認
以上。
Comments