Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've set up VSFTPD on Amazon EC2, with the Amazon Linux AMI. I created a user and can now succesfully connect via ftp. However, if I try to upload something I get the error message "553 Could not create file."

I assume this has to do with permissions but I don't know enough about it to be able to fix it. So basically, what do I have to do to be able to upload files?

share|improve this question
Check the selinux Settings. configure boolean allow_ftpd_full_access to ON – user125748 Jul 31 '15 at 12:40
up vote 10 down vote accepted

There are two likely reasons that this could happen -- you do not have write and execute permissions on the directories leading to the directory you are trying to upload to, or vsftpd is configured not to allow you to upload.

In the former case, use chmod and chown as appropriate to make sure that your user has these permissions on every intermediate directory. The write bit allows the affected user to create, rename, or delete files within the directory, and modify the directory's attributes, whilst the read bit allows the affected user to list the files within the directory. Since intermediate directories in the path also affect this, the permissions must be set appropriately leading up to the ultimate destination that you intend to upload to.

In the latter case, look at your vsftpd.conf. write_enable must be true to allow writing (and it is false by default). There is good documentation on this configuration file at man 5 vsftpd.conf.

share|improve this answer
Neither of these seem to be the issue. I tried chmoding everything to 777 (unsafe) and settings write_enable=YES, but I still get this useless error message. – Cerin Aug 5 '13 at 19:54

Could you try this

chown -R ftpusername /var/www/html
share|improve this answer
it worked for me. – Shoaib Iqbal Oct 31 '15 at 5:43
chmod 757 -R /var/www/html – Hernán Eche Nov 5 '15 at 19:49
@HernánEche thanks for the tip, I had been hunting for hours and this finally fixed my issue. – Tr0yJ May 19 at 9:46

The command ftp put /path/to/local_file doesn't work with vsftpd. Try the following:

ftp put /path/to/local_file remote_file_name 

You may choose any name you wish for the remote_file_name, but you must specify one.

share|improve this answer
You might want to consider adding more detail to your answer (for example, some documentation that supports your solution's validity). – HalosGhost Jun 29 '14 at 3:11
This happens because (and if) /path/to/ doesn't exist (and/or isn't accessible through the FTP session) on the server. This is why ftp put local_file does work without explicit destination. (Hint : check the local: … remote: … line in the FTP client.) – Skippy le Grand Gourou May 22 at 9:26

The FTP home directory (ftp_home_dir) is most likely turned off in SeLinux. To see status of your ftpd control files, issue: getsebool -a and locate the ftpd section. You may notice ftp_home_dir is turned off. To turn it on, use the following command: setsebool -P ftp_home_dir=1

Verify your input using getsebool -a, then Try the upload again.

Note: Ignore the punctuation marks

share|improve this answer
Bingo, thanks I had similar problems. After setting setsebool -P ftp_home_dir=1 it worked Thanks @Bright – Anand Feb 3 at 5:47

I had a similar issue, and resolved it by temporarily setting SELinux to "permissive" on the server.

share|improve this answer

Another possibility : check disk quotas for the user/group (ext : repquota -a, xfs : xfs_quota -x -c 'report' /mount_point)

share|improve this answer

For Fedora23 run the commands:

setsebool -P ftpd_anon_write 1 
setsebool -P ftpd_full_access 1

It worked for me.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.