2

While making an automated ftp upload script, I noticed a very strange behaviour of ftp program: if I want to send a file which belongs to /tmp directory, ftp will always fail and give an error message: cannot create file.

See this:

^_^ ~ > touch /tmp/file1

^_^ ~ > touch file2

^_^ ~ > ftp <server>
Connected to <server> (<server ip>).
220 (vsFTPd 2.2.2)
Name (<server:username>): <username>
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put /tmp/file1
local: /tmp/file1 remote: /tmp/file1
227 Entering Passive Mode (<ip>).
553 Could not create file.

ftp> put file2
local: file2 remote: file2
227 Entering Passive Mode (<ip>).
150 Ok to send data.
226 Transfer complete.
ftp> 

What is wrong with ftp reading a file from /tmp?

There is no SELinux or AppArmor on the server nor on the ftp client.

1
  • Does the /tmp directory exist on the ftp server and do you have access to it? Can you cd into both the remote and local /tmp directories and put file1? Commented Feb 21, 2013 at 0:24

4 Answers 4

1

The problem isn’t reading the file from /tmp –– read the error message: “553 Could not create file.”  When you say

put a_single_file_name

that is equivalent to

put  single_file_name   that_same_file_name_again

So put /tmp/file1 is equivalent to put /tmp/file1 /tmp/file1, and this fails if the FTP server doesn’t have a writable /tmp directory configured.  Try put /tmp/file1 file1, or maybe put /tmp/file1 ./file1.

0
1

Note that when you run ftp you are connected to a remote machine. Use the lcd to change directories on your local machine; cd will change directories on the remote machine. In your case

lcd /tmp
put file1
lcd <to original directory>
1

Use ls -l to view the permissions on the folder. Does the user you authenticate as have write access to that directory? If not, you need to use chmod to ensure that it does, or it will never work.

Often, FTP accounts have limited access to areas close to / In fact, some systems are set up so they can ONLY write to /home/ftpUserName

0

The typical way to handle this in FTP is to use the cd command to change the remote directory, while using the lcd (local cd) command to change the local directory (obviously a shell escape from FTP won't help (MS-Windows excepted, maybe)). Then just put your files from the local directory to the remote directory.

You must log in to answer this question.

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