How can I bind() to a port number < 1024?
Answer / chaitanya
The restriction on access to ports < 1024 is part of a (fairly weak) security scheme particular to UNIX. The intention is that servers (for example rlogind, rshd) can check the port number of the client, and if it is < 1024, assume the request has been properly authorised at the client end.
The practical upshot of this, is that binding a port number < 1024 is reserved to processes having an effective UID == root.
This can, occasionally, itself present a security problem, e.g. when a server process needs to bind a well-known port, but does not itself need root access (news servers, for example). This is often solved by creating a small program which simply binds the socket, then restores the real userid and exec()s the real server. This program can then be made setuid root.
| Is This Answer Correct ? | 0 Yes | 0 No |
After the chroot(), calls to socket() are failing. Why?
What is difference between socket () and serversocket () class?
What are Sockets?
How does unix socket work?
How can I put a timeout on connect()?
How do I convert a string into an internet address?
Can multiple clients connect to same socket?
What does af mean in sockets?
over the socket? Is there a way to have a dynamic buffer? What does one do when one does not know how much information is coming?
How come I get address already in use from bind()?
What's the difference between a socket and a port?
system choose one for me on the connect() call? Should I bind() a port number in my client program, or let the?