新增RunAsAdmin方法

This commit is contained in:
zyj
2026-03-06 14:29:43 +08:00
parent f24f81e674
commit d567b7b80a
4 changed files with 239 additions and 0 deletions

View File

@@ -171,3 +171,39 @@ func linuxCopyFile(src, dst string) error {
}
return nil
}
// RunAsAdmin 以 root 权限运行命令
// 在 Linux 上通过 sudo 请求 root 权限
// 如果当前已具有 root 权限,则直接执行命令
func (p *LinuxPlatform) RunAsAdmin(ctx context.Context, name string, args ...string) error {
log := logging.G()
// 如果已经是 root 身份,直接执行
if p.IsAdmin() {
log.Debugf("当前已具有 root 权限,直接执行: %s", name)
cmd := exec.CommandContext(ctx, name, args...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
log.Debugf("请求 sudo 权限运行: %s %v", name, args)
// 构建 sudo 命令参数: sudo <name> <args...>
sudoArgs := make([]string, 0, len(args)+1)
sudoArgs = append(sudoArgs, name)
sudoArgs = append(sudoArgs, args...)
cmd := exec.CommandContext(ctx, "sudo", sudoArgs...)
cmd.Stdin = os.Stdin // 转发标准输入以便用户输入密码
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return fmt.Errorf("管理员命令执行失败: %w", err)
}
log.Debugf("管理员命令执行完成: %s", name)
return nil
}