setcap 'cap_net_bind_service=+ep' /path/to/program
ini akan bekerja untuk proses tertentu. Tetapi untuk mengizinkan pengguna tertentu mengikat ke port di bawah 1024, Anda harus menambahkannya ke sudoers.
Lihat diskusi ini untuk informasi lebih lanjut.
(Beberapa dari metode ini telah disebutkan dalam jawaban lain; saya memberikan beberapa kemungkinan pilihan dalam urutan preferensi kasar.)
Anda dapat mengalihkan port rendah ke port tinggi dan mendengarkan di port tinggi.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Anda dapat memulai server Anda sebagai root dan melepaskan hak istimewa setelah mulai mendengarkan di port istimewa. Lebih disukai, daripada mengkodekannya sendiri, mulai server Anda dari pembungkus yang melakukan pekerjaan untuk Anda. Jika server Anda memulai satu instance per koneksi, mulai dari inetd
(atau program serupa seperti xinetd
). Untuk inetd
, gunakan baris seperti ini di /etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Jika server Anda mendengarkan dalam satu contoh, mulai dari program seperti authbind
. Buat file kosong /etc/authbind/byport/80
dan membuatnya dapat dieksekusi oleh pengguna yang menjalankan server; atau buat /etc/authbind/byuid/1234
, di mana 1234 adalah UID yang menjalankan server, berisi baris 0.0.0.0/0:80,80
.
Jika server Anda yang dapat dieksekusi disimpan pada sistem file yang mendukung kemampuan, Anda dapat memberinya cap_net_bind_service
kemampuan. Berhati-hatilah karena kemampuannya masih relatif baru dan masih memiliki beberapa kekusutan.
setcap cap_net_bind_service=ep /path/to/server/executable
Jawaban singkatnya adalah bahwa hal ini tidak mungkin dilakukan secara sengaja.
Jawaban panjangnya adalah bahwa di dunia open source ada banyak orang yang bermain-main dengan desain dan menghasilkan metode alternatif. Secara umum, sudah menjadi praktik yang diterima secara luas bahwa hal ini seharusnya tidak mungkin dilakukan. Fakta bahwa Anda mencoba mungkin berarti Anda memiliki kesalahan desain lain di sistem Anda dan harus mempertimbangkan kembali seluruh arsitektur sistem Anda dengan mempertimbangkan praktik terbaik *nix dan implikasi keamanan.
Yang mengatakan, satu program untuk mengotorisasi akses non-root ke port rendah adalah authbind. Selinux dan grsecurity juga menyediakan kerangka kerja untuk autentikasi yang disempurnakan.
Terakhir, jika Anda ingin pengguna tertentu menjalankan program tertentu sebagai root dan yang benar-benar Anda butuhkan hanyalah mengizinkan pengguna memulai ulang apache atau sesuatu seperti itu, sudo
adalah temanmu!