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 中国語 Web サイトの他の関連記事を参照してください。