4

I have set up a FTP server using vsftpd and enabled anonymous upload and download. The problem I have is that when I upload a directory it will be uploaded successfully (I can see it in server), but the next time I want to check that directory, FTP client shows an empty directory!!

There is no error logged in /var/log/vsftpd.log. The pub folder (home folder for anonymous ftp user) has also write permission. I tested various config options but none helped!

The latest config options I set are like below:

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirlist_enable=YES

I even turned off firewall once for testing it, but it didn't change anything!

  • Stumbled upon this myself. Many pages have the same question, but often not the (full) answer. It's the PASV ports that need to be reachable in PASV mode. This may need the firewall/IPtables to be adjusted: serverfault.com/questions/421161/… – user102760 Feb 11 '15 at 15:21
  • Did you ever solve this problem? I have the same problem now. None of the suggestions mentioned here helps. I also noticed that you never marked any of the answers as the solution. – Sarah Weinberger Dec 11 '15 at 18:27
  • @SarahWeinberger Sorry for the very late reply. No, I couldn't find a solution. – saeedn Jun 20 '16 at 3:29
  • seccomp_enable=YES (the default) on Gentoo caused this behavior; changing this setting to NO fixed it. Interestingly on Debian vsftpd reportedly exhibited the same seccomp warnings, but did not cause vsftpd to fail when listing a directory. – Winny May 14 at 16:02
5

Two suggestions:

  1. Does whatever user ID that will run FTP have "write" permissions on the "root" directory that vsftpd will use as its current working directory? vsftpd doesn't want a writable working directory.

  2. The vsftpd.conf file can have a hide_file directive. Depending on the regular expression specified by that directive, anonymous users might not be allowed to see any files.

I've had this problem with vsftpd in the past, and I recall having a vsftpd.conf setting that caused it, so read that config file closely, understand all the params and their values.

  • Thanks for suggestions. Yes that directory has write permission. When I restrict write permission to owner, I get permission denied while uploading, so I made it world writable. And I checked hide_file, it is not set in config file, which according to unix man page of vsftd.conf should be set to (none). – saeedn Feb 2 '12 at 6:49
2

I just forced my VSFTPD to run only in active mode and that seemed to have worked for me. To do that put the following line in your config file:

pasv_enable=NO

What I ended up doing, though, was enabling the passive mode as for some applications it appeared to have been a requirement. It looks like VSFTPD does not play with defaults nicely so it is best to specify your preference explicitly:

pasv_enable=YES

It is also important to get up the correct iptables settings if you are running a firewall. Here are mine, extracted from my /etc/sysconfig/iptables file:

# FTP
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1024:65535 -j ACCEPT
2

Thanks to user81029 for pointing out

sudo setsebool -P allow_ftpd_full_access 1

solves the issue with empty ftp directory after mount --bind a folder into /var/ftp/ on SELinux

  • That was the problem for me on Centos 7.5-1804. Thanks! – Martin Jambon Jan 24 at 18:27
1

Have you considered adding hide_file=NO?

  • Yes, I tried it, but it didn't help – saeedn Feb 4 '12 at 9:19
1

If your config is correct and it's not a firewall issue it could well be SELinux, in my case it was and the answer was:

setsebool -P allow_ftpd_full_access 1

From the man page:

If you want to allow ftp servers to login to local users and read/write all files on the system, governed by DAC, you must turn on the allow_ftpd_full_access boolean

0

if SELinux is enabled, have you tried setenforce 0 command? Note, it temporarily enters into permissive mode.

-2

If you have tried to list directories by using commands like ls, dir that will not help.

If you use any GUI FTP client, for example filezilla, all directories will be shown.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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