CentOS
vsftpd

CentOSでftpsをセットアップ(vsftpd)

More than 3 years have passed since last update.

ftpsとsftpどっちにしようかな?というところからスタートしました。

ググってみると、

ftps 約 644,000 件

sftp 約 8,930,000 件

sftpのほうがメジャーです。

今回は、Windowsクライアント向けに、tarやzipでなくフォルダを直接アップロードしたいという要件を抱えています。

なのであえてftpsにします。

sftpも共存させようかと思いましたが、そっちはscpで事足りそうなので保留にしました。

他の要件は以下のとおり。

・anonymous非公開

・chrootでユーザーのホームディレクトリのみ公開


サーバー証明書

OpenSSLを使用してサーバー証明書を作成します。

OpenSSLは必ず最新にしておきましょう。


console

$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem

Generating a 2048 bit RSA private key
..................................................................................+++
.....................................................+++
writing new private key to '/etc/pki/tls/certs/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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Sumidaku
Organization Name (eg, company) [Default Company Ltd]:yaminososhiki
Organizational Unit Name (eg, section) []: area6
Common Name (eg, your name or your server's hostname) []:myserver
Email Address []:xxxx@xxxx

$ ll /etc/pki/tls/certs/vsftpd.pem
-rw-r--r--. 1 root root 3144 Feb 0 00:00 /etc/pki/tls/certs/vsftpd.pem



インストール

yumコマンドでインストールして、設定ファイルを編集します。


console

$ sudo yum install vsftpd

$ sudo vi /etc/vsftpd/vsftpd.conf

設定ファイル


vsftpd.conf

# NOに変更 anonymousユーザーを無効にします

anonymous_enable=NO

# コメントアウト デフォルト(077)にして他のユーザーの読取を拒否
#local_umask=022

# アンコメント ASCIIモードを有効にします
ascii_upload_enable=YES
ascii_download_enable=YES

# コメントアウト(vsftpdデフォルトの077マスクで、ownerのみアクセスに)
#local_umask=022

# chrootを有効にして、homeディレクトリをルートにします。
# アンコメント
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# ipv6,v4両方Listenします
listen=YES
listen_ipv6=YES

# 追記 ※私はよくwritableと間違ってしまいます。writeableです。
allow_writeable_chroot=YES

# 追記 フォルダごといけるようにします
ls_recurse_enable=YES

# ここからSSL設定を追記
# SSLを有効化
ssl_enable=YES
# 証明書の場所を指定します
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
# POODLEの件もあるので明示的にNO
ssl_sslv2=NO
ssl_sslv3=NO
# TLSを使います
ssl_tlsv1=YES
# ノンセキュアなFTPは使用させず、SSLを強制
force_local_data_ssl=YES
force_local_logins_ssl=YES

# ここからパッシブの設定を追記
pasv_address=公開しているホスト名
pasv_enable=YES

# PASVで使うポートの下限と上限を設定します。
# エフェメラルポートの範囲内です。setctlでport_rangeで変更していないか確認してください。
# $ sudo grep ip_local_port_range /etc/sysctl.conf
# デフォルト(設定なし)では32768〜61000
pasv_min_port=50021
pasv_max_port=50040



サービス起動

サービスを起動して、ftpがLISTENになっていることを確認します。


console

$ sudo systemctl enable vsftpd

$ sudo systemctl start vsftpd
$ sudo systemctl status vsftpd
vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
Active: active (running) since 月 2015-00-00 00:00:00 JST; 56s ago
Process: 2832 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 2833 (vsftpd)
CGroup: /system.slice/vsftpd.service
└2833 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

2月 00 00:00:00 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
2月 00 00:00:00 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
$ ss -lt | grep ftp
LISTEN 0 32 :::ftp :::*



Firewallでftpポート開放

認証アクセス用ポートとPASVポートを開放します。


console

$ sudo firewall-cmd --add-service=ftp --permanent

$ sudo firewall-cmd --add-port=50021-50040/tcp --permanent
$ sudo firewall-cmd --reload

設定を確認します
$ sudo firewall-cmd --list-service | grep ftp
dhcpv6-client ftp http ssh
$ sudo firewall-cmd --list-port | grep 50021
50021-50040/tcp 2222/tcp



SELinux無効化

書き込み権限が付与できない場合はSELinuxの設定が必要です。

今回は一旦無効化しておきます。


console

sudo setenforce 0

sudo getenforce
Permissive


Windowsから動作確認

Windows用のFTPS対応クライアントとして、FFFTPを使用してアクセスしてみます。もちろんFileZillaでもOK。

まずは「基本」タブで


  • 「ホストの設定名」

  • 「ホスト名(アドレス)」

  • 「ユーザー名」

  • 「パスワード/フレーズ」

をそれぞれ設定します。

3.jpg

「拡張」タブで「PASVモードを使う」をチェック、「ポート番号:21」にします。

2.jpg

FFFTPの新規ホストでホストの設定をします。

「暗号化」タブで

「FTPS(Explicit)で接続」にチェックを入れます。

1.jpg

設定は以上です。

早速接続してみます。

4.jpg

タイトルバーに「暗号化されています」と表示されています。

ファイルのアップロード、ダウンロードが可能か試してください。