新增RunAsAdmin方法
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user