Help us understand the problem. What is going on with this article?

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

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away