Chroot is used to lock up a process inside a directory, and many people consider this to be a sufficient security. However, there are many potential problems: if your process is running with root privileges, this means it can mount the proc or dev filesystems, and thus go out of the chroot, or destroy your partitions !
The real problem is to give root privileges to a process, not restricting these privileges. I personally believe that chroot is a bad solution to the security problem, a better solution would be to ensure that the FTP server will never have root privileges. If you want real security, use strong methods like SElinux, and do not rely on things like chroot !
Additionally, chroot is not portable.
Yes ! You will need to have a separate config file for each instance (look the -f option), and to specify at least different ports in each config file.
12.1.3. When I start the server it displays no error but it isn't running (not present in the process list)
Check your log file !
If your server is compiled with TLS enabled, the most frequent error an invalid or absent certificate file. Error looks like:
SSL_CTX_use_certificate_file() error:0906D06C:PEM routines:PEM_read_bio:no start line TLS subsystem could not be initialized.
The most probable reason is that the ident connections are dropped by a firewall. When a client connects, the server tries to connect to the client on port 113 (ident) to make an ident lookup. If the connection is dropped, it will result in a timeout.
You can totally disable ident lookups setting the disable_ident variable to 1 or 'yes'
You must also ensure that the DNS settings are properly configured on the server: bad DNS settings will result in frequent timeouts on some commands.
Before ANY complaint, please check that there are no firewall (hardware and/or software) between the two servers. Keep in mind that most of the time FXP and TLS are highly incompatible: firewall open dynamic ports by watching connection, and trying to detect usage of PORT or PASV commands. If you run in TLS mode, it is EVIDENT that the firewall will never detect the command (the connection is encrypted), thus won't open dynamic ports.
NAT (Network Address Translation) can also be a cause of problems, please check that the IP addresses send during port negotiation are correct.
When FXP fails, try to reverse passive and active sides of transfer: in FXP, one server is in PASV mode, the other in PORT mode. Sometimes the connection can fail in one direction and not in the other (often an effect of firewalls or NAT).
In the general case, symlinks ! Symlinks are faster than VFS, can easily be manipulated online and are clearly more flexible than VFS.
VFS should only be used when you have several users with different home directories and want to easily give access to a special directory for all (e.g show a INSTALL directory in each user's homedir).
Symlinks can also be manipulated with scripts.
12.3.1. When I run the server with uid 0 (root) it complains it can't open file 'users' or commit changes
Make sure files 'users' and 'users.OLD' are owned by same uid as specified in the server_uid directive in the config file.
chown ftp users users.OLD
When running the server with root privileges, you can specify a server_uid line in the config file to drop root privileges after binding to port < 1024. Note that this server does not need root privileges to run, it is designed to work in restricted user-mode (this is REALLY more secure !).