VirtualBox + CentOS 7 に FTP 接続できるようにする方法

はじめに

実務にて、VirtualBox のゲスト OS(CentOS 7)にホスト OS(macOS)から FTP クライアントの Cyberduck(サイバーダック)で FTP 接続してファイル編集をする必要があり、それを解決した情報になります。

環境

解説

結論から言うと、VirtualBox のゲスト OS に vsftpd(Very Secure FTP Daemon)をインストールして FTP サーバー を構築するだけです。

vsftpd とは名前の通り FTP(File Transfer Protocol)接続する為の 常駐プログラム のことです。

1. ゲスト OS に vsftpd をインストールします。

yum install vsftpd

2. vsftpd が正しくインストールできているか確認します。

vsftpd -v

3. vsftpd の設定ファイル /etc/vsftpd/vsftpd.conf をバックアップします。

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

4. バックアップファイル vsftpd.conf.bak が作成されているか確認します。

ls /etc/vsftpd/

5. 設定ファイル /etc/vsftpd/vsftpd.conf を編集します。

vi /etc/vsftpd/vsftpd.conf

6. ディレクティブ を編集します。

ディレクティブdefault説明
anonymous_enable=NOYESNO に設定して匿名ユーザー(anonymous, ftp)のログインを拒否します。
ascii_upload_enable=YESNOコメントアウトを外して ASCII モードによるアップロードを許可します。
ascii_download_enable=YESNOコメントアウトを外して ASCII モードによるダウンロードを許可します。
chroot_local_user=YESNOコメントアウトを外してログインディレクトリをユーザーのルートディレクトリに変更します、これによりユーザーの上位ディレクトリへのアクセスを制御します。
chroot_list_enable=YESNOコメントアウトを外して chroot_list_file に記載されたユーザーだけ上位アクセスを許可します。
chroot_list_file=/etc/vsftpd/chroot_listコメントアウトを外して設定ファイルのパスを指定します。
listen=YESNOYES に設定して IPv4 の接続を有効化します。
listen_ipv6=NOYESNO に設定して IPv6 の接続を無効化します。
pam_service_name=vsftpdvsftpdPAM サービス名を vsftpd に指定します。
userlist_enable=YESYESYES に設定してユーザーリスト(/etc/vsftpd.user_list)を参照してアクセス制御します。
userlist_deny=NOYES末尾に追記、NO設定してユーザーリストをセーフリストにします。YESブロックリストです。
use_localtime=YESNO末尾に追記、YES に設定してファイルとディレクトリのタイムスタンプ表示をローカルタイムで行うようにします。
tcp_wrappers=NOYESNO に設定して TCP Wrapper を無効にします。

編集が終わったら :wq コマンドで上書き保存して vi を終了します。

7. ユーザーリスト /etc/vsftpd.user_list に FTP 接続を許可するユーザー名を追加します。

vi /etc/vsftpd/user_list

例えば、ユーザー名が laplus-darkness なら下記のように追記するだけです。

laplus-darkness

編集が終わったら :wq コマンドで上書き保存して vi を終了します。

8. touch コマンドで /etc/vsftpd/chroot_list を作成します。

touch /etc/vsftpd/chroot_list

9. chroot_list ファイルが正しく作成されているか確認します。

ls /etc/vsftpd/

10. vi コマンドで /etc/vsftpd/chroot_list に上位アクセスを許可するユーザー名を追加します。

vi /etc/vsftpd/chroot_list

例えば、ユーザー名が laplus-darkness なら下記のように追記するだけです。

laplus-darkness

編集が終わったら :wq コマンドで上書き保存して vi を終了します。

11. chmod コマンドで chroot_list のパーミッションを root 以外のユーザーが読み書きできないように変更します。

chmod 600 /etc/vsftpd/chroot_list

12. ls -l コマンドで chroot_list のパーミッションが正しく変更されているか確認します。

ls -l /etc/vsftpd/chroot_list

13. vsftpd を起動します。

systemctl start vsftpd.service

14. vsftpd の状態を確認します。

systemctl status vsftpd.service

15. vsftpd が自動起動するように設定します。

systemctl enable vsftpd.service

16. firewall-cmd --state コマンドで ファイアウォール の状態を確認します。running(動作中)で問題ないです。

firewall-cmd --state

17. firewall-cmd コマンドで ftp サービスを追加します。--permanent オプションを追加すると恒久的な設定になります。

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

18. ファイアウォールをリロードして設定を反映します。

firewall-cmd --reload

19. サービス一覧に ftp が追加されているか確認します。

firewall-cmd --list-services

20. FTP クライアントを起動します、今回は Cyberduck を利用しています。

21. 接続先を設定します、下記画像は設定例です。

21. FTP 接続します。警告が表示されますが「続ける」をクリックします。

22. ファイルの編集、ダウンロード、アップロードができるか確認します。553 Could not create file. エラーが発生する場合はディレクトリのパーミッションを確認しましょう。

503 Permission denied. エラーが発生する場合は /etc/vsftpd/user_list の設定を確認しましょう。/etc/vsftpd.user_list と間違えて編集している可能性もあります。

500 OOPS: vsftpd: refusing to run with writable root inside chroot(). エラーが発生する場合は /etc/vsftpd/vsftpd.confallow_writeable_chroot=YES を追記すると解決できますが、BEAST(Browser Exploit Against SSL / TLS)Attack に対して脆弱性があるので盗聴される環境かどうか考慮して設定しましょう。

以上です。

おわりに

Cyberduck のアイコンを見てると「こっち見んな!」って言いたくなるのは私だけでしょうか。