FTP - 550无法更改目录

时间:2016-01-12 06:15:50

标签: ftp

我正在尝试使用FTP编写远程文件。我正在使用flysystem库在PHP中执行此操作。它似乎运作良好。但是,当我尝试写入特定位置的文件时,它会给我chdir()错误。为了测试这个,我在FTP控制台上尝试了这个。

[kbg@ip-192-0-1-118 ~]$ ftp
ftp> open 192.0.1.118
Connected to 192.0.1.118 (192.0.1.118).
220 (vsFTPd 2.2.2)
Name (192.0.1.118:kbg):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> cd /projects/test
550 Failed to change directory.

当我在vsftpd.conf文件中更改以下内容时,它似乎运行良好。

chroot_local_user=NO
chroot_list_enable=NO

我甚至可以使用PHP库来编写没有任何问题。允许我的用户在/projects/test/t1.conf文件中写入文件的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

你得到chroot_local_user = No 但似乎你没有遍历/项目/测试的权限。 你必须允许ftp_user遍历上面的目录。要做到这一点: -

setfacl -R -m u:ftp_user:rwx /projects/test

但是如果你需要更改目录内容,你最好添加ftp_user来说ftp group by: -

usermod -a -G ftp ftp_user

如果您还没有添加ftp群组,那么

现在通过以下方式更改目录的组权限和所有权: -

chown -R :ftp /projects/test
chmod -R g+rwx /projects/test

并设置guid位,以便其中的所有未来文件和目录都允许ftp_user访问它们。

chmod g+s /projects/test

而不是组,对于用户拥有权限,权限和位可以遵循相同的过程,但我假设如果您正在使用web目录,所有权将默认为服务器用户,如www,www-data,apache等,所以你必须在这里更好地与团队合作。

或者安全选项: - chroot_local_user = Yes您可以绑定ftp用户主目录下的目录。要做到这一点: -

mount --bind /projects/test /home/ftp_user/projects_test

要获得持久性,请将条目添加到fstab: -

/projects/test /home/ftp_user/projects_test none bind 0 0

现在您可以遍历projects_test,就像它是/ projects / test。

答案 1 :(得分:0)

这是发生在我身上的事情。我使用 java 的 org.apache.commons.net.ftp.FTPClient。

我的 ftp 帐户的根路径是 /data/ftp 当我想将工作目录更改为 /data/ftp/person 时 然后我调用 ftpClient.changeWorkingDirectory("/data/ftp/person");

和 ftp 重播消息:550 Failed to change directory

我发现我们应该将子目录而不是整个路径传递给这个方法,但我们需要改变。

所以我们应该像ftpClient.changeWorkingDirectory("person");一样改变目录