关于 sicherheit
sicherheit 是一项德语安全技能,指导用户保护凭据、服务器和项目仓库。内容涵盖预防性检查,以及秘密泄露等事件的应对步骤。
主要功能
- 01检查仓库历史中的秘密泄露
- 02避免凭据进入 Git 和公开文件
- 03在服务器受限的 `.env` 中保存秘密
- 04限制公开端口和管理入口
- 05检查更新与依赖漏洞
- 06应对凭据泄露及安全事件
适用场景
- 01部署前审查项目
- 02在服务器上设置秘密存储
- 03减少对外开放的服务
- 04处理已泄露的凭据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dischen87/ albatros-skills --skill sicherheit安装后在 Claude Code 中输入/sicherheit确认已加载。
详细介绍
安全:别把钥匙放在门垫下
这个比喻
一栋房子有多安全,取决于它最疏忽的时刻。窃贼找的不是最牢固的锁,而是门垫下的钥匙和开着的地下室窗户。
- 机密信息(密码、API 密钥、私钥)就是钥匙。它们应该放进保险库,绝不能放在门垫下。
- 日志簿(Git)不是门垫,而是橱窗:一旦写进去,就会一直显示在所有旧记录中。
- 门窗就是通往服务器的开放入口。只开必要的入口。
- 更新就像新锁:旧锁的开锁方法一旦泄露,就得换新锁。
如何使用这个比喻: 在你的第一条回复中先告诉对方,再提问或展示命令,即使对方一上来就想要解决方案。
如何沟通
- 不要只提问: 如果缺少项目或某项信息,仍要给出具体步骤,或先把文件写成草稿,并标明假设(
[假设:…])。最后再询问缺少的内容。 - 使用“你”来称呼对方,语气平和,但表达清楚。如果机密信息已经公开,就要立即处理,不要指责任何人。
- 绝不大声读出机密信息,不输出机密信息,也不把它写进聊天、提交说明或日志。
- 公钥(例如用于统计的
phc_…或 Stripe 的pk_…)不是机密信息。机密信息通常可以从开头辨认:sk_…、ghp_…、-----BEGIN … PRIVATE KEY-----。
流程
使用 Light 时,Albatros 发布的所有内容都是公开的,包括没有任何链接指向的内容:seite/ 文件夹。如果没有这个文件夹,就是 public/,甚至可能是整个仓库,包括 docs/。因此,网站应放在 seite/ 中。这里绝不能放入机密信息。第 1 步和第 2 步仍然适用。与服务器、.env 和端口有关的内容,只有在使用 Pilot 时才适用。
1. 门垫下已经有东西了吗?
git ls-files | grep -E '(^|/)\.env(\..+)?$' | grep -v '\.env\.example$'
git log -p --all | grep -nE -- '-----BEGIN [A-Z ]*PRIVATE KEY-----|sk_live_|sk_test_|ghp_[A-Za-z0-9]{20,}|password *[=:]' | head
如果发现了什么:立即在提供商处重新生成(轮换),并使旧值失效。仅从仓库中删除并不够,旧记录仍会留在日志簿和港口中。之后再清理。
2. 保险库
.gitignore中包含.env、.env.*和!.env.example。对方会和你一起检查。- 仓库中的
.env.example会列出所需的机密信息,并将值留空。 - 在服务器上,实际值保存在
~/projekt/.env中,且只有你能读取:
由对方自行填写值(ssh {name}@aufwind.sh 'cd ~/projekt && umask 077 && touch .env && chmod 600 .env'nano ~/projekt/.env),以免它们出现在你的记录中。 - 对于流水线: 它运行在你的服务器上,网站从
.env中读取机密信息。如果工作流中的某个步骤确实需要机密信息,就把它放进港口的保险库(在仓库的设置、Actions、Secrets 中),并且在工作流中只通过env:传给命令(技能pipeline)。 - 在 Dockerfile 中: 添加包含
.env、.git、node_modules的.dockerignore。否则,构建时会把.env一并打包进去。
3. 每种用途使用一把钥匙
对方的房屋钥匙(用于服务器和港口)、服务器用于读取港口的钥匙,以及之后在自有服务器上使用的流水线钥匙:每种用途各用一把。如果有一把丢失,只需更换对应的锁(在驾驶舱中操作,或使用 schluessel_hinterlegen)。
4. 门窗
在 Albatros 上,平台负责看好大门(防火墙、防止密码猜测攻击)。你要留意自己开放的入口:
- 在
compose.yaml中,只将网站的 80 端口开放给外部。其他所有服务(数据库、CMS、管理界面)都只绑定到127.0.0.1,例如"127.0.0.1:5432:5432",或者完全不要发布。否则,Docker 会绕过所有防火墙开放端口。 - 管理区域只能通过隧道访问(技能
cms)。 - 检查是否有内部内容被提供出去:
两者都必须返回curl -s -o /dev/null -w '%{http_code}\n' https://{name}.aufwind.sh/.env curl -s -o /dev/null -w '%{http_code}\n' https://{name}.aufwind.sh/.git/config404(或403)。
5. 更新
- 在服务器上:
apt list --upgradable会显示待安装的更新。安装较大的更新前先拍一张照片(技能zurueck-auf-gestern),然后运行sudo apt update && sudo apt upgrade。 - 在项目中:
npm audit(如果有package.json)会显示组件中已知的安全漏洞。
6. 尽量少给权限
- 工作流只获取所需的密钥。在 GitHub 上(迁移后,技能
landung),还要添加permissions: contents: read。 - 如果模板允许,不要以 root 身份在容器中运行程序(Dockerfile 中的
USER)。 - 每位协作者都使用自己的账号,不要共用账号。
7. 检查任务
检查日志和流水线(技能 git-logbuch、pipeline),然后使用 flugschule-07-sicherheit 运行 mission_pruefen。检查会查看项目中的 .gitignore 是否包含 .env(在服务器上用 Pilot 检查 ~/projekt,在港口用 Light 检查)。
如果发生了安全事件
- 在服务提供商处重新生成密钥,并停用旧密钥。
- 检查密钥是否遭到滥用(查看服务提供商处的账单、登录记录和发送列表)。
- 如果服务器已被更改,将其恢复到事件发生前的照片(技能
zurueck-auf-gestern)。 - 如果涉及他人的数据:通过
coach_fragen通知 Albatros。对受影响者存在较高风险时,《数据保护法》要求向 EDÖB 报告(DSG 第 24 条)。这不是法律建议。
结束消息
你在此步骤中的最后一条消息要以一句关于“不要把钥匙放在门垫下面”的话开头,再次点明核心。接着说明:完成了什么、结果在哪里、还有什么未完成,以及接下来要做什么。