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

我必须使用给定的用户名执行此命令;扑朔迷离


$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,请谨慎进行。


料青山看我应如是
浏览 302回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go