I have everyone restricted to their home folder via FTP. Within each home I have a public_html directory which I'm not able to upload to.

I have added my user source to the ftp group. the public_html folder is...

drwxrwsr-x 2 source ftp 4096 public_html

I'm not sure why I'm not able to upload files. What am I doing wrong with permissions?


The VSFTPD logs read:

- TIMESTAMP - [pid 2] CONNECT: Client "xx.xxx.xx.xx"
- TIMESTAMP - [pid 1] [user] OK LOGIN: Client "xx.xxx.xx.xx"


SmartFTP returns the error:

[18:36:52] SIZE index.php
[18:36:52] 550 Could not get file size.


Smart FTP Logs

[23:15:31] TYPE I
[23:15:31] 200 Switching to Binary mode.
[23:15:31] SIZE index.php
[23:15:31] 550 Could not get file size.
[23:16:02] SIZE index.php
[23:16:02] 550 Could not get file size.
[23:16:32] SIZE index.php
[23:16:32] 550 Could not get file size.
[23:17:02] SIZE index.php
[23:17:02] 550 Could not get file size.
[23:17:32] SIZE index.php
[23:17:32] 550 Could not get file size.
[23:18:02] SIZE index.php
[23:18:02] 550 Could not get file size.
[23:18:12] DELE index.php
[23:18:12] 550 Permission denied.
[23:18:12] DELE test.php
[23:18:12] 550 Permission denied.
[23:18:19] TYPE A
[23:18:20] 200 Switching to ASCII mode

The FTP logs simply show login success messages, which user and which IP they're from.

Permissions of public_html

drwxr-sr-x 2 source ftp 4096 2010-08-15 18:40 public_html

even when public_html is 777 I'm unable to write to it.

  • is this a webhosting server or personal server ? how is your ftp configured and which ftpserver are u using
    – Prix
    Commented Aug 14, 2010 at 3:58
  • Also what is the error that the ftp tells you when you try to upload something ? it could be due to the fact of the port 20 being blocked by the firewall ftp uses 20 and 21 for communication and send/receive data.
    – Prix
    Commented Aug 14, 2010 at 6:21
  • what are your logs saying? Can you turn on more verbose logging?
    – Matt
    Commented Aug 14, 2010 at 6:59
  • Is the file system size full?
    – Alvin Sim
    Commented Aug 17, 2010 at 15:09
  • No, it's a fresh installation with no sites on it at 500GB hard drive.
    – Ben
    Commented Aug 19, 2010 at 3:13

5 Answers 5


Please check you have write_enable=YES in your vsftpd.conf

You can su(do) to the user and try making the file by hand, that should rule out filesystem permission errors.

Could you post the full log from smartftp and perhaps your vsftpd.conf?

  • That was definitely something that I missed. But I'm still unable to upload an index.php to that directory
    – Ben
    Commented Aug 19, 2010 at 3:19
  • On the serverside: Could you try uploading another filename? Can you try to become that user (su/sudo) and create a file (touch indexmanual.php) in that directory? On the clientside: It looks like your smartftp log misses the interesting bit (STOR), not sure if that is actually happening. Could you try filezilla or some other ftp client?
    – Joris
    Commented Aug 19, 2010 at 7:48

I suspect that your homedirs are not globally executable or readable, hence it's not the publc_html directory that's the problem, but rather one of its parent directories. What are their perms?


Is this a redhat based system with selinux enforced? Type:
getenforce and let us know what it says, if it's enforcing you need to specifically allow FTP users to access their home directories:
setsebool -P ftp_home_dir=1

Also, can you access the home directories as the user? It sounds stupid but the permissions might be wrong. SSH in as root and try:
su - username
It should automatically go into their home directory, then cd into public_html and verify with
pwd and cd into the directory if not. If you can't permissions issues.
Next, try to write a file:
echo "test" >> test.txt if it doesn't work, again permissions issues.

  • It's an ubuntu-server
    – Ben
    Commented Aug 19, 2010 at 3:22

I know you say you've tried 777 permissions, but neither of your two ls examples above show 777 (rwxrwxrwx). Of course this shouldn't be needed, but it might be useful to rule out this possibility.

Another thing is, you might need to add the STOR command to the cmds_allowed directive if you have one and that command is not already there.

A reasonably comprehensive list is probably something like


  • is cmds_allowed something that should be managed via VSFTPD configuration?
    – Ben
    Commented Aug 19, 2010 at 19:56
  • I don't see that option preconfigured at all in vsftpd.conf but I also added those commands. sudo /etc/init.d/vsftpd restart doesn't seem to be restarting VSFTPD
    – Ben
    Commented Aug 19, 2010 at 22:37
chown -R username:groupname /path/to/public_html/

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .