Ubuntu 20.04.2 LTSにvsftpdをインストールし、ログイン資格情報を使用してFTP接続を行い、作成したユーザーで、ディレクトリにファイルをアップロードできるようにしてみます。
今回はDigitalOcean(https://www.digitalocean.com/)クラウドサーバー(ドロップレット)に接続し、クラウドサーバー(Ubuntu 20.04.2 LTS)に、vsftpdをインストールします。
vsftpdは、「Very Secure FTP Daemon」の略で、GPLライセンスのUNIXシステム用FTPサーバーで、安全で非常に高速なものとなっています。さらに安定しています。
■PC環境
・Windows10 Pro
・OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2(Windows10にプリ(標準)インストール)
■クラウド環境
Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-73-generic x86_64)
■コマンドプロンプトを起動する
コマンドプロンプトを起動します。
起動する際は、Windows10のディスクトップ画面の「ここに入力して検索」という検索ボックスで「cmd」を入力すると、「コマンドプロンプト」が検索結果として表示されます。こちらをクリックします。
ssh root@***.*.*.*<ipアドレス>
起動後、上記のコマンドを入力し、Enterキーを押します。OpenSSHを使用し、クラウドサーバー(ドロップレット)にroot権限で、接続します。
sudo apt update
接続後、上記のコマンドを入力し、Enterキーを押します。Ubuntuのパッケージの更新を行います。
sudo apt install vsftpd
更新後、上記のコマンドを入力し、Enterキーを押します。vsftpdをインストールします。
Enterキーを押すと、インストールが開始され、しばらくすると完了となります。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
完了後、上記のコマンドを入力し、Enterキーを押します。設定ファイル(vsftpd.conf)を、cpコマンドを使用し、コピーします。これで元の設定をバックアップとして保存し、空白の設定となります。
■ファイアウォールの状態を確認する
バックアップ後、ファイアウォールが有効になっているか確認します。
sudo ufw status
上記のコマンドを入力し、Enterキーを押します。
ファイアウォールの状態を確認し、FTPトラフィックのルールが追加されていない場合は、追加する必要があります。
sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 990/tcp sudo ufw allow 40000:50000/tcp
上記のコマンドを入力し、Enterキーを押します。ポート20と21はFTP用に、ポート990はTLSを有効にしたとき用に、ポート40000~50000は設定ファイルで設定する予定のパッシブポートの範囲として開いておくと良い。
Rule added(ルール追加) Rule added (v6)(ルール追加)
各コマンドを入力し、Enterキーを押すと、上記のメッセージが表示され、ルールが追加されます。
sudo ufw status
追加後、ルールが追加されているかを確認するために、上記のコマンドを入力し、Enterキーを押します。
上記のように、必要なポートが開かれていれば、確認は完了となります。
■専用のFTPユーザーを作成する
完了後、専用のFTPユーザーを作成します。
sudo adduser test01
作成のために、上記のコマンドを入力し、Enterキーを押します。今回は、テストユーザーを追加します。
Enterキーを押すと「New password:」と表示されますので、パスワードを設定します。設定のために入力し、Enterキーを押します。Enterキーを押すと、「Retype new password:」と表示され、もう1度パスワードを入力し、Enterキーを押します。
passwd: password updated successfully(passwd: パスワードの更新に成功) Changing the user information for test01(test01のユーザー情報を変更する) Enter the new value, or press ENTER for the default(新しい値を入力するか、ENTERを押す)
Enterキーを押すと、上記のメッセージが表示されます。その後「Full Name」と表示されますので、フルネームを入力し、Enterキーを押します。
次に、「Room Number(ルームナンバー)」、「Work Phone(勤務先電話番号)」、「Home Phone(自宅電話番号)」、「Other(その他)」と順番に表示されますので、入力し、Enterキーを押します。
Enterキーを押していくと「Is the information correct?(その情報は正しいですか?)」と質問されますので、「Y」と入力します。これでユーザーの情報の登録が完了となります。
完了後、ftpフォルダを作成します。
sudo mkdir /home/test01/ftp
作成のために、上記のコマンドを入力し、Enterキーを押します。mkdirコマンドで「home/test01」のディレクトリ内に「ftp」フォルダを作成します。
sudo chown nobody:nogroup /home/test01/ftp
作成後、上記のコマンドを入力し、Enterキーを押します。所有権を設定します。
sudo chmod a-w /home/test01/ftp
設定後、上記のコマンドを入力し、Enterキーを押します。書き込み権限を削除します。
sudo ls -la /home/test01/ftp
削除後、上記のコマンドを入力し、Enterキーを押します。パーミッションを確認します。
total 8 dr-xr-xr-x 2 nobody nogroup 4096 Jul 3 04:34 . drwxr-xr-x 3 test01 test01 4096 Jul 3 04:34 ..
Enterキーを押すと、パーミッションの状態が表示されます。
状態を確認後、ファイルをアップロードするためのディレクトリを作成し、所有権を、今回作成したユーザー(test01)に割り当てます。
sudo mkdir /home/test01/ftp/files
まずは、ファイルをアップロードするためのディレクトリを作成します。上記のコマンドを入力し、Enterキーを押します。mkdirコマンドで「ftp」フォルダ内に新しく「files」フォルダを作ります。
sudo chown test01:test01 /home/test01/ftp/files
作成後、上記のコマンドを入力し、Enterキーを押します。ファイルをアップロードするため「files」フォルダの所有権を「test01」にします。
sudo ls -la /home/test01/ftp
所有権を設定後、上記のコマンドを入力し、Enterキーを押します。ftpディレクトリのパーミッションを確認します。
total 12 dr-xr-xr-x 3 nobody nogroup 4096 Jul 3 04:43 . drwxr-xr-x 3 test01 test01 4096 Jul 3 04:34 .. drwxr-xr-x 2 test01 test01 4096 Jul 3 04:43 files
Enterキーを押すと、パーミッションの状態が表示されます。ディレクトリの所有権が「test01」になっていることが確認できます。
確認後、テストで「test.txt」というテキストファイルを追加してみます。
echo "hello world" | sudo tee /home/test01/ftp/files/test.txt
追加するために、上記のコマンドを入力し、Enterキーを押します。
ls /home/test01/ftp/files
Enterキーを押すと、テキストファイルが追加されます。追加後、上記のコマンドを入力し、Enterキーを押します。「files」ディレクトリ内を確認します。
test.txt
確認すると、「test.txt」というテキストファイルが追加されていることが確認できます。これでftpディレクトリの安全性が確保され、「test01」のユーザーにfilesディレクトリへのアクセスが許可されました。
■FTPアクセスの設定
その後、FTPアクセスの設定を行います。
sudo vi /etc/vsftpd.conf
設定するために、上記のコマンドを入力し、Enterキーを押します。viエディタでvsftpd.conf(設定ファイル)の中身を確認します。
#write_enable=YES
確認すると、上記のように、write_enableの設定がコメントアウトしているので、ユーザーがファイルをアップロードできるように、コメントを解除します。
#chroot_local_user=YES
解除後、今回は、FTP接続ユーザーがディレクトリツリーの外にあるファイルやコマンドにアクセスできないように、chrootのコメントを解除します。
user_sub_token=$USER local_root=/home/$USER/ftp
解除後、user_sub_tokenを追加して、local_rootディレクトリのパスにユーザー名を挿入し、このユーザーと今後追加されるユーザーに対して設定が機能するように、上記のコードを、ファイル内の記述します。
pasv_min_port=40000 pasv_max_port=50000
記述後、十分な接続数を確保するために、パッシブFTPに使用できるポートの範囲を制限します。制限のため、上記のコードを、ファイル内の記述します。
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
記述後、FTPアクセスを許可するために、ユーザーはデフォルトではなく、明示的にリストに追加された場合のみアクセスできるように設定します。設定のために、上記のコードを、ファイル内の記述します。なお、userlist_denyは、YESに設定すると、リスト上のユーザはFTPアクセスを拒否。NOに設定すると、リスト上のユーザのみがアクセスを許可します。
記述後、保存してviエディタを終了します。
echo "test01" | sudo tee -a /etc/vsftpd.userlist
終了後、上記のコマンドを入力し、Enterキーを押します。先ほどの「vsftpd.userlist」の中に「test01」ユーザーを追加し、アクセスを許可します。
cat /etc/vsftpd.userlist
追加後、上記のコマンドを入力し、Enterキーを押します。「test01」ユーザーが追加されたかを確認します。
test01
Enterキーを押すと、「vsftpd.userlist」の中身が表示され、追加したユーザー名が表示されれば確認は完了です。
sudo systemctl restart vsftpd
完了後、上記のコマンドを入力し、Enterキーを押します。vsftpdを再起動して、変更した内容を読み込みます。
Enterキーを押すと、再起動が開始され、読み込みが完了します。これでFTPアクセスの設定は完了となります。
sudo systemctl status vsftpd
完了ですが、上記のコマンドを入力し、Enterキーを押すと、vsftpdの状態の確認ができます。確認した時に「Active:(アクティブ:)」の項目に「failed (Result: exit-code)(失敗(結果:exit-code))」と表示されている場合は、vsftpd.conf(設定ファイル)の設定、記述ミスの可能性がありますので、修正する必要があります。
修正後、vsftpdを再起動して、変更した内容を読み込みます。
■FTPアクセスを行う
完了後、テストでFTPアクセスを行ってみます。今回、FTPアクセスを行うのに、コマンドプロンプトを起動します。
ftp
起動後、上記のコマンドを入力し、Enterキーを押します。
ftp> open
その後、上記のコマンドを入力し、Enterキーを押します。
宛先(To:)
Enterキーを押すと、上記のメッセージが表示されますので、「***.*.*.*<ipアドレス>」を入力し、Enterキーを押します。
***.*.*.*<ipアドレス>に接続しました。 220(vsFTPd 3.0.3) 200 Always in UTF8 mode.(200 常にUTF8モードです。) ユーザー(***.*.*.*<ipアドレス>:(none)):
Enterキーを押すと、「***.*.*.*<ipアドレス>に接続しました」と表示され、FTP接続が行われます。接続後「ユーザー(***.*.*.*<ipアドレス>:(none)):」と表示されますので、今回追加したテストユーザーであるtest01を入力し、Enterキーを押します。なお、この接続した時に「connection refused」と表示される場合は、vsftpd.conf(設定ファイル)の設定、記述ミスの可能性がありますので、修正する必要があります。
331 Please specify the password.(331 パスワードを指定してください。) パスワード:
Enterキーを押すと、上記のメッセージが表示されますので、設定したパスワードを入力し、Enterキーを押します。
203 Login successful.(203 ログインに成功しました。)
Enterキーを押すと、上記のメッセージが表示され、ログインが成功します。
ログインが成功しましたので、「files」ディレクトリに移動し、作成したtest.txtのテキストファイルをローカルのパソコンに転送してみます。
ftp> cd files
まずは、上記のコマンドを入力し、Enterキーを押します。cdコマンドで「files」ディレクトリに移動します。
250 Directory successfully changed.(250 ディレクトリの変更に成功しました。)
Enterキーを押すと、ディレクトリの変更に成功します。
ftp> get test.txt
成功後、上記のコマンドを入力し、Enterキーを押します。
Enterキーを押すと、「Windowsセキュリティの重要な警告」というウインドウが表示されます。ウインドウ内には「このアプリの機能のいくつかがWindows Defender ファイアウォールでブロックされています」と書かれており、Windows Defender ファイアウォールにより、ファイル転送プログラム(ftp.exe)の機能のいくつがブロックされているので、今回は「パブリックネットワーク」にチェックを入れて「アクセスを許可する」ボタンをクリックします。
200 PORT command successful. Consider using PASV.(200 PORTコマンドが成功しました。PASVの使用を検討してください。 ) 425 Failed to establish connection.(425 接続の確立に失敗しました。)
クリックすると、コマンドプロンプトに上記のメッセージが表示されます。接続の確立に失敗したので、再度「get test.txt」を入力し、Enterキーを押します。
200 PORT command successful. Consider using PASV.(200 PORTコマンドが成功しました。PASVの使用を検討してください。 ) 150 Opening BINARY mode data connection for test.txt (12 bytes).(150 test.txt(12バイト)のBINARYモードのデータ接続を開始) 226 Transfer complete.(226 転送完了。) ftp: 12バイトが受信されました 0.00秒 12000.00KB/秒。
Enterキーを押すと、上記のメッセージが表示されます。転送完了(Transfer complete)となっていますので、これで作成したtest.txtのテキストファイルをローカルのパソコンへ転送することができました。
転送完了後、作業ディレクトリ(カレントディレクトリ)を確認すると、「test.txt」のテキストファイルを確認することができます。
確認後、今度はローカルのパソコンから、書き込み権限をテストするために、新しいファイルをアップロードしてみます。作業ディレクトリ(カレントディレクトリ)内にアップロードするためにfファイルである「uploadfile.txt」を作成します。
ftp> put uploadfile.txt
作成後、コマンドプロンプトを起動し、FTPアクセスを行います。接続後、cdコマンドで「files」に移動します。移動後、上記のコマンドを入力し、Enterキーを押します。putコマンドを使用し、サーバーへファイルを転送します。
200 PORT command successful. Consider using PASV.(200PORTコマンドが成功しました。 PASVの使用を検討してください。) 150 Ok to send data.(150 データを送信します。) 226 Transfer complete.(226 転送が完了しました。) ftp: 12 バイトが送信されました 0.13秒 0.09KB/秒。
Enterキーを押すと、上記のメッセージが表示され、サーバーへのファイル転送が完了となります。
ftp> bye
完了後、サーバーへの接続を閉じます。閉じるため(終了する)には、上記のコマンドを入力し、Enterキーを押します。
221 Goodbye.
Enterキーを押すと、上記のメッセージが表示されます。これが表示されれば、サーバーへの接続を閉じ、FTP接続は終了となります。
コメント