From ba31840524a7351b2da9b212b84e8690949841c0 Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Tue, 28 Jul 2026 02:18:19 +0800 Subject: [PATCH] Add HermitStash app --- apps/hermitstash/1.13.21/.env.sample | 4 ++ apps/hermitstash/1.13.21/data.yml | 51 +++++++++++++ apps/hermitstash/1.13.21/data/.gitkeep | 0 apps/hermitstash/1.13.21/docker-compose.yml | 38 ++++++++++ apps/hermitstash/1.13.21/scripts/init.sh | 67 ++++++++++++++++++ apps/hermitstash/1.13.21/scripts/uninstall.sh | 2 + apps/hermitstash/1.13.21/scripts/upgrade.sh | 4 ++ apps/hermitstash/1.13.21/uploads/.gitkeep | 0 apps/hermitstash/README.md | 57 +++++++++++++++ apps/hermitstash/data.yml | 30 ++++++++ apps/hermitstash/logo.png | Bin 0 -> 22862 bytes 11 files changed, 253 insertions(+) create mode 100644 apps/hermitstash/1.13.21/.env.sample create mode 100644 apps/hermitstash/1.13.21/data.yml create mode 100644 apps/hermitstash/1.13.21/data/.gitkeep create mode 100644 apps/hermitstash/1.13.21/docker-compose.yml create mode 100755 apps/hermitstash/1.13.21/scripts/init.sh create mode 100755 apps/hermitstash/1.13.21/scripts/uninstall.sh create mode 100755 apps/hermitstash/1.13.21/scripts/upgrade.sh create mode 100644 apps/hermitstash/1.13.21/uploads/.gitkeep create mode 100644 apps/hermitstash/README.md create mode 100644 apps/hermitstash/data.yml create mode 100644 apps/hermitstash/logo.png diff --git a/apps/hermitstash/1.13.21/.env.sample b/apps/hermitstash/1.13.21/.env.sample new file mode 100644 index 000000000..1a1bbdc7e --- /dev/null +++ b/apps/hermitstash/1.13.21/.env.sample @@ -0,0 +1,4 @@ +PANEL_APP_PORT_HTTP=3000 +APP_DATA_DIR=./data +APP_UPLOADS_DIR=./uploads +CONTAINER_NAME= diff --git a/apps/hermitstash/1.13.21/data.yml b/apps/hermitstash/1.13.21/data.yml new file mode 100644 index 000000000..7ec3a1867 --- /dev/null +++ b/apps/hermitstash/1.13.21/data.yml @@ -0,0 +1,51 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + label: + en: Port + zh: 端口 + zh-Hant: 埠 + ja: ポート + ko: 포트 + ru: Порт + ms: Port + pt-br: Porta + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉터리 + ru: Каталог данных + ms: Direktori data + pt-br: Diretório de dados + required: true + type: text + - default: ./uploads + edit: true + envKey: APP_UPLOADS_DIR + labelEn: Uploads Directory + labelZh: 上传目录 + label: + en: Uploads Directory + zh: 上传目录 + zh-Hant: 上傳目錄 + ja: アップロードディレクトリ + ko: 업로드 디렉터리 + ru: Каталог загрузок + ms: Direktori muat naik + pt-br: Diretório de uploads + required: true + type: text diff --git a/apps/hermitstash/1.13.21/data/.gitkeep b/apps/hermitstash/1.13.21/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/hermitstash/1.13.21/docker-compose.yml b/apps/hermitstash/1.13.21/docker-compose.yml new file mode 100644 index 000000000..c22930390 --- /dev/null +++ b/apps/hermitstash/1.13.21/docker-compose.yml @@ -0,0 +1,38 @@ +services: + hermitstash: + image: "ghcr.io/dotcoocoo/hermitstash:1.13.21@sha256:03d5183b3242616aca540e914377b713779c65c1a7ddc54f319b9c95e12fd74a" + container_name: ${CONTAINER_NAME} + restart: unless-stopped + init: true + user: "1000:1000" + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + environment: + - NODE_ENV=production + - HERMITSTASH_TMPDIR=/dev/shm + - PORT=3000 + - LOCAL_AUTH=true + - REGISTRATION_OPEN=false + - PUBLIC_UPLOAD=false + - PASSKEY_ENABLED=true + - CA_KEY_SEALED=auto + - TLS_KEY_SEALED=auto + shm_size: 256m + read_only: true + tmpfs: + - /tmp:size=16m,mode=1777 + security_opt: + - no-new-privileges:true + cap_drop: + - ALL + volumes: + - "${APP_DATA_DIR}:/app/data" + - "${APP_UPLOADS_DIR}:/app/uploads" + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/hermitstash/1.13.21/scripts/init.sh b/apps/hermitstash/1.13.21/scripts/init.sh new file mode 100755 index 000000000..d1f26584e --- /dev/null +++ b/apps/hermitstash/1.13.21/scripts/init.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" +ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" + +read_env_value() { + local key="$1" + [[ -f "$ENV_FILE" ]] || return 0 + local value + value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" + case "$value" in + \"*\") value="${value#\"}"; value="${value%\"}" ;; + \'*\') value="${value#\'}"; value="${value%\'}" ;; + esac + printf '%s\n' "$value" +} + +configured_value() { + local key="$1" + local default_value="$2" + local value="${!key:-}" + if [[ -z "$value" ]]; then + value="$(read_env_value "$key")" + fi + printf '%s\n' "${value:-$default_value}" +} + +prepare_app_path() { + local key="$1" + local default_value="$2" + local raw path + raw="$(configured_value "$key" "$default_value")" + + [[ -n "$raw" ]] || { + printf '%s must not be empty\n' "$key" >&2 + exit 1 + } + if [[ "$raw" = /* ]]; then + printf '%s must be relative to the application version directory\n' "$key" >&2 + exit 1 + fi + + path="$(realpath -m -- "$ROOT_DIR/${raw#./}")" + case "$path" in + "$ROOT_DIR"/*) ;; + *) + printf '%s must remain inside the application version directory\n' "$key" >&2 + exit 1 + ;; + esac + + install -d -m 0700 "$path" + path="$(realpath -e -- "$path")" + case "$path" in + "$ROOT_DIR"/*) ;; + *) + printf '%s resolves outside the application version directory\n' "$key" >&2 + exit 1 + ;; + esac + chmod 0700 "$path" + chown -R --no-dereference 1000:1000 "$path" +} + +prepare_app_path APP_DATA_DIR ./data +prepare_app_path APP_UPLOADS_DIR ./uploads diff --git a/apps/hermitstash/1.13.21/scripts/uninstall.sh b/apps/hermitstash/1.13.21/scripts/uninstall.sh new file mode 100755 index 000000000..6e877466e --- /dev/null +++ b/apps/hermitstash/1.13.21/scripts/uninstall.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +set -euo pipefail diff --git a/apps/hermitstash/1.13.21/scripts/upgrade.sh b/apps/hermitstash/1.13.21/scripts/upgrade.sh new file mode 100755 index 000000000..692e341e2 --- /dev/null +++ b/apps/hermitstash/1.13.21/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +"$(dirname "$0")/init.sh" diff --git a/apps/hermitstash/1.13.21/uploads/.gitkeep b/apps/hermitstash/1.13.21/uploads/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/hermitstash/README.md b/apps/hermitstash/README.md new file mode 100644 index 000000000..62bc31256 --- /dev/null +++ b/apps/hermitstash/README.md @@ -0,0 +1,57 @@ +# HermitStash + +## 产品介绍 + +HermitStash 是自托管的加密文件分享服务,使用 ML-KEM-1024 与 P-384 混合密钥协商,并避免在持久化存储中保留明文数据库。 + +## 主要功能 + +- 加密文件上传、分享和访问控制 +- 本地账户、通行密钥与管理界面 +- 加密数据库、密钥及上传文件的持久化存储 + +## 访问说明 + +安装后通过 `http://<服务器 IP>:<端口>` 访问,实际端口以 `PANEL_APP_PORT_HTTP` 为准。默认启用本地认证,同时关闭公开注册和匿名上传。 + +首次启动会为 `admin@hermitstash.com` 生成随机管理员密码。该密码会打印到容器日志,并写入 `APP_DATA_DIR/initial-admin-password.txt`。在仅受信任人员可读取 1Panel 日志和数据目录的环境中获取密码并立即登录,然后完成设置向导、更换管理员邮箱和密码,并配置站点及会话设置。向导完成后,上游会自动删除明文密码文件。在首次设置完成前不要向公网开放端口。 + +## 数据持久化 + +`APP_DATA_DIR` 保存加密数据库、保险库密钥和 TLS 资料,`APP_UPLOADS_DIR` 保存上传内容。两个路径必须位于应用版本目录内;初始化脚本会拒绝绝对路径和目录外路径,并设置为容器要求的 UID/GID `1000:1000`。卸载不会删除这些目录。务必单独备份 `APP_DATA_DIR/vault.key`;该文件丢失会导致已加密数据无法恢复。 + +## 安全与部署风险 + +- 容器采用上游官方 rootless 模式,固定以 UID/GID `1000:1000` 运行,丢弃全部 Linux capabilities,并启用只读根文件系统和 `no-new-privileges`。初始化脚本会在启动前准备绑定目录权限。 +- 首次管理员密码在完成设置前同时存在于容器日志和数据目录中。能读取任一位置的人员可接管初始管理员账户,因此必须限制日志、备份和宿主机目录权限,并尽快完成首次设置。 +- 数据库明文工作副本位于 256 MiB 的 `/dev/shm`。不要移除共享内存配置或将 `HERMITSTASH_TMPDIR` 改为磁盘路径。 +- 固定镜像的 Trivy 扫描未发现 Critical 或 High 漏洞;镜像升级前仍应重新扫描。 + +## Introduction + +HermitStash is a self-hosted encrypted file sharing service using hybrid ML-KEM-1024 and P-384 key agreement while keeping its plaintext database off persistent storage. + +## Features + +- Encrypted file uploads, sharing, and access controls +- Local accounts, passkeys, and an administration interface +- Persistent encrypted database, keys, and uploaded files + +## Usage Notes + +- Access the service at `http://:`. Local authentication is enabled while open registration and anonymous uploads are disabled by default. +- On first boot, retrieve the generated password for `admin@hermitstash.com` from the container logs or `APP_DATA_DIR/initial-admin-password.txt`. Sign in from a trusted network and complete the setup wizard immediately. Upstream removes the plaintext password file after setup. Do not expose the port publicly before this is complete. +- `APP_DATA_DIR` and `APP_UPLOADS_DIR` must remain relative to the application version directory. Back up `APP_DATA_DIR/vault.key`; encrypted data cannot be recovered without it. + +## Security and Deployment Risks + +- The container uses upstream's official rootless mode, runs as UID/GID `1000:1000`, drops all Linux capabilities, and enables a read-only root filesystem plus `no-new-privileges`. The initialization script prepares bind-mount ownership before startup. +- Until setup completes, the generated administrator password is present in both container logs and the data directory. Restrict access to logs, backups, and host paths and finish setup promptly. +- The plaintext working database requires the configured 256 MiB `/dev/shm`; do not move `HERMITSTASH_TMPDIR` to persistent storage. + +## References + +- Project: +- Rootless Docker deployment: +- Threat model: +- License: (AGPL-3.0-or-later) diff --git a/apps/hermitstash/data.yml b/apps/hermitstash/data.yml new file mode 100644 index 000000000..3811d570e --- /dev/null +++ b/apps/hermitstash/data.yml @@ -0,0 +1,30 @@ +name: HermitStash +tags: + - Security +title: 后量子加密文件分享服务 +description: 后量子加密文件分享服务 +additionalProperties: + key: hermitstash + name: HermitStash + tags: + - Security + shortDescZh: 后量子加密文件分享服务 + shortDescEn: A post-quantum encrypted file sharing service + description: + en: A post-quantum encrypted file sharing service + zh: 后量子加密文件分享服务 + zh-Hant: 後量子加密檔案分享服務 + ja: 耐量子暗号化ファイル共有サービス + ko: 양자 내성 암호화 파일 공유 서비스 + ru: Сервис обмена файлами с постквантовым шифрованием + ms: Perkhidmatan perkongsian fail disulitkan pasca-kuantum + pt-br: Serviço de compartilhamento de arquivos com criptografia pós-quântica + type: website + crossVersionUpdate: true + limit: 0 + website: https://hermitstash.com/ + github: https://github.com/dotCooCoo/hermitstash + document: https://github.com/dotCooCoo/hermitstash/blob/main/docker-compose.rootless.yml + architectures: + - amd64 + - arm64 diff --git a/apps/hermitstash/logo.png b/apps/hermitstash/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f33310c574cc85339547ef9d3e39c589592d3e GIT binary patch literal 22862 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 literal 0 HcmV?d00001