政策檔
政策檔決定有哪些密碼、代理可以怎麼用。它放在 ~/.config/keymitt/policy.toml(Windows 是 %APPDATA%\keymitt\policy.toml),裡面沒有任何密碼值,可以放心收進你的 dotfiles。
version = 1
[approval]
method = "auto"
ttl_secs = 0
timeout_secs = 120
allow_weak = true
[secrets.github]
description = "GitHub fine-grained token"
channels = ["http"]
hosts = ["api.github.com"]
[secrets.pg-staging]
description = "staging DB password"
channels = ["env", "stdin"]
commands = ["/opt/homebrew/bin/psql"]
env = ["PGPASSWORD"]
[files]
read_roots = ["~/projects/infra"]可以手動編輯,也可以用 keymitt add、keymitt allow 與 keymitt disallow。不認得的鍵會被拒絕, 打錯字不會悄悄放寬規則。MCP 伺服器在啟動時讀取政策——修改後要重新啟動。
管道(channels)
管道是密碼抵達目的地的方式。
| 管道 | 值會… |
|---|---|
stdin | 寫進程式的標準輸入 |
env | 設成程式的環境變數 |
file | 寫進僅限擁有者的暫存檔,執行完覆寫後刪除 |
http | 由 keymitt 自己放進 HTTP 請求送出(http_request) |
沒有「命令列參數」這個管道:機器上的其他程序讀得到參數。
執行 keymitt add 沒有指定 --channel 時,keymitt 會依你給的規則挑選:--command 開啟 stdin、env 與 file; --host 開啟 http。
程式
commands 列出可以經由 stdin、env 或 file 收到這組密碼的程式:
| 寫法 | 比對 |
|---|---|
/opt/homebrew/bin/psql | 剛好就是這個檔案 |
psql | 任何在 PATH 絕對路徑目錄裡、名為 psql 的程式——請避免,見下方 |
* | 任何程式——請避免 |
keymitt add --command psql 與 keymitt allow --command psql 會當場解析名稱並存下完整路徑,請優先用它們, 不要手寫名稱;keymitt doctor 會指出只寫名稱的項目。收到請求時,程式只會在 keymitt 自己 PATH 裡的絕對路徑 目錄中尋找——相對或空白的項目會以代理可能控制的目錄為基準,因此一律忽略——./tool 這類相對路徑也會被拒絕。
不要把 shell 或直譯器加進允許清單
sh、bash、python 或 node 拿到密碼之後什麼都做得出來。請改為允許特定的工具。
環境變數名稱
走 env 管道的密碼會放進一個環境變數,而且變數的值必須剛好就是佔位符。會改變程式如何載入程式碼或設定的名稱—— PATH、HOME、LD_*、DYLD_*、BASH_FUNC_*、GIT_*、NODE_*、PYTHON*、CARGO_*、代理伺服器與 CA 變數、 pager 與編輯器等——一律拒絕(NODE_AUTH_TOKEN、CARGO_REGISTRY_TOKEN 這類套件庫 token 例外)。要固定某組密碼能用的名稱:
env = ["PGPASSWORD"]主機
hosts 列出 http_request 可以把密碼送去哪裡:
| 寫法 | 比對 |
|---|---|
api.github.com | 443 埠的 HTTPS,主機完全相同 |
*.example.com | 443 埠的 HTTPS,example.com 的任何子網域(不含 example.com 本身) |
http://127.0.0.1:8080 | 協定、主機與埠完全相同——給本機的明文 HTTP 服務用 |
* | 任何 HTTPS 主機——請避免 |
代理可以讀的檔案
read_file_redacted 只能讀 MCP 伺服器工作目錄底下(用戶端在專案裡啟動伺服器時,就是你的專案)以及 [files] read_roots 列出的目錄。工作目錄如果是家目錄或檔案系統根目錄就不採用。憑證存放處(~/.ssh、~/.aws、 ~/.cloudflared、~/.netrc、鑰匙圈…)與金鑰檔(id_*、*.pem、*.key…)即使在這些目錄裡也一律拒絕。
[files]
read_roots = ["~/projects/infra", "/etc/myapp"]核准設定
| 鍵 | 預設 | 意義 |
|---|---|---|
method | auto | auto:用最強的可用方式,允許時才退回。native:只用強驗證。cli:從終端機核准 |
ttl_secs | 0 | 對「位元組完全相同」的請求記住核准這麼多秒。0 表示每次都問 |
timeout_secs | 120 | 時間內沒人回應就拒絕 |
allow_weak | true | 沒有強驗證可用時,允許不驗證身分的方式 |
各種方式的細節請看核准。