
Bitwarden で、IDとパスワードを管理出来たが、Bitwarden ではヒットしなかったり、その他重要な事項をデーターベースに記録し、モバイル端末に格納してきた。
Tap Forms (iOS・Mac)
Bitwarden (windows・iOS・Android)
Memento Database (windows・iOS・Android)
データを各社のサーバーに置くことで利便性は高いが、セキュリティには疑問があったので、Memento Database は、端末だけにして、退職を期に自宅のWindowでは自前でAccessにて保存していた、しかし修正や新規登録では二つのでデータの同期をとるのが面倒だったが、Ubuntu Server とTailscale 環境を構築したので、Bitwarden に引き続き、APIサーバーを立ててSQLiteへインポートし自分のパスワード管理を構築する。
■Accessのデータを移行
フォルダーの作成
sudo mkdir -p /mnt/data/docker/passmanager/{api,db,photos}
sudo chown -R $USER:$USER /mnt/data/docker/passmanager
・Access側で、カンマ付きダブルクォーテーションで生成し、「Data.csv」ファイルをエクスポートして /mnt/data/docker/passmanager/db に格納。
・インポートスクリプト作成し、python3 にて、メインデータ「passwords.db」へインポートして、/mnt/data/docker/passmanager/db に格納。
/mnt/data/docker/passmanager/db/import.py
----------割愛----------
・写真を /mnt/data/docker/passmanager/photos に格納。
■SQLCipher 暗号化
SQLiteデータベースファイル全体をAES-256で暗号化するSQLCipher のインストール
sudo apt-get install -y sqlcipher
強力な暗号化キーを生成
openssl rand -hex 32
設定ファイルencrypt_db.py の作成
nano /mnt/data/docker/passmanager/db/encrypt_db.py
#!/usr/bin/env python3
import subprocess
import shutil
import os
DB_KEY = "32桁の暗号キー"
SRC = "/mnt/data/docker/passmanager/db/passwords.db"
DST = "/mnt/data/docker/passmanager/db/passwords_enc.db"
BAK = "/mnt/data/docker/passmanager/db/passwords_backup.db"
print(f"バックアップ作成: {BAK}")
shutil.copy2(SRC, BAK)
cmd = f"""sqlcipher {SRC} <<SQLEOF
ATTACH DATABASE '{DST}' AS encrypted KEY '{DB_KEY}';
SELECT sqlcipher_export('encrypted');
DETACH DATABASE encrypted;
SQLEOF"""
print("暗号化変換中...")
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode != 0:
print(f"エラー: {result.stderr}")
exit(1)
if os.path.exists(DST) and os.path.getsize(DST) > 0:
print(f"✅ 成功: {DST} ({os.path.getsize(DST)} bytes)")
print(f"✅ バックアップ: {BAK}")
print("\n次のステップ:")
print(f" mv {DST} {SRC}")
else:
print("❌ 変換失敗")
メインデータ「passwords.db」を元に暗号化された「passwords_enc.db」を作成し置換える
python3 /mnt/data/docker/passmanager/db/encrypt_db.py mv /mnt/data/docker/passmanager/db/passwords_enc.db \ /mnt/data/docker/passmanager/db/passwords.db
■SQLite ビルド・コンテナ起動
ビルド・コンテナ起動
cd /mnt/data/docker/passmanager/ docker compose build docker compose up -d
外部からアクセスできるように、Apacheのリバースプロキシ設定追記
sudo nano /etc/apache2/sites-available/vafee2.conf
# --- passmanager API --- ProxyPass /passmanager/ http://127.0.0.1:8100/ ProxyPassReverse /passmanager/ http://127.0.0.1:8100/
apache 再起動
sudo systemctl reload apache2
これで、自作のAccessフォームを、自鯖のデータに外部からでもアタッッチ出来る環境になった、しかしそれでは中途半端なので次に続く。