Verifique seus logs do suexec. Talvez sua estrutura de diretórios esteja em um local não padrão para o vsftpd. Além disso, acho que você precisa de mais no seu arquivo de configuração pam.
Veja a aparência da configuração do meu pam:
cat /etc/pam.d/vsftpd
#%PAM-1.0
# Auth in MySQL
auth requisite pam_mysql.so user=readonly passwd=readonly host=somehost db=somedb table=accounts usercolumn=username passwdcolumn=pass crypt=3
auth required pam_script.so onerr=success dir=/etc/pam-script
# Account in MySQL
account required pam_mysql.so user=readonly passwd=readonly host=somehost db=somedb table=accounts usercolumn=username passwdcolumn=pass crypt=3
$ cat /etc/pam-script/pam_script_auth
#!/bin/sh
# Purpose: create the users's homedir and default message
#
# The evnironment variable $PAM_USER is passed on from PAM
# layer to this script via pam_script.so
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
/bin/su - ftp -s /bin/sh -c "/usr/bin/env mkdir /opt/ftp/$PAM_USER"
/bin/su - ftp -s /bin/sh -c "/usr/bin/env chmod 751 /opt/ftp/$PAM_USER"
/bin/su - ftp -s /bin/sh -c "/usr/bin/env cat /etc/vsftpd /vsftpd.banner.homedir.txt > /opt/ftp/$PAM_USER/.message"
/bin/su - ftp -s /bin/sh -c "/usr/bin/env cat /etc/vsftpd/vsftpd.banner.homedir.txt > /opt/ftp/$PAM_USER/README.first"
fi
$ cat /etc/vsftpd/vsftpd.int.21.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
message_file=.message
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/vsftpd/ssl/
guest_enable=YES
guest_username=ftp
local_root=/opt/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
banner_file=/etc/vsftpd/vsftpd.banner.server.txt
pasv_min_port=20005
pasv_max_port=30005
pasv_address=10.10.10.10
## FTPS (21) Config Changes
listen_port=21
ftp_data_port=20
listen_address=10.10.10.123
Já passou algum tempo desde que eu olhei para isso, então espero que ajude.