Além de configurar DefaultRoot ~ como mencionado, como é sua configuração de SQL - você está realmente extraindo-a do banco de dados?
DefaultRoot ~
<IfModule mod_dso.c>
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
</IfModule>
SQLLogFile /var/log/proftpd/mod_sql.log
PersistentPasswd off
AuthPAM off
AuthUserFile /some/path/to/dummy/passwd.ftp
AuthGroupFile /some/path/to/dummy/group.ftp
AuthOrder mod_sql.c mod_auth_file.c
SQLConnectInfo proftpd@localhost:3306 userdatabase password
SQLAuthTypes Backend Crypt Plaintext OpenSSL
SQLUserInfo user user_id password NULL NULL ftp_homedir NULL
SQLAuthenticate users
SQLDefaultUID 14
SQLDefaultGID 50
SQLMinUserUID 13
SQLMinUserGID 49
Esse é um exemplo mais ou menos conciso de fazer 100% auth do banco de dados e prendê-lo ao seu homedir, conforme listado no banco de dados. Se você quiser também criar dinamicamente seu diretório pessoal quando fizer login (útil se você adicioná-los em um banco de dados e não quiser fazer login em um servidor para fazê-lo), você pode adicionar:
CreateHome on dirmode 0755
... para a configuração. Os outros dois arquivos fictícios listados acima correspondem à sua instalação do ProFTPd, que em um servidor Red Hat / Centos:
passwd.ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
group.ftp
ftp:x:50:
nobody:x:99:
Isso tudo faz com que seus usuários virtuais tenham UID / GID de 14:50 no disco rígido, independentemente do nome de usuário de login.