70

I can't get vsfptd working on Ubuntu 12.04.

my vsftpd.conf file looks like this, and I try to connect with a local user:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

Error message in FileZilla:

Response:   331 Please specify the password.
Command:    PASS ****
Response:   530 Login incorrect.
4
  • 1
    try restarting the vsftpd. >sudo /etc/init.d/vsftpd restart I had the same issue, but this worked for me.
    – v1h5
    Jan 31, 2014 at 18:10
  • 1
    Another thing to check : what is the login shell for the user. is that shell present in /etc/shells
    – user400315
    Apr 22, 2015 at 3:12
  • Please how can I modify the /etc/shells ?
    – user558008
    Jun 17, 2016 at 3:48
  • For me, there was just wrong format for the user in /etc/passwd - i needed to set the right home dir, shell, and the ,,, part. Apr 19, 2017 at 16:15

7 Answers 7

127

Back up the config file before making a change;

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.back

and then edit vsftpd.conf (with vi or nano)

nano /etc/vsftpd.conf

Then make the following change

pam_service_name=ftp

Save your change and restart the ftp server (if you use nano hit CTRL+O & enter to save then CTRL+X to exit)

sudo service vsftpd restart

Source: VSFTPD configuration problems with 12.04

9
  • 3
    This problem also, can be solved in debian7 by this answer.
    – shgnInc
    Feb 1, 2015 at 7:36
  • 1
    What is the rationale behind this one?
    – Joost
    Aug 20, 2015 at 21:08
  • 17
    You are disabling default access control via PAM, because default "ftp" has no rules. The default pam_service_name=vsftp uses the file /etc/pam.d/vsftpd. This file by default requires FTP users to have a shell listed in /etc/shells and requires them not to be listed in /etc/ftpusers. Sep 4, 2015 at 14:41
  • Solved me the same problem on Ubuntu 14.04. Thanks!
    – Rotem
    Oct 11, 2015 at 10:23
  • 3
    @JeroenVermeulenBVBA +1 you are right. I fear some people just don't know what's actually happening underneath and why it appears to "work".
    – Stphane
    Dec 7, 2016 at 14:32
18

By default vsFTPd uses the file /etc/pam.d/vsftpd. This file by default requires FTP users to have a shell listed in /etc/shells and requires them not to be listed in /etc/ftpusers. If you check those 2 things your probably find what the problem is.

4
  • 1
    I think this should be the accept answer because it points out where is the problem.
    – PhoneixS
    Sep 26, 2018 at 11:18
  • How does one make sure the FTP user has one of these shells? Asking for a friend...
    – Allen
    May 19, 2020 at 0:32
  • 1
    @Allen This is defined in the file /etc/passwd. Each line is the info about one user. The fields are separated by a colon (:). The 7th field contains the path to the shell binary of the user. May 20, 2020 at 7:56
  • 2
    Apart from editing the passwd file directly, you can use usermod -s /bin/bash YOUR_USERNAME
    – Raptor
    Oct 28, 2020 at 9:41
8

I did not need to change the vsftpd.conf. Only needed to make sure that a shell was set in my /etc/passwd file, that also was lited in /etc/shells.

So basically after useradd without a shell I needed to make sure the home directory was created and that the user had /bin/bash as it's shell.

1
  • 1
    Thanks that's what happened to me. The other solutions worked by removing all safety mechanisms, this one was actually solved the problem.
    – VinGarcia
    May 2, 2018 at 0:56
5

I met this problem when I tried to login in with root and I just solved it.

vsftpd: version 3.0.2

Solution:

Check the following file (it contains list of users disallowed FTP access):

/etc/ftpusers 

ftpusers

In my case, I commented out root from the file, then it worked.

2
  • I did same to be able to login as root, but didn't worked Apr 7, 2019 at 4:08
  • 1
    Not a good idea to enable thoses users! There is a security reason why they are refused. Nov 29, 2019 at 17:01
3

Please make some changes in /etc/vsftpd.conf:

pam_service_name=ftp

If you want to set access by default /var/www directory for local user you can do that with below line:

local_root=/var/www

Now save and exit.

Restart vsftpd server using:

sudo service vsftpd restart
1
2

The suggested resolution did not work for me. I gave up on the ftp user, and switched my attention to the ubuntu user. I made sure there was a password associated with the ubuntu user.

I made sure to enable passive mode, and set local_enable=YES in the vsftpd.conf file.

I was able to authenticate just fine using the ubuntu account. And I successfully uploaded a large file to my Amazon Ubuntu FTP server. Clearly there was something amiss with the ftp user.

0

I used Ubuntu 18.04 and LetsEncrypt certificates for TLS encryption. What worked was changing the name of the pam_service_name=ftp the error I was getting in Filezilla was:

"GnuTLS error -15": An unexpected TLS packet was received.

Reference: FTPS set up in ubuntu 18.04

Not the answer you're looking for? Browse other questions tagged or ask your own question.