为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Go中从用户名切换用户?

如何在Go中从用户名切换用户?

Go
料青山看我应如是 2021-04-05 17:15:31
我必须使用给定的用户名执行此命令;扑朔迷离$su devrim -c "touch miki"我想,首先我需要从用户名获取uid,并在执行ForkExec之前使用setuid。你可以建议吗?我该怎么做呢 ?(ps:我没有uid,只有用户名)func exec(cmd *Command, async bool) os.Error {    parts := strings.Fields(cmd.Command)    command := parts[0]    // cmd.Su holds the username "root" or "myUser"    pid, err := os.ForkExec(command, parts, os.Environ(), "", []*os.File{nil, cmd.Stdout, cmd.Stderr})    cmd.Pid = pid    if !async {        os.Wait(pid, 0)    }    return nil}编辑:由于该sysuser的东西不起作用,我看到它只是解析/ etc / passwd,所以我决定自己做:func getUid(su string) int{    passwd,_ := os.Open("/etc/passwd", os.O_RDONLY , 0600)    reader := bufio.NewReader(passwd)    for {        line,err := reader.ReadString('\n')        if err != nil {             println(err.String())             break        }        parsed := strings.Split(line,":",4)        if parsed[0] == su {            value,_ := strconv.Atoi(parsed[2])            return value        }    }    return -1}我不确定所有/ etc / passwd是否在* nix上都相同,我们使用debian和ubuntu,请谨慎进行。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 301 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信