前言:
眼前小伙伴们对“phpusenamespace”大体比较注意,我们都想要学习一些“phpusenamespace”的相关内容。那么小编在网络上收集了一些对于“phpusenamespace””的相关内容,希望各位老铁们能喜欢,看官们快快来了解一下吧!User Namespace主要是隔离用户的用户组ID。也就是说每一个进程的User ID和Group ID在User Namespace内外可以是不同的。比较常用的是,在宿主机上以一个非root用户运行创建一个User Namesapce,然后在User Namespace里面却映射成root用户。这意味着,这个进程在User Namespace里面有root权限,但是在User Namesapce外面却没有root的权限。从Linux Kernel 3.8开始,非root进程也可以创建User Namespace,并且用户在Namespace里面可以被映射成root,且在Namespace内有root权限。
下面,继续以一个例子来描述,代码如下:
package mainimport ( "log" "os" "os/exec" "syscall")func main() { cmd := exec.Command("sh") cmd.SysProcAttr = &syscall.SysProcAttr{ Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS | syscall.CLONE_NEWUSER, } cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { log.Fatal(err) } os.Exit(-1)}
本例在原来的基础上增加了syscall.CLONE_NEWUSER。首先,以root来运行这个程序,运行前在宿主机上来看一下当前的用户和用户组,显示如下:
可以看到我们是root用户,接下来运行一下程序。
可以看到,它们的UID是不同的,因此说明User Namespace生效了。
标签: #phpusenamespace