WordPressの開発環境を整えるために、VirtualBoxにCentOS7.6を導入したので、ftpでも接続できるようにして、簡単にファイル管理ができるようにします。
環境
ホスト:macOS Mojava バージョン 10.14.5
ゲスト:CentOS7.6
VirtualBox:バージョン 5.2.30 r130521 (Qt5.6.3)
すでに、下記の設定が終わっていることとします。



vsftpdをインストール
yum -y install vsftpd
vsftpdがインストールされたか確認
vsftpd -v
どこにインストールされたか?
which vsftpd
vsftpdの設定
vsftpdの設定は「/etc/vsftpd/vsftpd.conf」を編集して行います。
設定ファイルのバックアップ。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
Viエディタでvsftpd.confを開く
vi /etc/vsftpd/vsftpd.conf
12行目 匿名ユーザーログインを禁止
anonymous_enable=YES → anonymous_enable=No
83行目 先頭の#を外してASCIIでのデータの送受信許可
#ascii_upload_enable=YES → ascii_upload_enable=YES
84行目 先頭の#を外してASCIIでのデータの送受信許可
#ascii_download_enable=YES → ascii_download_enable=YES
101行目 上位ディレクトリ参照可能関連設定
#chroot_local_user=YES → chroot_local_user=YES
102行目 上位ディレクトリ参照可能関連設定
#chroot_list_enable=YES → chroot_list_enable=YES
104行目 上位ディレクトリ参照可能関連設定
ユーザのログインディレクトリ が、そのユーザのルート ディレクトリとなり、
ログインディレクトリより上部にアクセスすることができなくなる。
ただし、chroot_listに記載されたユーザーは上位ディレクトリにアクセスすることができる。
#chroot_list_file=/etc/vsftpd/chroot_list → chroot_list_file=/etc/vsftpd/chroot_list
110行目 先頭の#を外してls -R (ディレクトリごと一括での転送機能)を有効化
#ls_recurse_enable=YES → ls_recurse_enable=YES
115行目 IPv4の接続も可能
listen=No → listen=YES
124行目 IPv6の接続を不可に
listen_ipv6=YES → listen_ipv6=No
128行目 TCP Wrapperの無効化 ルーターによって外部からのFTPアクセスは遮断されている
tcp_wrappers=YES → tcp_wrappers=NO
ファイルの末尾に追加
130行目 ローカルタイムの使用
use_localtime=YES
131、132行目 「/etc/vsftpd.user_list」に記述されている特定のユーザーアカウントにのみFTP接続を許可
userlist_enable=YES
userlist_deny=NO
133〜135行目 SSLでFTP接続ができるように設定(SSL接続する時のみ追記)
# ssl settings
ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
136行目 chrootした先に書き込み権限があるとエラーになるので追記
allow_writeable_chroot=YES
137行目 隠しファイル表示
force_dot_files=YES
変更、追記したら、:wqで保存してviエディタを終了。
「/etc/vsftpd.user_list」の編集
FTPサーバーへの接続を許すアカウント名を「/etc/vsftpd.user_list」に記述する。
viエディタでuser_listを開く。
vi /etc/vsftpd/user_list
接続可能なユーザー名をいれて保存。
rootでFTP接続できるようにしちゃうのなら・・・ 決して本番環境ではやらないように!
まずは/etc/vsftpd/ftpusersからrootを除外(コメントアウト)する。
vi /etc/vsftpd/ftpusers
2行目
root → # root
「/etc/vsftpd/chroot_list」の作成
ファイルを新規に作成し、上位ディレクトリの参照を許可するアカウント名を記述する。
vi /etc/vsftpd/chroot_list
1行目
root
作成したchroot_listは、パーミッションが644になっているため、root以外のユーザーが参照できてしまう。
「root」アカウント以外はchroot_listを読み書きできないように以下のコマンドでパーミッションを変更しておく。
chmod 600 /etc/vsftpd/chroot_list
念のため、パーミッションが変更されているか確認しておく。
[root@localhost ~]# ls -l /etc/vsftpd/chroot_list -rw-------. 1 root root 5 6月 16 21:30 /etc/vsftpd/chroot_list
-rw——-となっていればOK
ファイヤーウォールの設定
1行ごと、実行していくこと。もし、ファイヤーウォールを停止していたら、# systemctl start firewalldで起動します。
firewall-cmd --add-service=ftp firewall-cmd --add-service=ftp --permanent firewall-cmd --list-services
パッシブ接続用ポートの許可
firewall-cmd --add-port=60001-60010/tcp --zone=public --permanent
再起動
firewall-cmd --reload
確認
firewall-cmd --list-all --zone=public
ここまでのファイヤーウォールの設定画面
もし、ファイヤーウォールを停止していたら、# systemctl stop firewalld で停止しましょう。
vsftpdの自動起動設定
サーバーが再起動した際、自動でvsftpdが起動するように自動起動を設定しておく
systemctl enable vsftpd.service
vsftpdを起動
systemctl start vsftpd.service
状態確認
systemctl status vsftpd.service
activeと緑色で表示されていたらOK
ここまでのvsftpd設定画面
setsebool ftpd_full_access on
念の為、停止コマンド
systemctl stop vsftpd.service
再起動コマンド
systemctl restart vsftpd.service
これで、FTPで接続が可能になります。
起動エラー
# systemctl start vsftpd Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.
このようなエラーが出た場合、「/etc/vsftpd/vsftpd.conf」に設定ミスがあることが多いです。
文法確認のコマンド(下記)を実行してみてください。
問題があれば指摘。問題がなければ起動しますのでご注意!!
# /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ちなみに、
listen
と listen_ipv6
を両方 YES にすることはできません。
どちらかにする必要があります。