环境
Linux 发行版: Centos 7.7.1908
ftp 版本:vsftpd-3.0.2
前提
今天,在学习「鸟哥的 Linux 私房菜」中,发现自己在登录 FTP 时,根本登录不上去,疯狂的显示 530 错误,特此记录一下 。
提出问题
下面是这段代码
$ curl ftp://username:password@localhost/~/
# 这段代码的意思是使用 FTP 协议进入 username 的家目录,并将目录下的文件打印出来
正常是可以打印出对应用户家目录下的文件的,但是,在我的我的服务器显示结果如下
$ curl ftp://ftptest:12345@localhost/~/
curl: (67) Access denied: 530
一开始是重启虚拟机,确定密码正确。但还是连接不上。在 google 的过程中发现了连接 FTP 的另一种方法。
另一种连接方式:使用 ftp 直接连接对应网站。
$ ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftptest
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
虽然失败了,可以从上面看到错误还是 530 但是这次提示信息从 「 Access denied 」变成了「 Login incorrect 」。因为在搜索 Access denied 并没有找到合适的答案,于是换成了 Login incorrect 。结果第一条就解决了问题,不得不说搜索关键词的重要性。
解决问题
导致我登录不上的原因是 /etc/pam.d/vsftpd 这个文件,这个文件里下面这行的意思是,只有用户使用的 shell是 /etc/shells 里的 shell 才能登录到 FTP ,而创建 FTP 用户,只想让他上传或下载文件,最安全的方法是将 shell 设置成 /sbin/nologin ,这样才能有效的防止 FTP 登录到服务器,但是也可以正常使用 FTP。
auth required pam_shells.so
将上面这行改成下面对应的即可。但是对应的只有 shell 为 nologin 的才能登录。
auth required pam_nologin.so
还有一种方法可以不用动 FTP 的配置文件,就是将 /etc/shells 文件中加入 /sbin/nologin 。
我使用的是第二种方法,因为在学习私房菜前面的时候,我还清楚的记得鸟哥的 /etc/shells 里是有 /sbin/nologin 的,但是我还纳闷为什么我输出的信息和他的不一样,现在我知道了因为 Centos 版本不一样,7.7 与 7.1 的区别,这下破案了。为了接下来和鸟哥保持一致,于是将 /sbin/nologin 加入 /etc/shells 中。