After the chroot(), calls to socket() are failing. Why?
Answer / chaitanya
On systems where sockets are implemented on top of Streams (e.g. all SysV-based systems, presumably including Solaris), the socket() function will actually be opening certain special files in /dev. You will need to create a /dev directory under your fake root and populate it with the required device nodes (only).
Your system documentation may or may not specify exactly which device nodes are required; suggested checking the man page for ftpd, which should list the files you need to copy and devices you need to create in the chroot'd environment.)
A less-obvious issue with chroot() is if you call syslog(), as many daemons do; syslog() opens (depending on the system) either a UDP socket, a FIFO or a Unix-domain socket. So if you use it after a chroot() call, make sure that you call openlog() *before* the chroot.
| Is This Answer Correct ? | 0 Yes | 0 No |
How does unix socket work?
Explain the TIME_WAIT state.
How can I bind() to a port number < 1024?
How can I set the timeout for the connect() system call?
What is a socket api?
What is the difference between read() and recv()?
What is Mac, and how is it different from PC? Which one is better for professional users, and why
1 Answers Evolving Systems, IBM,
What is the difference between SO_REUSEADDR and SO_REUSEPORT?
How can I listen on more than one port at a time?
What's the difference between a socket and a port?
How many socket connections can a server handle?
Why do I get connection refused when the server is not running?