ホームページ > バックエンド開発 > Golang > Go で別のユーザーとして外部コマンドを実行するにはどうすればよいですか?

Go で別のユーザーとして外部コマンドを実行するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-29 00:21:10
オリジナル
898 人が閲覧しました

How Can I Execute External Commands as a Different User in Go?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート