Go では、os/exec パッケージを使用して、別のユーザーに代わって外部コマンドを実行できます。 。これは、アプリケーションが root として実行され、別のユーザーの権限でコマンドを実行する必要がある場合に特に便利です。
これを実現する 1 つの方法は、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 中国語 Web サイトの他の関連記事を参照してください。