Go에서는 os/exec 패키지를 사용하여 다른 사용자를 대신하여 외부 명령을 실행할 수 있습니다. . 이는 애플리케이션이 루트로 실행되고 다른 사용자 권한으로 명령을 실행해야 할 때 특히 유용합니다.
이를 달성하는 한 가지 방법은 syscall.Credential 구조체를 활용하는 것입니다. Cmd 개체의 SysProcAttr 필드에 이 구조체를 추가하면 외부 프로세스에 대한 사용자 ID(Uid) 및 그룹 ID(Gid)를 지정할 수 있습니다. 이렇게 하면 명령이 지정된 사용자의 권한으로 실행됩니다.
예는 다음과 같습니다.
import ( "os/exec" "syscall" ) func main() { // Get the user ID and group ID for the desired user. u, err := user.Lookup("username") if err != nil { fmt.Printf("%v", err) return } uid, err := strconv.Atoi(u.Uid) if err != nil { fmt.Printf("%v", err) return } gid, err := strconv.Atoi(u.Gid) if err != nil { fmt.Printf("%v", err) return } // Create the command object. cmd := exec.Command("command", "args...") // Set the SysProcAttr field to specify the user credentials. cmd.SysProcAttr = &syscall.SysProcAttr{ Credential: &syscall.Credential{ Uid: uint32(uid), Gid: uint32(gid), }, } // Execute the command. if err := cmd.Run(); err != nil { fmt.Printf("%v", err) return } }
이 접근 방식을 활용하면 외부 권한에 의존하지 않고 다른 사용자의 권한으로 외부 명령을 실행할 수 있습니다. "su" 또는 "bash"와 같은 명령. 실행 중인 Go 프로세스의 권한에는 원하는 사용자를 가장하는 기능이 포함되어야 한다는 점을 명심하세요.
위 내용은 Go에서 다른 사용자로 외부 명령을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!