强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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                            │
└─────────────────────────────────────────────────────────┘

权限值说明

权限说明
READ1读取文件/目录
UPDATE2修改文件/目录
CREATE4创建新文件/目录
DELETE8删除文件/目录
SHARE16进一步分享给他人
ALL31上述所有权限

7.2 用户分享

通过 Web 界面分享

  1. 右键文件/文件夹 → 分享
  2. 输入用户名或群组名
  3. 选择权限(读取/读写)
  4. 可选:设置过期时间、密码保护

通过命令行管理分享

# 列出所有分享
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:
[email protected]

# 或者通过链接:
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' => '[email protected]',
'mail_smtppassword' => 'SmtpPassword',

邮件分享流程

  1. 用户选择文件 → 分享 → 输入邮箱地址
  2. 收到邮件,包含分享链接
  3. 点击链接 → 跳转到 Nextcloud
  4. 如果有密码,需要输入密码

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 注意事项

  1. 密码保护: 生产环境公开链接建议强制密码保护
  2. 过期时间: 所有公开链接设置合理过期时间,避免长期暴露
  3. 权限最小化: 仅授予必要的最小权限
  4. 审计日志: 重要文件分享记录审计日志
  5. 联邦安全: 联邦分享依赖远程实例的安全性,谨慎选择可信服务器
  6. 分享传播: 受分享人可以进一步分享(如果授予了 SHARE 权限)

7.11 扩展阅读


上一章: 06 - 应用生态 下一章: 08 - 客户端 — 桌面客户端、移动端与 WebDAV 同步。