搭建属于你的一次性私密信息共享平台 (OTS) - 保姆级教程

在数字时代,如何安全地将密码、API 密钥或敏感配置发送给同事或朋友?直接通过微信、钉钉或邮件发送是非常不安全的,因为这些记录会永久保存在服务器和聊天记录中。

OTS (One-Time Secret) 系统就是为了解决这个问题而生的。它允许你创建一个“阅后即焚”的链接,一旦接收者查看了信息,该信息就会从服务器上永久删除。

本文将手把手教你如何搭建一个开源的 OTS 平台(以经典的 One-Time Secret 为例)。


🛠️ 什么是 OTS?有什么用?

核心功能:

  1. 生成私密链接:你输入敏感信息(如密码),系统生成一个唯一的 URL。
  2. 阅后即焚:对方打开链接查看后,数据立即从数据库物理删除。第二次访问该链接将显示“内容不存在”。
  3. 密码保护:可以额外设置访问密码,双重保险。
  4. 有效期控制:如果对方在指定时间内(如 2 天)没查看,信息也会自动过期销毁。

👥 适用人群

  • 系统管理员/运维 (DevOps):发送服务器 root 密码、数据库凭证。
  • 开发人员:共享 API Token、Secret Key。
  • 企业团队:内部敏感信息流转。
  • 注重隐私的个人:给朋友发送银行卡号、私钥等。

⚠️ 隐私与安全警示 (必读)

虽然 OTS 提供了阅后即焚机制,但在自建过程中必须注意:

  1. 必须配置 HTTPS:如果使用 HTTP,传输过程是明文的,阅后即焚也毫无意义。请务必使用 Nginx 反代并配置 SSL 证书。
  2. 服务器安全:确保你的服务器本身是安全的,定期更新系统补丁。
  3. 信任链:自建的优势在于数据掌握在自己手中,不需要信任第三方服务商。

🚀 部署教程

我们将介绍两种安装方式:Docker 容器化部署(强烈推荐,简单稳定)源码编译部署(适合无 Docker 环境)

方案一:Docker 部署 (推荐)

Docker 是最快、最干净的部署方式,不需要在系统里安装繁杂的 Ruby 环境。

1. 环境准备

确保服务器已安装 Docker 和 Docker Compose。

1
2
3
4
# 检查 Docker 版本
docker --version
# 检查 Docker Compose 版本
docker-compose --version

2. 创建部署目录

1
2
mkdir -p ~/ots-docker
cd ~/ots-docker

3. 编写 docker-compose.yml

创建并编辑文件:

1
vim docker-compose.yml

填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'

services:
redis:
image: redis:6.2-alpine
container_name: ots-redis
restart: always
volumes:
- ./redis_data:/data

onetimesecret:
image: onetimesecret/onetimesecret:latest
container_name: onetimesecret
restart: always
depends_on:
- redis
ports:
- "7143:7143"
environment:
- REDIS_URL=redis://redis:6379/0
- SECRET=请替换为一个随机的长字符串作为加密盐
- HOST=your-domain.com # 替换为你的域名或 IP
- SSL=false # 如果前端有 Nginx 处理 SSL,这里填 false
volumes:
- ./data:/var/lib/onetime

4. 启动服务

1
docker-compose up -d

5. 验证

访问 http://你的IP:7143。如果你看到了简洁的 One-Time Secret 界面,说明部署成功!


方案二:源码部署 (无 Docker 环境)

One-Time Secret 基于 Ruby 和 Redis。这种方式步骤较多,适合需要深度定制的用户。

1. 安装依赖 (以 Ubuntu/Debian 为例)

1
2
sudo apt-get update
sudo apt-get install -y build-essential ruby ruby-dev libyaml-dev libevent-dev zlib1g-dev libssl-dev redis-server

2. 启动 Redis

确保 Redis 在后台运行:

1
2
sudo systemctl enable redis-server
sudo systemctl start redis-server

3. 下载源码

1
2
3
4
cd /var/www  # 或者其他你喜欢的目录
sudo git clone https://github.com/onetimesecret/onetimesecret.git
sudo chown -R $USER onetimesecret
cd onetimesecret

4. 安装 Ruby Gems

这是最容易报错的一步,确保你的 Ruby 源网络通畅。

1
2
gem install bundler
bundle install --deployment --without=dev test

5. 配置文件

复制默认配置文件并修改:

1
2
cp etc/config.example etc/config
vim etc/config

重点修改 site 部分:

  • host: 你的域名或 IP
  • secret: 设置一个随机密钥

6. 运行服务

可以使用内置的 Web 服务器启动(生产环境建议配合 Nginx):

1
bin/onetime-server start

默认监听端口为 :7143


🌐 域名访问与 HTTPS (Nginx 反向代理)

为了安全,不建议直接暴露 7143 端口,建议使用 Nginx 反代并配置 SSL。

Nginx 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name secrets.yourdomain.com;
# 强制跳转 HTTPS (建议配置)
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name secrets.yourdomain.com;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

location / {
proxy_pass http://127.0.0.1:7143;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}

📝 如何使用

  1. 输入信息:打开你的 OTS 网站,在文本框中粘贴密码或敏感文本。
  2. 设置选项(可选):
    • 设置一个提取密码(Passphrase):对方不仅需要链接,还需要这个密码才能看。
    • 设置有效期:例如 7 天(虽然看过一次就会销毁,但如果对方一直没看,7天后也会自动销毁)。
  3. 生成链接:点击 “Create a secret link”。
  4. 发送:复制生成的 URL,通过微信/邮件发给对方。
  5. 销毁:对方点击链接查看内容。此时你若尝试再次访问该链接,系统会提示“Unknown Secret”或内容已不存在。

🎯 总结

搭建一个私有的 OTS 平台是提升团队信息安全意识的低成本、高回报手段。它切断了敏感信息在聊天记录中的“永生”,让数据只在需要的时刻存在。

记住:最好的秘密,是阅后即焚的秘密。