FTP-550无法更改目录

FTP-550无法更改目录,ftp,Ftp,我正在尝试使用FTP编写远程文件。我正在使用这个库在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 speci

我正在尝试使用FTP编写远程文件。我正在使用这个库在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文件的正确方法是什么?

您得到了
chroot\u local\u user=No
但您似乎没有遍历/项目/测试的权限。 您必须允许ftp_用户遍历上面的目录。为此:-

setfacl -R -m u:ftp_user:rwx /projects/test
但是,如果要更改目录内容,最好添加ftp_用户,比如说ftp组成员:-

usermod -a -G ftp ftp_user
如果尚未添加ftp组,则必须添加ftp组

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

chown -R :ftp /projects/test
chmod -R g+rwx /projects/test
并设置guid位,以便将来其中的所有文件和目录都允许ftp_用户访问它们

chmod g+s /projects/test
用户所有权、权限和bit可以遵循相同的过程,而不是组,但我假设如果您使用web目录,所有权将默认为服务器用户,如www、www数据、apache等,因此您可以在这里更好地使用组

或者,安全选项:-

chroot\u local\u 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\u test。

以下是我的经历。我使用java的org.apache.commons.net.ftp.FTPClient

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

和ftp重播消息:
550更改目录失败

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


因此,我们应该更改目录,如
ftpClient.changeWorkingDirectory(“person”)

完美!甚至5年后。