43 lines
941 B
Go
43 lines
941 B
Go
//go:build !windows
|
|
|
|
package sysutil
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
|
|
"github.com/gookit/goutil/strutil"
|
|
)
|
|
|
|
// IsAdmin Determine whether the current user is an administrator(root)
|
|
func IsAdmin() bool {
|
|
return os.Getuid() == 0
|
|
}
|
|
|
|
// ChangeUserByName change work user by new username.
|
|
func ChangeUserByName(newUname string) error {
|
|
u := MustFindUser(newUname)
|
|
// syscall.Setlogin(newUname)
|
|
return ChangeUserUIDGid(strutil.MustInt(u.Uid), strutil.MustInt(u.Gid))
|
|
}
|
|
|
|
// ChangeUserUidGid change work user by new username uid,gid
|
|
//
|
|
// Deprecated: use ChangeUserUIDGid instead
|
|
func ChangeUserUidGid(newUID int, newGid int) error {
|
|
return ChangeUserUIDGid(newUID, newGid)
|
|
}
|
|
|
|
// ChangeUserUIDGid change work user by new username uid,gid
|
|
func ChangeUserUIDGid(newUID int, newGid int) (err error) {
|
|
if newUID > 0 {
|
|
err = syscall.Setuid(newUID)
|
|
|
|
// update group id
|
|
if err == nil && newGid > 0 {
|
|
err = syscall.Setgid(newGid)
|
|
}
|
|
}
|
|
return
|
|
}
|