Đó là hành vi tiêu chuẩn mà người dùng không có đặc quyền không được phép liên kết với các cổng đặc quyền (số cổng dưới 1024). Do đó, một ứng dụng muốn liên kết với cổng 80 chẳng hạn sẽ phải chạy đặc quyền (thông thường điều này có nghĩa là chạy dưới quyền root) để liên kết với cổng này.
Một cách tiếp cận phổ biến là chạy một quy trình "người nghe" nhỏ với người dùng đặc quyền chấp nhận kết nối và sau đó sinh ra một quy trình không có đặc quyền để xử lý yêu cầu. Bỏ đặc quyền để xử lý yêu cầu được thực hiện vì lý do bảo mật. Nếu ai đó có thể khai thác quy trình xử lý yêu cầu, thì thông thường, nó cho phép kẻ xâm nhập thực thi các lệnh bằng cách sử dụng các đặc quyền giống như quy trình xử lý. Do đó, sẽ rất tệ khi xử lý toàn bộ yêu cầu bằng quy trình đặc quyền.
Tuy nhiên, đối với nhiều ứng dụng, ngày nay nó chạy không phải là root; nhưng các quá trình như vậy tất nhiên không thể liên kết với các cổng đặc quyền sau đó trong cấu hình tiêu chuẩn. Vì vậy, các máy chủ như Tomcat hoặc JBoss được sử dụng để liên kết với các cổng cao như 8080 thay vào đó, vì vậy họ không cần một người nghe đặc quyền.
Tất nhiên, nếu bạn đưa ra một quy trình như vậy với internet, bạn có thể sẽ cung cấp quyền truy cập trên cổng 80 vì mỗi trình duyệt trước tiên sẽ cố gắng kết nối với cổng 80 khi sử dụng giao thức HTTP. Cách làm việc chung để cung cấp điều này là sử dụng tường lửa hoặc trình dịch cổng ở giữa ứng dụng và internet công cộng. Vì vậy, các yêu cầu tấn công tường lửa yêu cầu cổng 80 nhưng tường lửa chuyển tiếp yêu cầu đến một số máy chủ nội bộ trên cổng 8080. Bằng cách này, máy chủ web thực sự có thể hoạt động trên các cổng cao trong khi có sẵn công khai trên cổng 80.
- (internet request) ----> (port 80)[Firewall] ------> (port 8080)[Webserver]
Đôi khi việc chuyển hướng này được thực hiện đơn giản bằng cách sử dụng iptables
quy tắc NAT:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Điều này cho phép chạy một ứng dụng không có đặc quyền nghe trên cổng 8080 trong khi tất cả các yêu cầu đến cho cổng 80 chỉ được chuyển hướng đến cổng 8080.
Tuy nhiên, sử dụng các nhân Linux hiện đại, có một khả năng khác: Sử dụng các khả năng.
setcap CAP_NET_BIND_SERVICE=+ep /some/webserver/binary
Điều này sẽ cho phép binary
liên kết với các cổng đặc quyền ngay cả khi bắt đầu như từ người dùng không root. Xem man capabilities
để biết thêm chi tiết.