UbuntuサーバーにFTPで画像アップロードできるようにする方法

監視カメラで取得した画像をChatGPT APIに投げて画像を解析する際に、監視カメラ自体にFTPで画像アップロードできる機能があったりするので、クラウドのUbuntuサーバーにFTP機能を追加して対応できるようにする方法を検証しました。

FTP(vsftpd)のインストール

FTPでファイルをアップロードするには、まずサーバーにFTPサーバーをインストールする必要があります。Ubuntuでは、vsftpdが一般的に使用されるとのことで次のコマンドでインストール。

sudo apt update
sudo apt install vsftpd -y

vsftpdの設定

インストール後、設定ファイルを編集します。

sudo nano /etc/vsftpd.conf
#ファイル書き込みを許可
write_enable=YES 

#デフォルトのディレクトリをchroot
chroot_local_user=YES

変更後、vsftpdを再起動します。

sudo systemctl restart vsftpd
sudo systemctl enable vsftpd

ユーザーを作成し、アップロード先ディレクトリを設定する

FTP用に専用のユーザーを作成します。

sudo adduser ftpuser

パスワードを設定し、必要な情報を入力します。

ディレクトリの作成と権限設定

FTPユーザーのアップロード先ディレクトリを作成します。

sudo mkdir -p /home/ftpuser/ftp/upload
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
sudo chmod -R 750 /home/ftpuser/ftp

以上でサーバー側の設定が終了です。

FileZillaから接続

FileZilla をインストールしてFTP接続を行います。

ここで、うまく接続できない場合は

sudo netstat -tuln | grep :21

と入力しましたが、
sudo: netstat: command not found

とでたので、

sudo apt install net-tools -y

でnet-toolsをインストール。

再度

sudo netstat -tuln | grep :21 すると

IPv6でリッスンされていますが、IPv4はサポートされていない状態用です。

再度、設定ファイルを開きます。

sudo nano /etc/vsftpd.conf

下記の様に修正

listen=YES
listen_ipv6=NO

FTPサーバーを再起動

sudo systemctl restart vsftpd

再度、FileZillaで接続

状態: *********:21 に接続中…
状態: 接続を確立しました。ウェルカム メッセージを待っています…
状態: FTP over TLS がサポートされていないセキュアでないサーバーです
コマンド: USER ftpuser
レスポンス: 331 Please specify the password.
コマンド: PASS
レスポンス: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

とのエラーメッセージ。

解決方法

ホームディレクトリの書き込み権限を削除します

sudo chmod a-w /home/ftpuser

これで、私は接続できるようになりました。

VIGI 540Sの設定

VIGI 540SのFTP設定はこちら。

この設定でFTPで画像のアップロードができました。

ただし、VPSが1GBであることが理由なのか、FileZillaでFTP接続するとリストの取得に時間がかかりました。