Go에서 os/exec 패키지는 프로그램에서 외부 명령을 실행하는 방법을 제공합니다. 그러나 기본적으로 명령은 프로그램 자체와 동일한 사용자 권한으로 실행됩니다.
다른 사용자 권한으로 명령을 실행하려면 su 또는 bash 명령을 사용하지 않고도 syscall.Credential을 사용할 수 있습니다. 예는 다음과 같습니다.
import ( "os/exec" "syscall" ) func runAsUser(command string, args []string, username string) error { // Look up the target user's UID and GID u, err := user.Lookup(username) if err != nil { return err } uid, err := strconv.Atoi(u.Uid) if err != nil { return err } gid, err := strconv.Atoi(u.Gid) if err != nil { return err } // Create a command and set its SysProcAttr to run as the specified user cmd := exec.Command(command, args...) cmd.SysProcAttr = &syscall.SysProcAttr{ Credential: &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}, } // Run the command return cmd.Run() }
잠재적인 보안 위험으로 인해 권장되지 않지만 syscall.Setuid를 사용하여 유효한 사용자 ID를 변경할 수도 있습니다. 현재 process.
import ( "os" "syscall" ) func setUid(username string) error { // Look up the target user's UID u, err := user.Lookup(username) if err != nil { return err } uid, err := strconv.Atoi(u.Uid) if err != nil { return err } // Set the effective user ID to the specified user return syscall.Setuid(uid) }
참고:
위 내용은 su 또는 bash를 사용하지 않고 Go에서 다른 사용자로 외부 명령을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!