Go を使用して別のユーザーの下で外部コマンドを実行する
システム プログラミングの広大な環境において、後援の下で外部コマンドを実行する機能多くの場合、別のユーザーの情報が不可欠です。従来の方法では「su」または「bash」ユーティリティの利用が必要になる場合がありますが、より効率的で純粋な Go ベースのアプローチを実現できます。
このタスクを実行するために、os/exec パッケージは次の包括的なセットを提供します。外部プロセスの実行を管理する関数。ただし、デフォルトの動作では、現在のプロセスの権限でコマンドが実行されます。別のユーザーとしてコマンドを実行するには、syscall.Credential 構造体の領域を詳しく調べます。
Cmd オブジェクトの SysProcAttr フィールドに Credential 構造体を追加することで、資格情報 (つまり、UID とGID) を使用して外部コマンドを実行する必要があります。次のコード スニペットは、このアプローチを示しています。
package main import ( "fmt" "os/exec" "strconv" "syscall" ) func main() { // Capture the UID of the desired user u, err := user.Lookup("another_user") if err != nil { fmt.Printf("%v", err) return } // Parse the UID into an integer and construct the Credential uid, err := strconv.Atoi(u.Uid) if err != nil { fmt.Printf("%v", err) return } credential := &syscall.Credential{Uid: uid} // Compose the command command := exec.Command("ls", "-l") // Configure the command's SysProcAttr with the Credential command.SysProcAttr = &syscall.SysProcAttr{} command.SysProcAttr.Credential = credential // Execute the command and process its output output, err := command.CombinedOutput() if err != nil { fmt.Printf("%v", err) return } fmt.Println(string(output)) }
このアプローチにより、外部コマンドの実行環境をきめ細かく制御できるようになり、コマンドを実行するユーザーを正確に指定できるようになります。
以上がGo で別のユーザーとして外部コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。