はじめに
実務にて、VirtualBox のゲスト OS(CentOS 7)にホスト OS(macOS)から FTP クライアントの Cyberduck(サイバーダック)で FTP 接続してファイル編集をする必要があり、それを解決した情報になります。
環境
- Host OS : macOS Big Sur 11.6.1
- VirtualBox : 6.1.28
- Guest OS : CentOS 7.6.1810
- Cyberduck : 8.1.0
解説
結論から言うと、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=NO | YES | NO に設定して匿名ユーザー(anonymous, ftp)のログインを拒否します。 |
ascii_upload_enable=YES | NO | コメントアウトを外して ASCII モードによるアップロードを許可します。 |
ascii_download_enable=YES | NO | コメントアウトを外して ASCII モードによるダウンロードを許可します。 |
chroot_local_user=YES | NO | コメントアウトを外してログインディレクトリをユーザーのルートディレクトリに変更します、これによりユーザーの上位ディレクトリへのアクセスを制御します。 |
chroot_list_enable=YES | NO | コメントアウトを外して chroot_list_file に記載されたユーザーだけ上位アクセスを許可します。 |
chroot_list_file=/etc/vsftpd/chroot_list | – | コメントアウトを外して設定ファイルのパスを指定します。 |
listen=YES | NO | YES に設定して IPv4 の接続を有効化します。 |
listen_ipv6=NO | YES | NO に設定して IPv6 の接続を無効化します。 |
pam_service_name=vsftpd | vsftpd | PAM サービス名を vsftpd に指定します。 |
userlist_enable=YES | YES | YES に設定してユーザーリスト(/etc/vsftpd.user_list)を参照してアクセス制御します。 |
userlist_deny=NO | YES | 末尾に追記、NO に設定してユーザーリストをセーフリストにします。YES はブロックリストです。 |
use_localtime=YES | NO | 末尾に追記、YES に設定してファイルとディレクトリのタイムスタンプ表示をローカルタイムで行うようにします。 |
tcp_wrappers=NO | YES | NO に設定して 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.conf
に allow_writeable_chroot=YES
を追記すると解決できますが、BEAST(Browser Exploit Against SSL / TLS)Attack に対して脆弱性があるので盗聴される環境かどうか考慮して設定しましょう。
以上です。
おわりに
Cyberduck のアイコンを見てると「こっち見んな!」って言いたくなるのは私だけでしょうか。