CentOS8で構築する自宅サーバ:ftpサーバの構築

今回は、軽くftpサーバを構築してみます。

パッケージからインストール

サーバプログラムはvsftpdをパッケージからインストールします。

[root@ace ~]# dnf install vsftpd
メタデータの期限切れの最終確認: 0:00:05 時間前の 2020年02月26日 23時26分33秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ      Arch            バージョン            リポジトリー       サイズ
================================================================================
インストール:
 vsftpd          x86_64          3.0.3-28.el8          AppStream          180 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 180 k
インストール済みのサイズ: 359 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
vsftpd-3.0.3-28.el8.x86_64.rpm                  1.2 MB/s | 180 kB     00:00
--------------------------------------------------------------------------------
合計                                            232 kB/s | 180 kB     00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : vsftpd-3.0.3-28.el8.x86_64                             1/1
  scriptletの実行中: vsftpd-3.0.3-28.el8.x86_64                             1/1
  検証             : vsftpd-3.0.3-28.el8.x86_64                             1/1

インストール済み:
  vsftpd-3.0.3-28.el8.x86_64

完了しました!
[root@ace ~]#

簡単ですね。

自分好みに設定

設定ファイルは/etc/vsftpd/vsftpd.confなので、それを直してみますよ。

[root@ace ~]# cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
[root@ace ~]# vi /etc/vsftpd/vsftpd.conf
[root@ace ~]#
[root@ace ~]# diff /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
12c12
< anonymous_enable=YES
---
> anonymous_enable=NO
37c37
< #dirmessage_enable=YES
---
> dirmessage_enable=YES
101c101
< chroot_local_user=YES
---
> #chroot_local_user=YES
110c110
< ls_recurse_enable=YES
---
> #ls_recurse_enable=YES
128,143d127
<
< allow_writeable_chroot=YES
< anon_root=/var/ftp
< use_localtime=YES
< force_dot_files=YES
< reverse_lookup_enable=NO
<
< #ssl_enable=YES
< #ssl_tlsv1=YES
< #ssl_sslv2=NO
< #ssl_sslv3=NO
< #rsa_cert_file=/etc/letsencrypt/live/zeke.ne.jp/fullchain.pem
< #rsa_private_key_file=/etc/letsencrypt/live/zeke.ne.jp/privkey.pem
< #force_local_logins_ssl=NO
< #force_local_data_ssl=NO
<
[root@ace ~]#

[root@ace ~]# touch /etc/vsftpd/chroot_list
[root@ace ~]#

設定ファイルを変更します。ポイントは

匿名ftpは有効に、ただし書き込みはできません。20世紀に書き込みできるようにしていたら、知らない人に動画の交換をされていたので。匿名ftpのホームディレクトリは/var/ftpになります。

一般ユーザはchrootを使って、自分のホームディレクトリ以外に移動できません。ホームディレクトリ内であれば、書き込みは可能です。.htaccessなど.で始まるファイル名も表示します。bindのときはchootを使いませんでしたが、今回はユーザがディレクトリを迷わないようにするためのものなので、利便性の向上ですね。

FTPS対応の対応のため、サーバ証明書を手に入れたらssl関係のコメントを外す予定です。
※暗号化していると、FirewallやNATに引っかかって(パケットの内容が読めないのでどのportを使ってデータ転送するかわからない)通信できないようです。コメントのままにして暗号化非対応とします。

自動起動設定

[root@ace ~]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@ace ~]# systemctl start vsftpd
[root@ace ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor pres>
   Active: active (running) since Thu 2020-02-27 00:35:47 JST; 11s ago
  Process: 17133 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exite>
 Main PID: 17134 (vsftpd)
    Tasks: 1 (limit: 25027)
   Memory: 536.0K
   CGroup: /system.slice/vsftpd.service
           mq17134 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 2月 27 00:35:47 ace.lo.zeke.ne.jp systemd[1]: Starting Vsftpd ftp daemon...
 2月 27 00:35:47 ace.lo.zeke.ne.jp systemd[1]: Started Vsftpd ftp daemon.
[root@ace ~]#

いつものように自動起動の設定とサーバの起動を行います。

ちゃんと上がっているようですね。

動作確認。ちゃんと動いてるかな。

Windowsのffftpを使って、一般ユーザと匿名ユーザでログインできることを確認。一般ユーザはファイルを書き込めること、匿名ユーザはファイルを書き込めないことを確認しておきました。

Firewallの穴あけ

[root@ace ~]# firewall-cmd --zone=public --permanent --add-service=ftp
success
[root@ace ~]# firewall-cmd --reload
success
[root@ace ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dns ftp irc
  ports: 5500-5501/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@ace ~]#

ftpサービスとしてfirewalldに設定すると、制御ポート(21番)だけでなく、データ転送ポート(任意の番号)も通信内容を覗き見て適当に開けてくれます。

しかし、ftpsとして暗号化しようとすると、firewalldやルータが通信内容を見れなくなるので、データ転送ポートを固定にしたり、受信用IPアドレスをグローバルに変更したりとか、けっこう大変というか、結局、納得できる設定にできませんでした。

ちょっと、なめていました。

ftpでの暗号化通信はあきらめて、ファイル転送はsshdによるsftpにすることにしました。

ルータの設定を行っていないので、まだインターネットからはアクセスできませんが、とりあえず設定完了です。

Kindle Unlimited入会で無料で読めます!

コメント