Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menjalankan Perintah Luaran sebagai Pengguna Lain dalam Go Tanpa Menggunakan su atau bash?
Dalam Go, pakej os/exec menyediakan cara untuk menjalankan perintah luaran daripada program. Walau bagaimanapun, secara lalai, arahan dijalankan dengan keistimewaan pengguna yang sama seperti program itu sendiri.
Untuk menjalankan arahan dengan keistimewaan pengguna yang berbeza tanpa menggunakan arahan su atau bash, anda boleh menggunakan syscall.Credential. Berikut ialah contoh:
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() }
Walaupun tidak disyorkan kerana potensi risiko keselamatan, anda juga boleh menggunakan syscall.Setuid untuk menukar ID pengguna yang berkesan bagi arus proses.
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) }
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Perintah Luaran sebagai Pengguna Lain dalam Go Tanpa Menggunakan su atau bash?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!