Windows: 企业 EDR(奇安信天擎)拦截 MoveFileExW 导致启动写 index.html 报 EXDEV,CLI 完全无法启动
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 70/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- node.js, typescript
- Lĩnh vực
- cli
Hướng nghiên cứu
Tìm trong mã nguồn CLI việc ghi nguyên tử của index.html bằng renameSync/temp file. Chèn try/catch fallback sang copyFileSync khi EXDEV/EPERM như được gợi ý. Xác minh bằng cách chạy khởi động máy chủ web tích hợp hoặc một unit test cho helper ghi file.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
问题描述
在企业 EDR 环境(奇安信天擎)下,CLI 启动内置 web 服务时用"写临时文件 + 原子改名"生成 index.html,rename 被安全软件过滤驱动拦截并返回 EXDEV,CLI 直接失败退出,无法使用。
Failed to start server: EXDEV: cross-device link not permitted, rename
'C:\Users\Administrator\AppData\Local\kimi-code\web\2.3.1\win32-x64\<hash>\dist-web\index.html.<pid>.<ts>.tmp'
-> '...\dist-web\index.html'
根因分析(已通过系统调用级实验确证)
天擎过滤驱动按目标扩展名(.html/.txt/.docx/.xlsx/.pdf/.jpg/.bat/.ps1 等)拦截特定的改名 API,与目录位置无关(C/D 盘任意目录均复现):
| Win32 API | rename 目标为 .html 等 | rename 目标为 .js/.exe 等 |
|---|---|---|
MoveFileW(普通改名) |
正常 | 正常 |
MoveFileExW(libuv uv_fs_rename 使用) |
ERROR_NOT_SAME_DEVICE (winerr 17) | 正常 |
MoveFileWithProgressW |
ERROR_NOT_SAME_DEVICE | 正常 |
关键点:
- 该拦截不是跨设备问题(各层目录均无 reparse point,同卷内 rename),
EXDEV错误码有强误导性 - 同一环境下普通
MoveFile与"复制+删除"均正常,操作本身可行,仅因 libuv 选择了被拦截的 API - 天擎"信任区"只豁免病毒扫描,不豁免此拦截;Windows Defender 已被第三方接管
- 该模式(tmp+rename 原子写文档类文件)在 Node/npm 生态广泛存在,影响面不限于本 CLI
复现
// Node v24.21.0,装有奇安信天擎的 Windows 机器
const fs = require('fs');
fs.writeFileSync('a.tmp', 'x');
fs.renameSync('a.tmp', 'b.html'); // 抛 EXDEV: cross-device link not permitted
fs.renameSync('a.tmp', 'b.js'); // 正常
对照(ctypes 直调 API):MoveFileExW(src, dst, 0) 和 (src, dst, MOVEFILE_REPLACE_EXISTING) 对 .html 目标均返回 winerr=17;MoveFileW 正常。
建议修复
原子写流程在 rename 失败时增加降级(对正常环境零影响):
try {
fs.renameSync(tmp, target);
} catch (e) {
if (['EXDEV', 'EPERM', 'EBUSY', 'EACCES'].includes(e.code)) {
fs.copyFileSync(tmp, target); // copy 路径不受上述规则影响,已验证
fs.unlinkSync(tmp);
} else {
throw e;
}
}
环境信息
- OS:Windows 10 Pro x64(简体中文),C/D 盘均 NTFS,无符号链接
- kimi-code CLI:2.3.1
- 安全软件:奇安信天擎企业定制版(奇安信过滤驱动层拦截)
- 临时绕过手段均无:天擎策略集中管控,本地无可用的排除项;扩展名白名单/信任区只豁免扫描层
- Ngôn ngữ chính
- TypeScript
- Star
- 8k
- Fork
- 1.3k
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 145
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của MoonshotAI/kimi-code
-
VS Code extension: clickable file links in chat drop the :line suffix, never jump to the lineĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
MoonshotAI/kimi-code#4398 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] vis reports legacy tool-triggered swarm sessions as activeCó thể đã có người làm @louisss1016 đã nhận 2 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
MoonshotAI/kimi-code#4395 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
MoonshotAI/kimi-code#4392 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
MoonshotAI/kimi-code#4369 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
MoonshotAI/kimi-code#4368 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của MoonshotAI/kimi-code
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
scaleway/ultraviolet#7089 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
tencent-connect/dsh-qqbot#81 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: Pen taps on sidebar rows start a drag and lose their clickCó thể đã có người làm @makhnatkin đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
clangd/vscode-clangd#1009 ·