Debian 11 (bullseye) - FTP サーバ構築!
Updated:
Debian GNU/Linux 11 (bullseye) に FTP サーバを構築する方法についての記録です。
以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)
0. 前提条件
- Debian GNU/Linux 11.0.0 (bullseye; 64bit) での作業を想定。
- 接続元のマシンも Debian GNU/Linux 11 (bullseye; 64bit) を想定。
- 接続テストでは FileZilla という FTP クライアントを使用する。
- root ユーザでの作業を想定。
1. vsftpd のインストール
# apt -y install vsftpd
2. vsftpd 設定ファイルの編集
File: /etc/vsftpd.conf
3. ホームディレクトリより上層へのアクセス許可設定
ホームディレクトリより上層へのアクセスを許可するユーザのリストを作成する。(上記設定ファイル内の /etc/vsftpd.chroot_list
のこと)
指定は、1行に1ユーザ。
File: /etc/vsftpd.chroot_list
4. SSL サーバの構築
vsftpd を SSL/TLS で使用できるようにするには SSL サーバが必要であるので、未インストールなら OpenSSL をインストールする。
# apt -y install openssl
5. サーバ証明書の作成
vsftpd を SSL/TLS で使用できるようサーバ証明書を作成する。
# cd /etc/ssl/private
# openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Generating a 2048 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]:xxxxxxx.com # <= サイト名(何でもよい)
Organizational Unit Name (eg, section) []: # <= 部署名(空でよい)
Common Name (e.g. server FQDN or YOUR name) []:ftp.xxxxxxx.com # <= ホスト名
Email Address []:root@xxxxxxx.com # <= 管理者メールアドレス
作成したサーバ証明書のパーミッションを設定する。(所有者読み込み専用に)
# chmod 400 vsftpd.pem
6. vsftpd 設定ファイルの編集
サーバ証明書を使用できるよう vsftpd 設定ファイルを以下のように編集する。
File: /etc/vsftpd.conf
7. vsftpd の再起動
設定を有効化するために、vsftpd を再起動する。
# systemctl restart vsftpd
8. ファイアウォール (ufw) の設定
外部に公開する場合は、TCP ポート 21(FTP) へのアクセスを許可する必要がある。
また、 PASV モードで運用する場合は、 /etc/vsftpd.conf
の pasv_min_port
から pasv_max_port
で設定したポートも開放する。
# ufw allow 21/tcp
Rule added
# ufw allow 4000,4001,4002,4003,4004,4005/tcp
Rule added
# ufw status
Status: active
To Action From
-- ------ ----
9999/tcp ALLOW 192.168.11.0/24
53 ALLOW Anywhere
21/tcp ALLOW Anywhere
4000,4001,4002,4003,4004,4005/tcp ALLOW Anywhere
9. 動作確認
クライアント側からコマンドラインや FTP クライアントでサーバに接続して、アップロード・ダウンロード等各種操作が可能かチェックする。
FTP クライアント FileZilla なら以下のように設定してログイン。
- ホスト:サーバホスト名 or サーバ IP アドレス
- プロトコル:「FTP - ファイル転送プロトコル」
- 暗号化:「明示的な FTP over TLS が必要」
- ログオンの種類:「通常」 or 「パスワードを尋ねる」
- ユーザ:ユーザ名
- 転送モード:「アクティブ」
lftp を使用するなら、インストール後、設定を行なう。
# apt install lftp
Filename: ~/.lftprc
set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no
そして、ログイン。
$ lftp -u foo 192.168.11.2
10. 自動起動の設定
vsftpd インストール直後はマシン起動時に自動で vsftpd が起動するようになっている。
自動起動しないように設定するなら以下のようにする。
# systemctl disable vsftpd
Synchronizing state of vsftpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable vsftpd
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 is-enabled vsftpd
disabled # <= disabled であることを確認
逆に自動起動するように設定するなら以下のようにする。
# systemctl enable vsftpd
Synchronizing state of vsftpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable vsftpd
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 is-enabled vsftpd
enabled # <= enabled であることを確認
以上。
Comments