本卡屬 FR-195(Agent 資安修正),第 1 批 F5。修 FR-186 掃描的 I2 F1(3/3 票),嚴重度:中。

這張卡做什麼(白話)

主控台的「LDAP 測試連線」會照畫面送來的整組設定(伺服器、埠、帳號、密碼)去連。有 LDAP 設定權限、但不是本機管理員的人,可以拿它叫 Agent 連內網任意機器探路,也能拿來猜 AD 密碼。同一頁其他會改設定的動作都已經限本機管理員,只有這顆漏了。補上。

問題在哪(行號首腦 2026-11-11 對主線 b8b1158 重核過,仍然有效)

改哪些檔

guidant_agent/console/api/ldap_routes.py
test/test_ldap_source.py

怎麼做

行為變更

非本機管理員在主控台按 LDAP「測試連線」會收到 403(AGENT_CONSOLE_LOCAL_ADMIN_REQUIRED)。畫面不用改:同頁其他按鈕對非本機管理員本來就是這個反應。

要補的測試

首腦試做過:加這一行不會讓任何既有測試變紅。在 test/test_ldap_source.py 加一支簡單斷言(該檔已有打 /ldap/test 的測試,grep -n "ldap/test" test/test_ldap_source.py 找到後照同樣寫法):有 ldap.update 但不是本機管理員打 POST /console/api/ops/ldap/test → 403 AGENT_CONSOLE_LOCAL_ADMIN_REQUIRED。既有那幾支打 /ldap/test 的測試若不是用本機管理員身分登入,會變成 403——首腦試做時沒有遇到,若遇到就把登入身分改成 local-admin。

跑測試的方法(首腦實測過,照抄)

🔴 不要 poetry install、不要動共用環境、不要改 pyproject.toml。Agent 主線釘 jedi-agent-protocol==0.6.1,這版還沒推上 Nexus,共用環境裡是 0.6.0,直接跑會 ImportError(KIND_SCAN_RESULT)。用下面的 PYTHONPATH 指到套件 repo 主資料夾就是對的版本。首腦 2026-11-11 在主線 b8b1158(FR-193 rootless 已合回)用這行跑全量:2554 passed、1 skipped、0 failed,約 3 分鐘;工作區裡跑守衛:109 passed,12 秒。

🔴 這台是 zsh:不要把多個檔名存進變數再傳給 pytest(zsh 不拆變數,整串會被當成一個檔名、報「找不到檔案」)。檔名直接寫在指令列上。

改完先跑這張卡相關的測試:

PYTHONPATH="/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-agent-protocol:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-common:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-masking" ~/Library/Caches/pypoetry/virtualenvs/evidence-agent-7jojxvJC-py3.13/bin/python -m pytest test/test_ldap_source.py test/test_fr190_scope_table.py test/test_fr166_guards.py -q -p no:cacheprovider