Ini adalah perilaku standar yang tidak diizinkan bagi pengguna yang tidak memiliki hak istimewa untuk mengikat port istimewa (nomor port di bawah 1024). Oleh karena itu aplikasi yang ingin mengikat ke port 80 misalnya harus menjalankan privilege (biasanya ini berarti dijalankan sebagai root) untuk mengikat ke port ini.
Pendekatan umum adalah menjalankan proses "pendengar" kecil dengan pengguna istimewa yang menerima koneksi dan kemudian memunculkan proses non-istimewa untuk menangani permintaan. Menjatuhkan hak istimewa untuk pemrosesan permintaan dilakukan karena alasan keamanan. Jika seseorang dapat mengeksploitasi proses yang menangani permintaan, maka biasanya itu memungkinkan penyusup untuk mengeksekusi perintah menggunakan hak yang sama dengan proses pemrosesan. Oleh karena itu akan buruk untuk menangani seluruh permintaan menggunakan proses istimewa.
Namun untuk banyak aplikasi saat ini umum dijalankan sebagai non-root; tetapi proses seperti itu tentu saja tidak dapat mengikat ke port privilege kemudian dalam konfigurasi standar. Jadi server seperti Tomcat atau JBoss digunakan untuk mengikat ke port tinggi seperti 8080 sehingga mereka tidak perlu pendengar istimewa.
Tentu saja jika Anda mengekspos proses seperti itu ke internet, Anda kemungkinan besar akan memberikan akses pada port 80 karena setiap browser pertama-tama akan mencoba untuk terhubung ke port 80 ketika protokol HTTP digunakan. Cara umum untuk menyediakan ini adalah dengan menggunakan firewall atau port-translator di antara aplikasi dan internet publik. Jadi permintaan mengenai firewall meminta port 80 tetapi firewall meneruskan permintaan ke beberapa host internal pada port 8080. Dengan cara ini server web yang sebenarnya dapat beroperasi pada port-tinggi sementara tersedia untuk umum pada port 80.
- (internet request) ----> (port 80)[Firewall] ------> (port 8080)[Webserver]
Terkadang pengalihan ini dilakukan dengan menggunakan iptables
aturan NAT:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Ini memungkinkan menjalankan aplikasi yang tidak privat mendengarkan pada port 8080 sementara semua permintaan masuk untuk port 80 hanya dialihkan ke port 8080.
Namun menggunakan kernel Linux modern ada kemungkinan lain: Gunakan kemampuan.
setcap CAP_NET_BIND_SERVICE=+ep /some/webserver/binary
Ini akan memungkinkan binary
untuk mengikat port istimewa bahkan ketika dimulai sebagai dari pengguna non-root. Lihat man capabilities
untuk lebih jelasnya.