gpt4 book ai didi

go - 如何从用户名切换 Go 中的用户?

转载 作者:IT王子 更新时间:2023-10-29 01:40:20 24 4
gpt4 key购买 nike

我必须用给定的用户名执行这个命令;在 bash 中,它是,

$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,小心操作。

最佳答案

这个包裹http://github.com/kless/go-sysuser可以访问用户名等

syscall package调用设置/获取 UID 等。

关于go - 如何从用户名切换 Go 中的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com