Skip to content

Commit e7ca53d

Browse files
authored
Merge pull request #9 from echoVic/fix/allow-root-in-container
fix: allow root execution in container/sandbox/CI environments
2 parents 1b2a17a + 9f02561 commit e7ca53d

1 file changed

Lines changed: 29 additions & 14 deletions

File tree

packages/cli/src/blade.tsx

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,36 @@ if (debugIndex !== -1) {
4040

4141
export async function main() {
4242
// 🛡️ 防止使用 sudo 运行(避免创建 root 拥有的文件)
43+
// 但允许在容器/沙箱/CI 等天然 root 环境中运行
4344
if (process.getuid && process.getuid() === 0) {
44-
console.error('');
45-
console.error('❌ 请不要使用 sudo 运行 blade');
46-
console.error('');
47-
console.error('原因:');
48-
console.error(' 使用 sudo 会创建属于 root 的配置文件,');
49-
console.error(' 导致普通用户无法访问。');
50-
console.error('');
51-
console.error('正确用法:');
52-
console.error(' blade # 直接运行,不要加 sudo');
53-
console.error('');
54-
console.error('如果遇到权限错误,请运行:');
55-
console.error(' sudo chown -R $USER:$USER ~/.blade/');
56-
console.error('');
57-
process.exit(1);
45+
const isSudo = !!process.env.SUDO_USER;
46+
const isContainer =
47+
!!process.env.container ||
48+
!!process.env.DOCKER_CONTAINER ||
49+
!!process.env.KUBERNETES_SERVICE_HOST;
50+
const isCI = !!process.env.CI;
51+
const isAllowRoot = !!process.env.BLADE_ALLOW_ROOT;
52+
53+
// 只有通过 sudo 提权运行时才阻止,天然 root 环境放行
54+
if (isSudo && !isAllowRoot) {
55+
console.error('');
56+
console.error('❌ 请不要使用 sudo 运行 blade');
57+
console.error('');
58+
console.error('原因:');
59+
console.error(' 使用 sudo 会创建属于 root 的配置文件,');
60+
console.error(' 导致普通用户无法访问。');
61+
console.error('');
62+
console.error('正确用法:');
63+
console.error(' blade # 直接运行,不要加 sudo');
64+
console.error('');
65+
console.error('如果遇到权限错误,请运行:');
66+
console.error(' sudo chown -R $USER:$USER ~/.blade/');
67+
console.error('');
68+
console.error('如果你确实需要以 root 运行(容器/CI),设置环境变量:');
69+
console.error(' BLADE_ALLOW_ROOT=1 blade');
70+
console.error('');
71+
process.exit(1);
72+
}
5873
}
5974

6075
// 初始化优雅退出处理器(捕获 uncaughtException/unhandledRejection/SIGTERM)

0 commit comments

Comments
 (0)