# ShareGuard 产品使用说明书

版本：v1.0（2026-08）
适用产品：ShareGuard 局域网共享权限管理系统（服务端 + 客户端）

---

## 1. 产品简介

ShareGuard 用于在 Windows 局域网内安全地发布和管理 SMB 文件共享。它把"建账号、建共享、控权限、留证据"整合到一个管理端，并给普通用户提供一个一键登录的客户端，避免手工执行 `net use`、残留旧会话或误用凭据管理器。

### 1.1 产品组成

| 组件 | 程序 | 使用者 | 作用 |
|---|---|---|---|
| 服务端（管理端） | `ShareGuard.Server.exe` | 管理员 | 创建账号/部门、发布共享、分配五档权限、访客访问控制、快照恢复、审计 |
| 客户端 | `ShareGuard.Client.exe` | 普通用户 | 一键登录服务器共享、自动清理旧连接、可选记住地址和账号密码 |

两个程序均为单文件绿色程序，不需要在目标电脑安装 .NET 运行时。

### 1.2 核心特性

- 账号与部门：创建 Windows 本地账号，按部门（Windows 本地组）组织成员。
- 五档权限：禁止、只读、仅上传、读写、完全控制，可按用户或部门逐行授权。
- 访客访问：每个共享可独立设置 关闭 / 只读 / 读写。
- 快照恢复：基于卷影副本创建快照，支持浏览快照内容并恢复文件或整个文件夹。
- 审计追溯：记录创建、修改、删除、恢复等操作，支持导出 CSV。
- 客户端记忆：可保存服务器地址；可选保存账号密码（密码经 Windows DPAPI 按当前用户加密，不存明文）。

---

## 2. 运行环境

| 项目 | 要求 |
|---|---|
| 服务器操作系统 | Windows 10 / Windows Server 2016 及以上（64 位） |
| 客户端操作系统 | Windows 10 及以上（64 位） |
| 网络 | 同一局域网，放通 SMB（TCP 445） |
| 权限 | 服务端需要管理员权限运行（用于创建本地用户、组、共享、ACL 和卷影副本） |

---

## 3. 安装与启动

### 3.1 发布物

```text
publish\win-x64\server\ShareGuard.Server.exe   服务端（管理端 + 后台任务）
publish\win-x64\client\ShareGuard.Client.exe   客户端
```

### 3.2 启动服务端

双击 `ShareGuard.Server.exe` 即可打开管理端窗口并同时启动后台审计任务。

也可以仅启动后台任务（不开界面）：

```powershell
.\ShareGuard.Server.exe --service
```

### 3.3 启动客户端

双击 `ShareGuard.Client.exe`。

### 3.4 数据存放位置

所有业务数据保存在数据目录，不在 EXE 内：

```text
%ProgramData%\ShareGuard\
├── shareguard.db          SQLite 主数据库（账号、共享、权限、快照元数据、审计、设置）
├── shareguard.db-wal      SQLite WAL 文件（运行期出现，属正常现象）
├── shareguard.db-shm      SQLite 共享内存文件
├── audit-events.log       后台文件审计日志
├── backup\                数据库备份
└── license\               预留的激活数据目录
```

