使用该os/exec包,我想代表另一个用户在*nix OS上运行外部命令(当然是在具有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)
}
}
Run Code Online (Sandbox Code Playgroud)
Jim*_*imB 26
您可以向Cmd.SysProcAttr添加syscall.Credential结构
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6795 次 |
| 最近记录: |