Привет. Вот код, запускаем его с правами рута.
package main
import (
"log"
"syscall"
"os"
)
func main() {
myGid := 1000
myUid := 1000
if syscall.Getuid() == 0 {
log.Printf("USER %s", os.Getenv("USER"))
if err := syscall.Setgid(myGid); err != nil {
log.Fatalf("Error setting gid as %d: %s", myGid, err)
}
if err := syscall.Setuid(myUid); err != nil {
log.Fatalf("Error setting uid as %d: %s", myUid, err)
}
}
log.Printf("My uid is %d, my gid is %d", syscall.Getuid(), syscall.Getgid())
u, _ := syscall.Getenv("USER")
log.Printf("USER %s", u)
}
Выход:
USER root
My uid is 1000, my gid is 1000
USER root
Видно, что привелегии скинулись, но вот доступ к переменным окружения по прежнему root пользователя. Что можно сделать?