mcpField
S
sicherheit

sicherheit

github.com/dischen87其他010 次安装今天更新
代码仓库

关于 sicherheit

sicherheit 是一项德语安全技能,指导用户保护凭据、服务器和项目仓库。内容涵盖预防性检查,以及秘密泄露等事件的应对步骤。

主要功能

  1. 01检查仓库历史中的秘密泄露
  2. 02避免凭据进入 Git 和公开文件
  3. 03在服务器受限的 `.env` 中保存秘密
  4. 04限制公开端口和管理入口
  5. 05检查更新与依赖漏洞
  6. 06应对凭据泄露及安全事件

适用场景

  1. 01部署前审查项目
  2. 02在服务器上设置秘密存储
  3. 03减少对外开放的服务
  4. 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/config
    
    两者都必须返回 404(或 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 检查)。

如果发生了安全事件

  1. 在服务提供商处重新生成密钥,并停用旧密钥。
  2. 检查密钥是否遭到滥用(查看服务提供商处的账单、登录记录和发送列表)。
  3. 如果服务器已被更改,将其恢复到事件发生前的照片(技能 zurueck-auf-gestern)。
  4. 如果涉及他人的数据:通过 coach_fragen 通知 Albatros。对受影响者存在较高风险时,《数据保护法》要求向 EDÖB 报告(DSG 第 24 条)。这不是法律建议。

结束消息

你在此步骤中的最后一条消息要以一句关于“不要把钥匙放在门垫下面”的话开头,再次点明核心。接着说明:完成了什么、结果在哪里、还有什么未完成,以及接下来要做什么。

评论

支持 Markdown