お知らせ

(本サイトは、アフィリエイト広告を利用しています)

格安中華セキュリティ・カメラが2025年に入ってバグった話 FTPのアップロードがおかしい!?

セキュリティ

賃貸経営をやっている筆者テック大家さんですが、物件に設置している格安中華カメラがおかしい挙動を示したので、本日はこの話題を取り上げます。

以前、本ブログ「テック大家さん」で「格安セキュリティ・カメラどうなの?」という記事を書きました。Amazonなどで売られている数千円で購入できるIPベースのセキュリティカメラがあります。それをDIYで自分の物件に付けているのですが、使ってみてどうなの?という記事を書いたのでした。

筆者の使い方は、以下のようなイメージです。カメラが動き検出して撮った静止画を、FTPサーバーにアップロード。自前のWebアプリでアップロードされた複数カメラの映像を見やすくする、という仕組みで運用しています。これによって、いちいち動画を一つ一つ確認しなくても、ざっと何時ころに何が起こったか、リモートから確認できる。ちょっといい感じのスグレモノなのであります。

この仕組みは、「ララカム」というシステムとして販売&サポートしておりますので、気になる方はこちら↓をチェックしてみて下さい。

2025年に入って挙動がおかしい!?

さて、このシステム。FTPサーバーにカメラ画像をアップロードする仕組みなのですが、2025年に入ってからFTPサーバーのディレクトリを見ると、なにかおかしい。

FTPサーバーは上記の記事でも書いているように、レンタルサーバーを使っています。格安セキュリティ・カメラに搭載されている「FTPクライアント機能」を使って、レンタルサーバーに画像をアップロードしていました。

FTPクライアント機能を使うと、FTPサーバーの特定のディレクトリに画像を集約できるのですが、2025年1月1日以降、すべての画像がルートディレクトリ(つまり、ユーザーホーム)につらつらとアップロードされているではありませんか…

ユーザーホームディレクトリでlsコマンドを実行するととんでもないことに…

本来であれば、以下のように日付ごとのディレクトリに別れて保存されるはずなのです。

本来は、日付ディレクトリ以下のimagesディレクトリに整理されてアップロードされるはずだった

原因はカメラの「FTPクライアント機能」

なぜ、突然このような状態になるのかわからず時が経ちました。筆者自身ちょっと時間が取れなかったので若干放置していたところもあります。

ただ、症状を見る限り、2025年に入ってからおかしくなっているのは間違いないのでした。

3月になり、ようやく重い腰を上げて調査してみたところ、不具合情報がネットに上がっているではありませんか。格安セキュリティ・カメラメーカーの一つ「SV3C」のサイトです。

ここに「FTPに関する不具合の原因と解決方法」というPDFの資料がありました。

筆者は実際にはSV3Cのカメラばかりを使っているわけでないのですが、ODMかなにかなのか、別のメーカーの格安製品でも同じ挙動を示します。それらは、SV3Cのサポートにある資料と同じ管理画面が表示される製品です。

曰く、

問題説明:
20250101-20250930 の期間中、FTP サーバーが自動的に日付ディレクトリを作成できず、ファイルがルートディレクトリに転送されました。

原因:
IPC がサーバーに日付ディレクトリを照会した際、サーバーの日付ディレクトリ名(20250101)の中の 250 を返り値 250 と誤認し、このディレクトリが既に存在したと見なしたため、問題が発生しました。

格安カメラの「FTPクライアント機能」は、サーバーに保存したい日付ディレクトリがない場合に新たに作ってそこに画像を保存しようとします。上記「原因」説明によると、作ろうとしたディレクトリがすでに存在していると勘違いしてアップロード、ということのようです。

ディレクトリがシステムに存在しなければ、CDコマンド(change directory)などが失敗してアップロードできなくなっても良さそうです。でもきっと、CDコマンドの結果のいかんに関わらずアップロードしているのでしょう。結果、ユーザーホーム・ディレクトリに大量の画像がアップロードされる、という状況を目にするようになったというわけですね。

しかも、「250と誤認」というので2025年の1月からこの症状が起こっているのも納得がいきます。

