web-dev-qa-db-ja.com

`ftp`プログラムが/ tmpディレクトリ内のファイルを読み取れないのはなぜですか?

自動化されたftpアップロードスクリプトを作成しているときに、ftpプログラムの非常に奇妙な動作に気づきました。/tmpディレクトリに属する​​ファイルを送信したい場合、ftpは常に失敗し、エラーメッセージを表示します:cannot create file

これを参照してください:

^_^ ~ > 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> 

ftp/tmpからファイルを読み取ることの何が問題になっていますか?

サーバーにもftpクライアントにもSELinuxやAppArmorはありません。

2
Howard

問題は/tmpからファイルを読み取っていないことです-エラーメッセージ「553Couldnotcreatefile」を読んでください。あなたが言う時

put a_single_file_name

それはと同等です

put single_file_namethat_same_file_name_again

したがって、put /tmp/file1put /tmp/file1 /tmp/file1と同等であり、FTPサーバーに書き込み可能な/tmpディレクトリが構成されていない場合、これは失敗します。 put /tmp/file1 file1、またはput /tmp/file1 ./file1を試してください。

1
Scott

ftpを実行すると、リモートマシンに接続されていることに注意してください。 lcdを使用して、ローカルマシンのディレクトリを変更します。 cdは、リモートマシンのディレクトリを変更します。あなたの場合

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

ls -lを使用して、フォルダーのアクセス許可を表示します。認証したユーザーは、そのディレクトリへの書き込みアクセス権を持っていますか?そうでない場合は、chmodを使用して確実に機能させる必要があります。そうしないと、機能しません。

多くの場合、FTPアカウントは、/に近い領域へのアクセスが制限されています。実際、一部のシステムは、/home/ftpUserNameにのみ書き込むことができるように設定されています。

1
kmort