2008-10-03 32 views

Trả lời

17

Thông thường chỉ siêu người dùng (gốc) mới có thể liên kết với các cổng 'đặc quyền' (tức là các số cổng dưới 1024).

Điều này có nghĩa là bạn phải chạy chương trình của bạn dưới dạng thư mục gốc hoặc thực thi 'suid root' của bạn.

Cả hai đều có hậu quả về bảo mật, do đó bạn có thể muốn xem xét sử dụng phương pháp suid và từ bỏ đặc quyền superuser sau khi thực hiện cuộc gọi liên kết.

+0

Các cổng 1024 và dưới đây thực sự được gọi là "cổng đặc quyền" không phải là "cổng an toàn", mọi thứ trên 1024 là "cổng tạm thời". Chúc mừng. – paxos1977

0

Nếu bạn đang sử dụng hệ thống được chia sẻ (như máy tính đại học) và không phải root thì không có cách nào dễ dàng để có được sự cho phép đó, theo thiết kế.

4

Bạn sẽ tìm thấy this tutorial rất hữu ích về lập trình mạng với C/C++.

Và, nhân tiện, ANSI C không có cách nào để truy cập mạng. Đó là các thư viện được cung cấp bởi hệ điều hành (API socket BSD, cũng được chuyển đến Windows dưới dạng winsock) cung cấp khả năng này.

+0

Hướng dẫn của Beej về ổ cắm là những gì tôi đã học được lập trình socket tại trường đại học, cùng với các thế hệ của các sinh viên khoa học máy tính khác. Nó thật sự tốt. Ngoài ra, các tác phẩm của W. Richard Stevens là một hướng dẫn tốt trong không gian này. – ConcernedOfTunbridgeWells

+0

Có, mặc dù phải mất ít thời gian hơn để đọc các hướng dẫn của Beej hơn là kinh nghiệm của Stevens :-) –

0

Nó cũng giống như @Charles Bailey đặt nó ... và tôi muốn thêm rằng đây là lý do tại sao một sử dụng để xem địa chỉ máy chủ http trên 8080 bởi đặc điểm kỹ thuật cổng trong URL như http://some.url: 8080/

3

Cổng 1024 và dưới đây được gọi là Cổng đặc quyền, ràng buộc với các cổng này đòi hỏi sự cho phép cao.

Các cổng trên 1024 được gọi là Cổng tạm thời. Việc liên kết với những yêu cầu này không yêu cầu quyền truy cập đặc biệt.

Cách dễ nhất để truy cập vào các cổng riêng tư là người dùng root.

-3

Có, bạn có thể dễ dàng liên kết với cổng 80. Sử dụng Apache. Viết một ứng dụng web. Apache liên kết với cổng 80 và chạy ứng dụng web của bạn.

Bạn đang cố gắng viết Apache tiếp theo? Nếu có, bạn sẽ cần tìm hiểu về cuộc gọi API setuid trong hệ điều hành của mình.

Nếu bạn không viết phiên bản Apache mới, hầu hết mọi người đều sử dụng cổng không có đặc quyền. 8000 là phổ biến, như vậy là 8080.

0

Câu trả lời của S.Lott có thể đã gây ra phản ứng rất tiêu cực nhưng ý tưởng của ông là xa ngu ngốc: nếu câu hỏi ban đầu là một chương trình thực sự (không phải là bài tập ở trường), phát triển nó như một ứng dụng phía sau máy chủ HTTP thường là lựa chọn hợp lý. Bằng cách đó, bạn có thể để lại rất nhiều chi tiết cấp thấp cho một chương trình tốt và được gỡ lỗi tốt, Apache.

Ứng dụng không phải là CGI, nó có thể là một mô-đun Apache. Apache, từ phiên bản 2, không còn là máy chủ HTTP nữa. Nó bây giờ là một nền tảng để phát triển các chương trình mạng. Viết mô-đun Apache có thể là câu trả lời chính xác cho câu hỏi ban đầu (xem Apache documentation)

+0

Cảm ơn bạn. Tôi mất một lúc để tìm hiểu * tại sao * có các cổng đặc quyền. Nó có liên quan đến kỳ vọng - bạn mong đợi giao thức http ở cổng 80, và đã có một phần mềm tốt đẹp để xử lý giao thức đó cho bạn. –

0

Các chương trình bình thường không thể kết nối các cổng "đặc quyền" - dưới 1024.Đây là một tính năng bảo mật chủ yếu là lỗi thời của các hệ điều hành giống UNIX.

Chạy với tư cách là superuser, mặc dù được nhiều người khác đề xuất ở đây, là một giải pháp tồi cho vấn đề này. Nếu bạn đang chạy trên hệ thống Debian hoặc Ubuntu, tôi khuyên bạn nên cài đặt gói authbind, cho phép bạn cấp quyền chương trình của bạn để mở cổng đặc quyền mà không cần phải cung cấp cho chương trình của bạn bất kỳ quyền đặc biệt nào khác.

Nếu bạn đang chạy trên bất kỳ hệ thống nào khác, tôi khuyên bạn nên cài đặt debian hoặc ubuntu ;-).

Các vấn đề liên quan