vsftp 503 和 500 错误

想在远程服务器上装一些东西,在yum或者apt源里的自然很容易,但那以外的,shell + wget 总是有许多不便(有些下载需要登录,有些需要梯子……服务器上又希望尽量少不必要的东西),何况偶尔需要和本地交换一些东西,FTP是必要的。之前在 CentOS 7 上相当顺利,这次在Ubuntu 14.04上却不太顺利。

503

安装,然后创建了一个用户叫vsftp,设置一个相对简单的密码,禁止匿名登录。

然后在本地用ftp客户端登录:

1
2
3
4
命令: USER vsftp
响应: 331 Please specify the password.
命令: PASS *****
响应: 530 Login incorrect.

照例放Google,结果搜到一堆解决方法,众说纷纭,不禁让我疑惑中间一部分是碰运气,根本不知道原因,因为我是在Ubuntu上有问题,结果找到这么一个讨论:http://askubuntu.com/questions/413677/vsftpd-530-login-incorrect

提问者的情况跟我完全一致,而最高票的答案(将pam_service_name 从 vsftp 改为 ftp)也多次出现在各个搜索结果里,看来是可以解决问题的。不过我留了个心眼,继续看底下的评论:

You are disabling default access control via PAM, because default “ftp” has no rules. The default pam_service_name=vsftp uses the file /etc/pam.d/vsftpd. This file by default requires FTP users to have a shell listed in /etc/shells and requires them not to be listed in /etc/ftpusers.

一看,果然如此,pam.d/ 下只有vsftp的配置,你改名当然绕过了,但是就失去保护了。

查看 /et/ftpusers,vsftp 并没有在里面。再查看 /etc/passwd,vsftp 没有指定shell。于是我就将它的shell指定为/usr/sbin/nologin (不允许真正登录shell操作),并且添加到 /etc/shells。再试,却又报了另一个错误。

500

1
2
3
4
命令: USER vsftp
响应: 331 Please specify the password.
命令: PASS *****
响应: 500 OOPS: cannot change directory:/home/vsftp

又是先放Google,又是一堆众说纷纭。然后这个回答提醒了我:http://blog.arithm.com/2009/06/15/defeating-vsftp-error-500-oops-cannot-change-directorysomedirectory/

简单说就是:你搞那么多幺蛾子之前,有先最基本的检查一下目录的权限吗?

一看,目录根本还没创建 T_T 。因为vsftp 不能执行shell,所以用sudo 给它创建了目录,在chown 给 vsftp。

这回FTP客户端真的可以登录了。


知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议
本文为本人原创,采用知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议进行许可。
本作品可自由复制、传播及基于本作品进行演绎创作。如有以上需要,请留言告知,在文章开头明显位置加上署名(Jayce Chant)、原链接及许可协议信息,并明确指出修改(如有),不得用于商业用途。谢谢合作。
详情请点击查看协议具体内容。