Dalam Go, menggunakan pakej os/exec, adalah mungkin untuk melaksanakan perintah luaran bagi pihak pengguna lain . Ini amat berguna apabila aplikasi anda berjalan sebagai root dan perlu melaksanakan arahan dengan keistimewaan pengguna yang berbeza.
Satu kaedah untuk mencapai ini ialah dengan menggunakan struct syscall.Credential. Dengan menambahkan struct ini pada medan SysProcAttr objek Cmd, anda boleh menentukan ID pengguna (Uid) dan ID kumpulan (Gid) untuk proses luaran. Ini memastikan arahan berjalan di bawah keistimewaan pengguna yang ditentukan.
Berikut ialah contoh:
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 } }
Dengan menggunakan pendekatan ini, anda boleh melaksanakan perintah luaran di bawah keistimewaan pengguna yang berbeza tanpa bergantung pada luaran arahan seperti "su" atau "bash." Perlu diingat bahawa keistimewaan proses Go yang dijalankan mesti termasuk keupayaan untuk menyamar sebagai pengguna yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Perintah Luaran sebagai Pengguna Berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!