feat: 添加 Go 内存分配示例并整理笔记
拆分 Go 第三方库笔记并更新索引。 新增 Gitleaks 使用说明,清理过时笔记。
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Gitleaks 使用笔记
|
||||
|
||||
Gitleaks 是扫描疑似密钥的命令行工具,不需要部署 Docker。它通过规则匹配识别令牌、云平台凭据、私钥等;命中不代表凭据仍有效,未命中也不代表绝对安全。
|
||||
|
||||
## Linux 安装
|
||||
|
||||
从 [官方 Releases](https://github.com/gitleaks/gitleaks/releases/latest) 下载对应架构的 Linux 压缩包:`uname -m` 为 `x86_64` 时选 `linux_x64`,为 `aarch64` 时选 `linux_arm64`。核对下载页提供的校验和,解压后安装:
|
||||
|
||||
```sh
|
||||
sudo install -m 0755 gitleaks /usr/local/bin/gitleaks
|
||||
gitleaks version
|
||||
```
|
||||
|
||||
## 提交前自动检测
|
||||
|
||||
在目标 Git 仓库中检查 `.git/hooks/pre-commit` 是否已存在;若存在,将下面的检测命令并入现有脚本,**不要覆盖**。新建时内容为:
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
gitleaks git --staged --redact --verbose .
|
||||
```
|
||||
|
||||
然后运行 `chmod +x .git/hooks/pre-commit`。正常流程是 `git add <文件>` → `git commit -m "提交说明"`:Git 自动执行 hook;发现疑似密钥时命令返回非零状态,提交被阻止。`--redact` 避免在终端输出完整密钥。若设置了 `core.hooksPath`,应在指定的 hook 目录配置,而非 `.git/hooks/`。
|
||||
|
||||
## 手动扫描与测试
|
||||
|
||||
在仓库目录下运行:
|
||||
|
||||
| 命令 | 检查范围 |
|
||||
| --- | --- |
|
||||
| `gitleaks git --staged --redact --verbose .` | 本次暂存变更的新增内容,与上面的 hook 一致 |
|
||||
| `gitleaks git --redact .` | Git 提交历史中的新增内容 |
|
||||
| `gitleaks dir --redact .` | 当前目录中的文件,包括尚未暂存的文件 |
|
||||
|
||||
手动运行第一条命令可以先确认工具正常工作;没有命中通常返回 `0`,发现疑似密钥或扫描出错返回 `1`。普通文件修改不会因为装了 Gitleaks 就被阻止。要验证**自动拦截**,只用无效的模拟令牌测试,并先确认手动扫描能命中;随后运行普通的 `git commit`,预期 hook 阻止提交。若扫描未命中,别贸然提交测试令牌;若意外提交成功,不要推送,先检查 hook 是否执行及暂存内容。
|
||||
|
||||
## 注意事项
|
||||
|
||||
- `--staged` 扫描的是暂存差异中的新增内容,不等于检查每个暂存文件的全部历史内容;未暂存的修改也不在其中。
|
||||
- 本地 hook 通常只对当前仓库有效,且可被 `git commit --no-verify` 绕过;重要项目还应在 CI 中扫描。
|
||||
- 发现真实凭据时,先从暂存内容中移除并修复;若已推送或暴露,应尽快轮换凭据。误报可审慎使用 allowlist 或 `.gitleaksignore`,不要直接忽略未知来源的命中。
|
||||
@@ -1,61 +0,0 @@
|
||||
# Casbin 学习笔记
|
||||
|
||||
> 版本基线:casbin **v3.11.0**;Go import 路径 `github.com/casbin/casbin/v3`(源码仓库 `apache/casbin`)。本文是概念速记,不是教程。
|
||||
> Casbin 负责**授权**(能不能做某事),不负责**身份认证**(你是谁)。
|
||||
|
||||
## 1. 心智模型:PERM
|
||||
|
||||
| 段 | 作用 |
|
||||
|---|---|
|
||||
| `[request_definition]` `r = sub, obj, act` | 一次访问请求长什么样 |
|
||||
| `[policy_definition]` `p = sub, obj, act` | 一条策略规则长什么样 |
|
||||
| `[policy_effect]` `e = some(where (p.eft == allow))` | 多条策略如何合成结论 |
|
||||
| `[matchers]` `m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act` | `r` 与 `p` 如何配对 |
|
||||
|
||||
- `sub, obj, act` 只是最典型的字段,不是硬编码:可加 `dom`、资源属性,也可用对象做 ABAC。
|
||||
- RBAC 再加 `[role_definition] g = _,_`,表示主体与角色的继承关系;`g(a, b)` 意为“a 属于 b”,角色链会递归解析。
|
||||
- 模型只描述“怎么判”,策略才决定“允许谁”,两者可分开存储与更新。
|
||||
|
||||
## 2. 核心组件
|
||||
|
||||
Casbin 运行时由以下组件构成,多数可在不同程度上替换或选配:
|
||||
|
||||
| 组件 | 职责 |
|
||||
|---|---|
|
||||
| Model | PERM 四段组成的规则模型,描述匹配逻辑,不含具体策略 |
|
||||
| Policy | 具体策略规则的集合,可在内存或外部存储 |
|
||||
| Enforcer | 判定入口:把请求套进模型与策略,得到 true/false |
|
||||
| Adapter | 策略的存储读写层(DB/文件等),由应用选配 |
|
||||
| RoleManager | 维护角色继承关系,支撑 `g()` |
|
||||
| Watcher | 感知其他实例的变更并触发重载;Dispatcher 负责派发变更事件 |
|
||||
|
||||
组件协作:Model + Policy 交给 Enforcer 判定;Adapter 负责把 Policy 读入/写出;RoleManager 供 `g()` 解析继承;Watcher/Dispatcher 让多实例感知变更。
|
||||
|
||||
## 3. 判定链与策略示意
|
||||
|
||||
请求 → matcher 匹配 → 命中的策略 effect 合成 → 结果。
|
||||
|
||||
```
|
||||
g, alice, admin # alice 属于 admin
|
||||
p, admin, report, read # admin 可读 report
|
||||
Enforce(alice, report, read) => true # 经角色继承
|
||||
Enforce(bob, report, read) => false # 无授权
|
||||
```
|
||||
|
||||
- 判定按请求逐条扫描策略:matcher 命中后,由 effect 合成最终结论。
|
||||
- `some(where (p.eft == allow))` 是白名单语义:只要有一条 allow 就放行。
|
||||
|
||||
## 4. 关键提醒
|
||||
|
||||
- **deny 与 error 都 fail-closed**:`false` 是判定为拒,`err != nil` 是判定失败;安全场景两者都当拒绝,别把错误当放行。
|
||||
- **并发优先 `SyncedEnforcer`**:常用 API 有锁;普通 `Enforcer` 需自行加锁,也不要假设所有接口都并发安全。
|
||||
- **内存策略不会自动跨实例同步**:Casbin 核心不内置同步,多副本要自己配置 Watcher 通知或周期重载/对账。
|
||||
- **ABAC 能判断单条对象的属性/所有权,但不会自动生成 SQL 查询过滤**,列表与行级数据范围仍需业务层实现。
|
||||
- **迁移 v2 → v3**:只确认 adapter 自身路径带 `/v3` 不够,要核对其 `go.mod` 是否依赖 `github.com/casbin/casbin/v3`;v2 与 v3 的 `model.Model` 是不同 Go 包类型。
|
||||
- `Enforce` 的参数要与 `r` 定义一致,类型/语义由模型与 matcher 决定,不是固定三元组。
|
||||
|
||||
## 官方来源
|
||||
|
||||
- v3.0.0 release(module path 变更):<https://github.com/apache/casbin/releases/tag/v3.0.0>
|
||||
- v3.11.0 `persist/adapter.go`:<https://github.com/apache/casbin/blob/v3.11.0/persist/adapter.go>
|
||||
- ABAC 文档:<https://casbin.org/docs/abac>
|
||||
@@ -1,5 +0,0 @@
|
||||
opencode添加mcp
|
||||
|
||||
```bash
|
||||
opencode mcp add postgres -- npx -y @microsoft/postgres-mcp run
|
||||
```
|
||||
Reference in New Issue
Block a user