【发布时间】:2014-03-09 11:32:33
【问题描述】:
使用os/exec 包,我想代表另一个用户在*nix OS 上运行一个外部命令(当然go 进程在另一个具有su 权限的用户的root 用户下运行)
我想避免使用“su”或“bash”命令,并完全使用 go。
我使用syscall.Setuid 做了一个方法,但这会将用户更改为主项目,我只需要将用户更改为外部子进程:
func (self *Command) LoseTo(username string) {
u, err := user.Lookup(username)
if err != nil {
fmt.Printf("%v", err)
}
uid, err := strconv.Atoi(u.Uid)
if err := syscall.Setuid(uid); err != nil {
fmt.Printf("%v", err)
}
}
【问题讨论】: