Nextcloud 私有云部署教程 / 07 - 文件分享
07 - 文件分享
掌握 Nextcloud 的文件分享机制:链接分享、群组共享、外部分享、权限控制、过期策略与安全保护。
7.1 分享架构概述
┌─────────────────────────────────────────────────────────┐
│ Nextcloud 分享模型 │
│ │
│ ┌───────────┐ │
│ │ 文件所有者 │ │
│ └─────┬─────┘ │
│ │ │
│ ├── 内部分享 │
│ │ ├── 用户分享 (User Share) │
│ │ ├── 群组分享 (Group Share) │
│ │ ├── 联合分享 (Federated Share) │
│ │ └── 通话分享 (Talk Share) │
│ │ │
│ └── 外部分享 │
│ ├── 公开链接 (Public Link) │
│ ├── 邮件分享 (Mail Share) │
│ └── 即将过期链接 │
│ │
│ 权限层级: │
│ ├── 读取 (Read) = 1 │
│ ├── 更新 (Update) = 2 │
│ ├── 创建 (Create) = 4 │
│ ├── 删除 (Delete) = 8 │
│ ├── 分享 (Share) = 16 │
│ └── 全部权限 (All) = 31 │
└─────────────────────────────────────────────────────────┘
权限值说明
| 权限 | 值 | 说明 |
|---|---|---|
| READ | 1 | 读取文件/目录 |
| UPDATE | 2 | 修改文件/目录 |
| CREATE | 4 | 创建新文件/目录 |
| DELETE | 8 | 删除文件/目录 |
| SHARE | 16 | 进一步分享给他人 |
| ALL | 31 | 上述所有权限 |
7.2 用户分享
通过 Web 界面分享
- 右键文件/文件夹 → 分享
- 输入用户名或群组名
- 选择权限(读取/读写)
- 可选:设置过期时间、密码保护
通过命令行管理分享
# 列出所有分享
sudo -u www-data php /var/www/nextcloud/occ sharing:list
# 查看分享详情
sudo -u www-data php /var/www/nextcloud/occ sharing:show <share_id>
# 删除分享
sudo -u www-data php /var/www/nextcloud/occ sharing:delete <share_id>
通过 API 创建分享
# 创建用户分享
curl -s -u admin:password \
-X POST \
"https://cloud.example.com/ocs/v2.php/apps/files_sharing/api/v1/shares" \
-H "OCS-APIREQUEST: true" \
-d "path=/Documents/report.pdf" \
-d "shareType=0" \
-d "shareWith=colleague" \
-d "permissions=1" \
-d "expireDate=2026-06-01"
# 创建群组分享
curl -s -u admin:password \
-X POST \
"https://cloud.example.com/ocs/v2.php/apps/files_sharing/api/v1/shares" \
-H "OCS-APIREQUEST: true" \
-d "path=/Documents/team-docs" \
-d "shareType=1" \
-d "shareWith=engineering" \
-d "permissions=31"
API 参数说明
| 参数 | 说明 | 可选值 |
|---|---|---|
| path | 文件/文件夹路径 | — |
| shareType | 分享类型 | 0=用户, 1=群组, 3=公开链接, 4=邮件, 6=联邦 |
| shareWith | 目标用户/群组 | 用户名或群组名 |
| permissions | 权限 | 1=读取, 3=读写, 31=全部 |
| expireDate | 过期日期 | YYYY-MM-DD |
| password | 密码 | 字符串 |
| note | 备注 | 字符串 |
7.3 公开链接分享
创建公开链接
# 创建公开链接(只读)
curl -s -u admin:password \
-X POST \
"https://cloud.example.com/ocs/v2.php/apps/files_sharing/api/v1/shares" \
-H "OCS-APIREQUEST: true" \
-d "path=/Public/report.pdf" \
-d "shareType=3" \
-d "permissions=1"
# 创建可上传的公开链接
curl -s -u admin:password \
-X POST \
"https://cloud.example.com/ocs/v2.php/apps/files_sharing/api/v1/shares" \
-H "OCS-APIREQUEST: true" \
-d "path=/Public/uploads" \
-d "shareType=3" \
-d "permissions=15" \
-d "password=AccessCode123" \
-d "expireDate=2026-06-30"
公开链接权限
| 权限组合 | 值 | 效果 |
|---|---|---|
| 只读 | 1 | 仅查看/下载 |
| 可读写 | 3 | 可修改已有文件 |
| 可上传 | 15 | 可上传新文件 |
| 可读写+分享 | 31 | 全部权限 |
7.4 联邦分享(Federated Sharing)
联邦分享允许不同 Nextcloud 实例之间共享文件,无需用户注册。
工作原理
┌───────────────────┐ ┌───────────────────┐
│ Nextcloud A │ │ Nextcloud B │
│ cloud-a.com │ ◄─────► │ cloud-b.com │
│ │ OCM │ │
│ 用户: alice │ 协议 │ 用户: bob │
└───────────────────┘ └───────────────────┘
配置联邦分享
# 确保联邦分享应用已启用
sudo -u www-data php /var/www/nextcloud/occ app:enable federatedfilesharing
# 添加可信服务器
sudo -u www-data php /var/www/nextcloud/occ config:system:set \
federation.ownCloudInstances \
--type=array \
--value "cloud-b.com"
分享方式
# 在分享对话框中输入联邦 ID:
bob@cloud-b.com
# 或者通过链接:
https://cloud-b.com/remote.php/dav/addressbooks/users/bob/
7.5 分享策略管理
全局分享设置
管理后台 → 设置 → 管理 → 分享:
| 设置项 | 说明 | 推荐值 |
|---|---|---|
| 允许用户创建公共链接 | 是否允许公开链接分享 | 视安全需求 |
| 允许公共上传 | 公开链接是否允许上传 | ❌ 生产环境谨慎 |
| 允许用户通过邮件分享 | 通过邮件发送分享链接 | ✅ |
| 允许联邦分享 | 跨实例分享 | 视需求 |
| 强制密码保护 | 公开链接必须设置密码 | ✅ 推荐 |
| 默认过期时间 | 自动过期天数 | 30 天 |
| 允许用户设置过期时间 | 用户是否可自定义过期 | ✅ |
| 限制用户名自动完成 | 限制用户搜索范围 | 视隐私需求 |
命令行配置分享策略
# 强制公开链接密码
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_enforce_links_password --value="yes"
# 设置默认过期天数
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_default_expire_date --value="30"
# 强制过期
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_default_expire_date_enforced --value="yes"
# 禁止公共链接分享
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_allow_links --value="no"
# 禁止公共上传
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_allow_public_upload --value="no"
# 限制分享到特定群组
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
core shareapi_only_share_with_group_members --value="yes"
7.6 群组管理
创建与管理群组
# 创建群组
sudo -u www-data php /var/www/nextcloud/occ group:add engineering
# 添加用户到群组
sudo -u www-data php /var/www/nextcloud/occ group:adduser engineering alice
# 从群组移除用户
sudo -u www-data php /var/www/nextcloud/occ group:removeuser engineering bob
# 列出所有群组
sudo -u www-data php /var/www/nextcloud/occ group:list
# 列出群组成员
sudo -u www-data php /var/www/nextcloud/occ group:list-members engineering
# 删除群组
sudo -u www-data php /var/www/nextcloud/occ group:delete engineering
群组文件夹
# 群组文件夹由管理员在管理后台创建
# 设置 → 管理 → 群组文件夹
# 通过 API 创建群组文件夹
curl -s -u admin:password \
-X POST \
"https://cloud.example.com/ocs/v2.php/apps/groupfolders/folders" \
-H "OCS-APIREQUEST: true" \
-d "mountpoint=Engineering"
7.7 邮件分享
配置邮件服务器
// config/config.php
'mail_smtpmode' => 'smtp',
'mail_smtpsecure' => 'tls',
'mail_from_address' => 'nextcloud',
'mail_domain' => 'example.com',
'mail_smtpauthtype' => 'LOGIN',
'mail_smtpauth' => 1,
'mail_smtphost' => 'smtp.example.com',
'mail_smtpport' => '587',
'mail_smtpname' => 'nextcloud@example.com',
'mail_smtppassword' => 'SmtpPassword',
邮件分享流程
- 用户选择文件 → 分享 → 输入邮箱地址
- 收到邮件,包含分享链接
- 点击链接 → 跳转到 Nextcloud
- 如果有密码,需要输入密码
7.8 分享审计与监控
查看分享统计
# 查看所有公开链接分享
sudo -u www-data php /var/www/nextcloud/occ sharing:list --type=3
# 查看指定用户的分享
sudo -u www-data php /var/www/nextcloud/occ sharing:list --user=admin
分享日志
// config/config.php - 启用详细日志
'loglevel' => 1,
日志中搜索分享相关事件:
# 查看分享相关日志
grep -i "share" /var/log/nextcloud/nextcloud.log | tail -50
自动清理过期分享
# Nextcloud 内置过期分享清理(通过 cron)
# 确保 cron 正在运行
sudo -u www-data php /var/www/nextcloud/occ background:cron
7.9 分享场景最佳实践
场景一:向客户发送文件
1. 创建专用 "客户交付" 文件夹
2. 将文件放入该文件夹
3. 创建带密码的公开链接
4. 设置 7 天过期
5. 通过邮件发送链接和密码(分开发送)
6. 交付完成后手动删除分享
场景二:团队协作目录
1. 创建部门群组(如 "marketing")
2. 创建群组文件夹 "Marketing" 并关联到群组
3. 设置读写权限
4. 群组成员自动看到并可操作该文件夹
场景三:大文件传输
1. 上传大文件到 Nextcloud
2. 创建公开链接分享
3. 设置较大上传限制(如果需要对方上传)
4. 发送链接替代邮件附件
7.10 注意事项
- 密码保护: 生产环境公开链接建议强制密码保护
- 过期时间: 所有公开链接设置合理过期时间,避免长期暴露
- 权限最小化: 仅授予必要的最小权限
- 审计日志: 重要文件分享记录审计日志
- 联邦安全: 联邦分享依赖远程实例的安全性,谨慎选择可信服务器
- 分享传播: 受分享人可以进一步分享(如果授予了 SHARE 权限)