美文网首页Go语言用例Go知识库
Golang如何让子进程以另一个用户身份运行

Golang如何让子进程以另一个用户身份运行

作者: CodingCode | 来源:发表于2018-05-04 22:50 被阅读11次

Golang如何让子进程以另一个用户身份运行

当父进程launch一个子进程的时候,如何使得子进程使用另一个用户身份运行。

前提条件当前用户得用足够的权限切换到另一个用户,所以通常父进程是root。

下面的例子是root用户的父进程,如何launch一个子进程,并且使得子进程以nobody的身份在运行(nobody是*nix操作系统的内置账号)。

package main

import (
    "os"
    "log"
    "syscall"
    "strconv"
    "os/exec"
    "os/user"
)

func main() {
    cmd := exec.Command("./subcommand")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    user, err := user.Lookup("nobody")
    if err == nil {
       log.Printf("uid=%s,gid=%s", user.Uid, user.Gid)

       uid, _ := strconv.Atoi(user.Uid)
       gid, _ := strconv.Atoi(user.Gid)

       cmd.SysProcAttr = &syscall.SysProcAttr{}
       cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}
    }

    err = cmd.Run();
    if err != nil {
        log.Fatal(err)
    }
}

其中关键的命令就是两行

cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}

先查找到nobody用户的uid和gid,然后调用syscall.Credential对象。

注意上述的操作都需要特权,通常只有root用户才有这个权限。

相关文章

  • Golang如何让子进程以另一个用户身份运行

    Golang如何让子进程以另一个用户身份运行 当父进程launch一个子进程的时候,如何使得子进程使用另一个用户身...

  • Linux用户及权限管理

    系统用户 为了能够让后台进程或服务类进程以非管理员身份运行,通常需要为此创建多个普通用户:这类用户从不用登录系统 ...

  • Linux组和用户权限管理

    系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户:这类用户从不用登录系...

  • golang子进程的的标准输出和标准错误

    golang子进程的的标准输出和标准错误 使用exec.Run()运行子进程的时候,子进程的标准输入输出在哪里呢。...

  • note_7.5_Linux特殊权限及facl扩展

    Linux系统上的特殊权限 特殊权限:SUID,SGID,STICKY 安全上下文:  进程以某用户的身份运行; ...

  • day11-特殊权限

    1.suid 进程能够以何种身份去查看一个文件,取决于运行这个进程的用户有没有对这个文件有没有权限 列:用户在改密...

  • day11-特殊权限-笔记

    Day11-特殊权限 导读 进程能够以何种身份去查看一个文件,取决于运行这个进程的用户对这个文件有没有权限昨日回顾...

  • 用户和用户组的管理

    一、安全上下文协议 Linux 安全上下文运行的程运行中的程序:进程 (process)以进程发起者的身份运行: ...

  • Linux(11)用户基础(用户、组)

    当我们使用Linux时,需要以一个用户的身份登入,一个进程也需要以一个用户的身份运行,用户限制使用者或进程可以使用...

  • 用户权限、特殊权限和ACL.md

    1.基本概念 linux 安全上下文 运行中的程序:进程 (process)以进程发起者的身份运行:root: /...

网友评论

    本文标题:Golang如何让子进程以另一个用户身份运行

    本文链接:https://www.haomeiwen.com/subject/juijrftx.html