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 |
How are unix domain sockets implemented?
What exactly does SO_KEEPALIVE do?
Why do I get EPROTO from read()?
What is socket address with example?
What is sae socket?
What is the difference between connected and unconnected sockets?
system choose one for me on the connect() call? Should I bind() a port number in my client program, or let the?
Is socket a hardware or software?
What is the difference between a socket and a port?
How can I put a timeout on connect()?
How can I force a socket to send the data in its buffer?
Where can a get a library for programming sockets?