I was recently having an issue with Pure-FTPD when attempting to access the server under a particular user. The following is the output along with the error code:
Connected to localhost (127.0.0.1).
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 21:04. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User ---- OK. Password required
421 Service not available, remote server has closed connection
No control connection for command: No such file or directory
And this was the Pure-FTPd and Platform details:
pure-ftpd.x86_64 - Version 1.0.22-1.fc9
Linux VNS 2.6.24-19-xen #1 SMP Wed Aug 20 21:08:51 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
I found that if the particular user connecting to the server has a home directory, which does not at least have read permissions for the ftpuser, then it will generate the '421 Service not available, remote server has closed connection' error code.
Simply give the UID or GID ('pure-pw show user' will give you this information if you have SSH access) read access to the specified directory, or change the home directory specified for the user ('pure-pw usermod user -d/path/to/new/directory').