それにしても、プログラムを書く筆者からすると、「どういう実装したらそんなバグ仕込むのだ?!」と突っ込みたくなるような、意味不明なバグです。きっとファームウェアのコードはドロドロなのでしょう(笑)。

解決方法はFTPサーバーにディレクトリを大量に作る!

さて、不具合は格安カメラのファームウェアにあるということは分かりました。では、どうしたら治るのでしょう?ファームウェアをアップデートすればいい?

話はそんなに簡単ではありませんでした。

不具合レポートを上げてくれたんのはSV3Cですが、筆者のカメラ(ICAMI製)は多分ファームウェアがそっくりの同等品です。SV3Cのファームウェアだと正しくアップデートできる保証がありません。おまけに、筆者が使用しているカメラは、メーカーサイトすら見当たらないような代物。これはお手上げか?と思いきや、上記のPDF資料にちゃんとワークアラウンドが書かれています。

解決策は、「250」を含むような名前のディレクトリが実際にサーバーに存在していればエラーにならない、という挙動を利用します。なので、ワークアラウンドとしては、2025年の1月1日から2025年の9月30日までのディレクトリを予め作っちゃって下さい、というものです。

つまり、サーバーのディレクトリに、20250101, 20250102, 202050103, … 20250929, 20250930という感じで本来FTPクライアント機能が作るべきディレクトリを作っておきます。

「やれやれ…なんでだよー」と愚痴の一つも言いたくなりますね。

一応自動でディレクトリ作成作業をやってくれるPythonスクリプトが上記のPDF資料に書かれていました。これを使ってサーバーにディレクトリを作ってしまいましょう。(base_dirに画像を保存したいディレクトリのパスを書いてから実行しましょう)

from datetime import date, timedelta
import os

# Define the start and end dates
start_date = date(2025, 1, 1)
end_date = date(2025, 9, 30)

# Base directory where folders will be created
base_dir = "/mnt/data/date_folders/"

# Generate folders for each date
current_date = start_date 

while current_date <= end_date: # Create the folder path for the current date
    date_folder_path = os.path.join(base_dir, current_date.strftime("%Y%m%d"))
    # Create the date folder along with "images" and "record" subfolders
    os.makedirs(os.path.join(date_folder_path, "images"), exist_ok=True)
    os.makedirs(os.path.join(date_folder_path, "record"), exist_ok=True)
    # Move to the next day
    current_date += timedelta(days=1)

# Confirm completion
base_dir

レンタルサーバーのFTPサーバーにSSHなどでログインできれば上記のスクリプトを実行できます。私はこれで一応解決しました。

でも、SSHログインできない方はどうするんでしょうね?生成AIにお願いして、FTPクライアントアプリでも操作してもらう感じですか??

ホントにこれで解決するのか?!

不具合情報やワークアラウンドを整理して公開してくれているSV3Cには頭が下がります。

一方で、これで将来に渡って大丈夫なのか?という疑問が残ります。

今回は「250」を含むディレクトリ名が「存在しなくても成功とみなされるような」コードだったので問題になったのですが、2025年の9月30日以降、本当に大丈夫なんだろうか…不安ですね。とりあえず、これで様子を見ましょう。

メールマガジンにて本サイト(Tech Landlordテック大家さん)の更新情報をご連絡します。
本サイトのプライバシーポリシーをご確認の上、是非メールアドレスをご登録下さい!


プロフィール

テック大家さん
ソフトエンジニア兼不動産オーナー。
某超有名日本メーカーにおいてソフトウエア開発畑を30年近く勤務。
かつてはWindowsのアプリ開発や、組み込み機器のソフト開発を行う。プロジェクトマネジメント・オフショア開発・要件管理などの経験あり。現在は、個人開発で、JavaScript/TypeScript/React/Express、PHP/Laravel、Firebase、Google cloud、Arduino(C++)などでプログラミングを楽しむ。
サラリーマンの傍ら不動産経営を始め、現在、1棟モノの賃貸4物件を東京・神奈川に所有。夫婦でおよそ20年の賃貸経営の実績。
最近の物件では、入居者向けフリーWiFiなど、テック系の設備はDIYで自ら構築。
海外MBA取得。