> 升级时只需替换 EXE，不要删除 `%ProgramData%\ShareGuard\`，否则数据库、配置和审计会丢失。

客户端自身设置与诊断日志保存在：

```text
%LOCALAPPDATA%\ShareGuard\client-settings.json   客户端保存的地址/账号/加密密码
%LOCALAPPDATA%\ShareGuard\client.log             客户端诊断日志（不含密码）
```

---

## 4. 服务端（管理员）操作说明

管理端顶部共四个页面：**仪表盘**、**账号与部门**、**共享与权限**、**快照与审计**。右上角"刷新"按钮可重新读取系统当前状态。

### 4.1 仪表盘

展示服务器名、共享列表（名称、本地路径、说明、在线状态）等总览信息，用于快速确认共享是否正常发布。

### 4.2 账号与部门

**创建账号**

1. 填写用户名、显示名、初始密码。
2. 点击"创建账号"。账号同时存在于 Windows 本地用户和 ShareGuard 数据库。

**维护账号**

- 在账号列表中点击某行，下方可修改显示名称、勾选/取消"启用账号"、填写新密码后点击"应用修改"；只重置密码可直接填新密码后点"重置密码"。
- "新密码"留空表示不修改密码。
- 点击"删除账号"会同时从 Windows 和数据库中移除该账号。

**部门管理**

- 填写部门名点击"创建部门"。部门即 Windows 本地组，创建后不建议改名；如需改名请新建部门、迁移成员与权限后删除旧部门。
- 部门说明可随时修改（"更新说明"）；"删除部门"会清理本地组、成员关系及该部门的权限条目。
- 选中账号与部门后用"加入部门"/"移出部门"调整成员关系，Windows 组和数据库同步更新。

### 4.3 共享与权限

**创建共享**

1. 填写共享名称。
2. 选择"共享目录"（实际存放文件的本地文件夹），可点"浏览..."选择。
3. 选择"访客访问"档位：
   - **关闭**：禁止匿名访问（推荐默认值）。
   - **只读**：匿名用户可查看和下载。
   - **读写**：匿名用户可新增和修改。
4. 点击"创建共享"。

**权限矩阵（两层控制模型）**

- 共享层统一为 Everyone 允许进入；真正的访问能力由共享目录的 NTFS ACL 决定。
- 选中共享后点击"编辑选中共享权限"，对用户或部门逐行选择五档权限并保存：

| 档位 | 列表/下载 | 新建 | 改写 | 删除 |
|---|---|---|---|---|
| 禁止 | 否 | 否 | 否 | 否 |
| 只读 | 是 | 否 | 否 | 否 |
| 仅上传 | 是 | 是 | 否 | 否 |
| 读写 | 是 | 是 | 是 | 是 |
| 完全控制 | 是 | 是 | 是 | 是 |

> "仅上传"通过仅容器继承的新建 ACE 实现，用户能放入新文件但不能改写已有文件。

**共享维护**

- "停用/启用共享"：停用会断开当前会话并取消发布，但保留本地目录和文件。
- "删除共享"：删除 SMB 发布和权限记录，本地目录和文件仍保留。
- SYSTEM 与 Administrators 的基线权限不允许移除；ACL 应用失败会自动回滚到变更前状态。

### 4.4 快照与审计

**创建快照**

1. 输入要保护的卷（如 `C:\`）。
2. 点击"创建快照"。快照基于 Windows 卷影副本（VSS），不复制文件、瞬间完成。

**浏览与恢复**

1. 在快照列表中选择一条快照。
2. 选择目标共享，点击"浏览快照文件"查看当时的文件树。
3. 选中单个文件或文件夹后点击"恢复选中项"。

恢复规则：

- 恢复不会覆盖现有文件；同名目标自动生成 `_恢复_日期_序号` 副本。
- 单文件恢复时会计算并记录 SHA256 校验值。
- 每次恢复都会写入审计日志。
- 已启用共享的路径受保护：SYSTEM/Administrators 基线之外的操作同样走越界防护。

**审计日志**

- 自动记录账号、共享、权限、快照恢复等关键动作（时间、动作、对象、详情、来源）。
- 点击"导出 CSV"可将当前审计列表导出为表格文件归档。

---

## 5. 客户端操作说明

### 5.1 登录共享

1. 填写"服务器地址"，例如 `192.168.1.20` 或 `FILESERVER`。
   - 不要带 `http://` 或 `https://`。
2. 填写"账号"和"密码"。
   - 可直接填 `服务器名\账号`；未带前缀时客户端会自动尝试 `服务器地址\账号`、`主机名\账号`、`账号` 三种格式。
3. 点击"登录并打开"。成功后会打开 `\\服务器` 根目录，在资源管理器中双击具体共享即可使用。

### 5.2 保存地址与账号密码

登录窗口提供两个选项：

| 选项 | 行为 |
|---|---|
| 保存地址 | 下次启动自动填充服务器地址 |
| 保存账号密码 | 下次启动自动填充账号和密码 |

安全说明：

