croc 如何部署加密存储传输服务并配置下载与过期策略?

croc 如何部署加密存储传输服务并配置下载与过期策略? croc 如何部署加密存储传输服务并配置下载与过期策略【免费下载链接】crocEasily and securely send things from one computer to another :crocodile: :package:项目地址: https://gitcode.com/GitHub_Trending/cr/croc本文解决的任务是在自有服务器上部署 croc 的统一 Web 服务croc-web启用它的加密存储传输stored transfers模式并配置服务端的下载次数上限与过期时长策略使发送方上传的密文文件可以按策略被下载或自动删除。适用对象是需要自建服务的运维者croc-web是随发布单独发布的 Linux amd64 二进制也可以从源码构建需要 Go 1.27。存储模式默认关闭只有显式配置存储目录后才会启用。准备条件获取croc-web二进制从项目发布中获取 Linux amd64 构建版本或在仓库根目录执行make build-web从源码构建。该目标会先构建并嵌入前端资源再编译出croc-web部署后的croc-web二进制不需要额外的静态文件目录。准备一个持久化、私有的存储目录只允许 croc 服务账户读写。存储目录会被服务端加独占锁不要将多个进程指向同一目录。准备一个 HTTPS 反向代理TLS 证书保留在代理侧。存储传输是 croc 的可选异步模式发送方在本地用随机 256 位主密钥加密文件服务上只存放密文协议名为croc-store-v1清单与每个 4 MiB 分块都使用 AES-256-GCM。完整协议、隐私边界和状态机定义见 src/docs/STORED_TRANSFERS.md。启动服务并启用存储最小可执行启动命令文档中的示例域名为files.example.com替换为你的公开主机名croc-web \ --bind 127.0.0.1:9014 \ --store-dir /var/lib/croc/store \ files.example.com参数说明--bind 127.0.0.1:9014本地监听地址。不指定时默认就是127.0.0.1:9014即面向 HTTPS 反向代理部署。--store-dir /var/lib/croc/store存储目录。加上它才会启用存储模式目录要求持久、私有、仅 croc 服务账户可写。末尾的files.example.com网站 origin生成的浏览器分享链接使用浏览器加载页面时所用的 origin。服务启动时会从元数据重建配额与未完成上传的计数之后每分钟清扫未完成、已过期和终态记录。以非特权账户运行服务监控磁盘剩余空间和 HTTP429/507响应将密文排除在备份之外否则下载耗尽即删除的语义会被备份恢复破坏。配置下载次数与过期策略服务端通过以下标志限制每个传输可请求的策略上限默认值来自 src/docs/STORED_TRANSFERS.md 与 src/webcli/webcli.go两者一致标志默认值用途--store-max-transfer1GiB单次传输最大明文字节数上限2GiB--store-quota5GiB所有传输占用的密文总上限--store-min-free512MiB磁盘必须保留的剩余空间--store-max-files100单次传输最大常规文件数--store-downloads1发送方可请求的最大验证下载次数--store-max-expiration0发送方可选生命周期的上限0表示不设策略上限--store-create-rate5每客户端 IP 每小时允许的创建数--store-active-uploads2每客户端 IP 并发未完成上传数--store-trusted-proxy无可重复的受信反向代理 CIDR下载与过期这两项还可以通过环境变量配置CROC_STORE_DOWNLOADS和CROC_STORE_MAX_EXPIRATION显式命令行标志优先于环境变量。过期值的格式规则由 src/store/expiration.go 中的解析逻辑定义使用整数的m分钟、h小时、d天、w周单位最小为 1 分钟服务端上限为0或空表示允许任意有限时长发送方请求超过服务端上限的值会被静默降低到上限被接受的时长在传输创建时固化之后修改策略不会改变已创建传输的有效期。web/README.md 给出的一个完整示例文档示例可直接作为配置参考croc-web \ --bind 127.0.0.1:9014 \ --store-dir /var/lib/croc/store \ --store-max-transfer 1GiB \ --store-quota 5GiB \ --store-min-free 512MiB \ --store-max-expiration 2w \ getcroc.com字节类标志接受整数加B、KB、MB、GB、TB、KiB、MiB、GiB、TiB后缀。发送方在上传时逐项指定自己请求的值不能超过服务端上限croc send --store --store-url https://files.example.com --store-downloads 3 --store-expiration 3d photo.jpg document.pdf其中--store-url用于指向自托管服务也可以用环境变量CROC_STORE_URL设置。不传--store-expiration时默认一天从上传成功完成时起算。传输在配置的下载次数用完与选定寿命到期两者先发生者被删除。反向代理要求将整个 origin 放到 HTTPS 后面并把所有路径代理到同一个croc-web进程包括/api/v1/store、/ws、Web 静态资源和存储分享路由。代理需保留原始Host头并且不要缓存 API。服务端返回的完整端点见 web/README.md/网站、/config.js、/healthz、/ws以及配置了--store-dir时的/api/v1/store/transfers。--store-trusted-proxy只在反向代理会重写客户端转发头如X-Forwarded-For的基础设施上配置可重复传入多个 CIDR不可信的转发头会被忽略限流直接使用 socket 对端地址。验证部署按顺序做两个检查健康检查。croc-web暴露GET /healthz本机验证wget -qO- http://127.0.0.1:9014/healthz /dev/null项目自带的 disco.json 中 web 服务的健康检查用的就是这一条命令。走一遍完整的存储传输链路发送方执行上一节的croc send --store ...命令输出应包含浏览器链接形如https://files.example.com/s/id#v1.key、一个croc-store-v1...CLI token、精确的过期时间和一个可传给croc --revoke的传输 ID。核对过期时间是否符合你设置的--store-max-expiration策略。接收方运行croc在提示处粘贴 token 或链接非交互场景用环境变量避免 token 出现在进程列表中CROC_STORE_TOKENcroc-store-v1.... croc --out ./received接收端会先解密清单展示文件名与大小确认后下载分块、逐块认证、对每个完整文件做 SHA-256 校验全部通过后才提交一次允许下载。最后一个允许的下载提交后密文立即删除。在传输仍可用时发送方可以用croc --revoke transfer-id主动撤销CLI 的撤销凭据以0600权限保存在 croc 配置目录中。行为边界与运行限制下载是独占的传输被某个接收方 claim 后锁定最长 30 分钟随分块读取续期因此配置的下载次数是逐个兑现而不是并发。终态consumed、revoked、expired的密文立即删除只留一个小 tombstone 24 小时让调用方得到稳定的终态结果。浏览器链接中的#片段解密密钥不会进入 HTTP 请求、Referer或服务端日志但完整链接仍是 bearer 秘密任何能读到它的人都可以解密文件并占用一次下载。通过私密渠道分享。存储模式只接受常规文件文本消息只支持直连模式服务能得知连接元数据、密文长度、声明的文件/分块数等配额信息但无法从存储数据得知文件名、内容或主密钥。服务对存储目录持有独占锁指向同一目录的第二个进程无法启动扩容不是靠多进程共享目录实现的。可选用容器部署仓库根目录的 Dockerfile 同时构建croc与croc-web以nobody用户运行入口脚本 croc-entrypoint.sh 在web子命令下支持以下环境变量映射STORE_DIR→--store-dir、SITE_URL→ 位置参数、CROC_PASS→--pass、CROC_RELAY_PORTS或CROC_PORTS→--ports。disco.json 中 web 服务的配置是web --debug --bind 0.0.0.0:8080 --store-dir /www/croc/storage并将命名卷croc-store挂到/www/croc/storage使密文与元数据在容器替换后保留。README.md 的 Deployment 一节说明该卷还有防并发机制web 服务额外发布 TCP 端口 9020 映射到未使用的容器端口 65535Disco 会因端口冲突先停掉持有卷的旧实例再启动新实例端口 9020 本身不承载应用流量应保持被防火墙封锁。若走 Disco 部署CROC_RELAY_PORTS必须与 disco.json 中 relay 服务的publishedPorts保持一致且服务器防火墙需放行对应 relay 端口。部署完成后日常运维关注两点磁盘剩余空间是否逼近--store-min-free以及 HTTP429/507是否出现——前者表示配额或保留空间策略在拒绝新传输后者通常对应配额耗尽。【免费下载链接】crocEasily and securely send things from one computer to another :crocodile: :package:项目地址: https://gitcode.com/GitHub_Trending/cr/croc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考