我正在调试一个程序,但不太清楚为什么我不能删除权限。
我有 root 权限sudo,可以调用setgid/setuid,但[is]不支持该操作。
重现的基本代码(golang):
package main
import (
"fmt"
"os"
"strconv"
"syscall"
)
func main() {
if os.Getuid() != 0 {
fmt.Println("run as root")
os.Exit(1)
}
uid, err := strconv.Atoi(os.Getenv("SUDO_UID"))
check("", err)
gid, err := strconv.Atoi(os.Getenv("SUDO_GID"))
check("", err)
fmt.Printf("uid: %d, gid: %d\n", uid, gid)
check("gid", syscall.Setgid(gid))
check("uid", syscall.Setuid(uid))
}
func check(message string, err error) {
if err != nil {
fmt.Printf("%s: %s\n", message, err)
os.Exit(1)
}
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
$ sudo ./drop-sudo
uid: 1000, …Run Code Online (Sandbox Code Playgroud)