Tidak ada cara bagi proses yang tidak memiliki hak istimewa (Python atau lainnya) untuk meningkatkan hak istimewanya sendiri. Ini semacam landasan untuk memiliki seluruh pengguna yang memiliki hak istimewa/tidak memiliki hak istimewa ini thinga-ma-jig. Sehubungan dengan soket mentah, dari halaman manual raw(7):
Hanya proses dengan ID pengguna efektif 0 atau kemampuan CAP_NET_RAW yang diizinkan untuk membuka soket mentah.
User ID 0 berarti root. Lihat di sini untuk info tentang soket mentah di linux.
Seperti yang ditunjukkan dalam jawaban/komentar Faust, Anda tidak akan dapat langsung mengatur kemampuan CAP_NET_RAW untuk program python Anda, karena itu adalah skrip yang dijalankan oleh juru bahasa Python, tetapi mungkin ada solusi di web yang bisa mengatasi batasan ini.
Seperti yang Anda catat, soket mentah memerlukan hak istimewa yang lebih tinggi daripada yang dimiliki pengguna biasa. Anda dapat menghindari masalah ini dengan dua cara:
- Mengaktifkan bit SUID untuk file dengan perintah seperti
chmod +s file
dan setel pemiliknya keroot
denganchown root.root file
. Ini akan menjalankan skrip Anda sebagai root, terlepas dari pengguna efektif yang menjalankannya. Tentu saja ini bisa berbahaya jika skrip Anda memiliki kekurangan. - Mengatur kemampuan CAP_NET_RAW pada file yang diberikan dengan perintah seperti
setcap cap_net_raw+ep file
. Ini hanya akan memberinya hak istimewa yang diperlukan untuk membuka soket mentah dan tidak ada yang lain.
EDIT:
Seperti yang ditunjukkan oleh @Netch, solusi yang diberikan tidak akan berfungsi dengan bahasa apa pun yang ditafsirkan (seperti Python). Anda akan memerlukan beberapa "peretasan" untuk membuatnya berfungsi. Coba googling untuk "Python SUID", Anda harus menemukan sesuatu.