Menggugurkan Keistimewaan dalam Go (v1.7)
Tugas untuk mencipta pelayan web tersuai di Golang sering menghadapi keperluan untuk terikat kepada port istimewa seperti port 80. Untuk memastikan keselamatan, adalah penting untuk menggugurkan keistimewaan root selepas mengikat port tersebut. Artikel ini meneroka isu pengguguran keistimewaan dalam Go dan menyediakan penyelesaian.
Dalam versi Go yang terdahulu, menggunakan syscall.SetUid() untuk menggugurkan keistimewaan akan mengembalikan "Tidak disokong." Sebagai alternatif, seseorang boleh mengubah hala port 80 ke port tidak istimewa menggunakan iptables. Walau bagaimanapun, penyelesaian ini membuka kelemahan keselamatan dengan membenarkan proses bukan akar untuk menyamar sebagai pelayan web.
Penyelesaian terletak pada penggunaan gabungan rangkaian rangkaian dan keupayaan panggilan sistem Go. Selepas membuka port istimewa dan menentukan UID, kami boleh mengenal pasti pengguna yang dikehendaki, mendapatkan UID mereka dan menetapkan kedua-dua UID dan GID menggunakan fungsi glibc setgid() dan setuid(). Adalah penting untuk melaksanakan kod ini serta-merta selepas mengikat port, tetapi sebelum memanggil http.Serve.
Coretan kod yang disediakan menunjukkan pendekatan ini. Ia mula-mula memuatkan sijil TLS yang diperlukan dan mendengar pada port istimewa. Jika aplikasi berjalan sebagai akar, ia menurunkan taraf kepada pengguna tertentu dengan menetapkan UID dan GID menggunakan panggilan glibc. Selepas itu, ia mendengar permintaan masuk dan menyediakan kandungan web.
Penyelesaian ini secara berkesan menangani keperluan untuk menggugurkan keistimewaan dalam aplikasi Go. Ia membolehkan penciptaan pelayan web tersuai yang selamat dan teguh tanpa menjejaskan keselamatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggugurkan Keistimewaan dengan Selamat Selepas Mengikat pada Port Keistimewaan dalam Pelayan Web Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!