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

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

Mary-Kate Olsen
リリース: 2024-12-31 10:38:08
オリジナル
537 人が閲覧しました

How to Run External Commands as a Different User in Go?

別のユーザーで os/exec を使用して外部コマンドを実行する

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

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