- 密码使用 Windows DPAPI 按当前 Windows 用户加密后保存于 `client-settings.json`，不是明文；其他用户或拷贝到别的电脑都无法解密。
- 取消勾选"保存账号密码"会立即清除已保存的账号和密文。
- 密码输入框在每次登录结束后都会清空界面显示，但勾选保存时加密副本仍在配置中。

### 5.3 免登录打开（Guest）

若管理员将共享的访客访问设为只读/读写，可不输账号密码，直接点击"免登录打开（Guest）"。Guest 是否可用取决于服务器策略与该共享的访客访问设置。

### 5.4 切换账号

直接再次点击"登录并打开"或"免登录打开（Guest）"即可。客户端会自动完成：

1. 关闭正在浏览该服务器的资源管理器窗口（仅限该服务器）。
2. 断开目标服务器的旧 SMB 会话并清理缓存的凭据。
3. 用新身份重新连接。

Windows 规定同一服务器同一时刻只能有一个登录身份，因此无需手动执行 `net use * /delete`。

> 特殊情况下（后台句柄被系统进程占用导致冲突），客户端会自动短暂重启资源管理器释放会话后重试；桌面和任务栏会闪烁一次，属正常现象。

---

## 6. 升级与备份

### 6.1 升级步骤

1. 退出正在运行的客户端和服务端（或停止后台任务）。
2. 备份 `%ProgramData%\ShareGuard\shareguard.db`（建议连 `-wal`/`-shm` 一起，或先停程序再复制）。
3. 用新 `ShareGuard.Server.exe`、`ShareGuard.Client.exe` 替换旧文件。
4. 重新启动，检查仪表盘共享状态与审计记录是否完整。

### 6.2 备份建议

- 定期导出审计 CSV 归档。
- 数据库备份放入 `%ProgramData%\ShareGuard\backup\` 或异地存储。
- 重要共享依赖 VSS 快照，请确保系统盘/数据盘的系统保护未关闭。

---

## 7. 常见问题（FAQ）

**Q1：提示"不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接"（错误 1219）？**
A：该服务器已被其他身份占用（例如之前用过 Guest）。新版客户端会在登录前自动清理并重试；若仍出现，关闭正在浏览该服务器的资源管理器窗口后再登录一次即可。

**Q2：提示"用户名或密码不正确"（错误 1326）？**
A：确认账号已在服务端"账号与部门"中创建且处于启用状态；注意客户端账号可用 `服务器名\账号` 格式；密码刚被管理员重置后需使用新密码。

**Q3：能看到共享但无法新建文件？**
A：检查该用户/部门的权限档位。"只读"不能新建；需要上传选"仅上传"；需要改删选"读写"或"完全控制"。

**Q4：Guest 登录失败？**
A：在服务端把对应共享的"访客访问"改为只读或读写并保存；部分 Windows 默认拒绝匿名网络登录，需由管理员放开策略（服务端相关设置项已内置处理）。

**Q5：忘记保存的密码想清除？**
A：取消勾选"保存账号密码"，已保存的账号与加密密码会被立即删除。

**Q6：客户端日志在哪里？**
A：`%LOCALAPPDATA%\ShareGuard\client.log`。日志只记录服务器地址、账号格式、连接清理动作和 Windows 错误码，不记录密码。

**Q7：恢复出来的文件在哪？**
A：恢复到原位置旁，同名时生成 `_恢复_日期_序号` 副本，绝不覆盖现有文件。

---

## 8. 安全模型速览

- 双层权限：SMB 共享层只负责放行请求，实际读写能力由 NTFS ACL 控制，避免"给了完全控制却不能写"的经典问题。
- 自锁保护：SYSTEM 与 Administrators 基线 ACE 不可移除，任何 ACL 变更失败自动回滚。
- 最小暴露：客户端不提供手动"登出/清连接"入口，避免误操作；一切清理都在登录流程内自动完成且只针对目标服务器。
- 凭据安全：客户端保存的密码经 DPAPI 加密，绑定当前 Windows 用户与机器；审计与客户端日志均不记录明文密码。

---

*本文档描述的行为以当前发布版本为准；界面如后续迭代有变化，请同步更新本手册。*
