@@ -40,21 +40,36 @@ if (debugIndex !== -1) {
4040
4141export 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