2013-01-24, 06:45 PM | #1 | |
注册日期: 2003-10-22
帖子: 11,052
积分:6
精华:24
现金:14344金币
资产:29325301金币
|
vsftpd只能匿名登录,本地用户出现530错误的一个实例
网上很多教程,在介绍vsftpd的本地用户的配置的时候,大意都是这样的: 代码:
建立一个xxx用户,家目录为/yyy/zzz,并把这个用户的shell(/etc/passwd里对应行的最后一列)设置成/sbin/nologin或者是/bin/false,再设置一个密码。 然后修改vsftpd的配置文件,一般是/etc/vsftpd.conf,加上: local_enable=YES write_enable=YES local_umask=022 然后重启vsftpd就可以了。 1. xxx用户对 /yyy/zzz 没有权限。 2. xxx用户被加到 /etc/vsftpd.user_list 列表里了。 但是我今天的操作中,这个新建的用户并没有发现以上两种现象,仍然出现了可恶的530错误,但是匿名用户正常登录。 折腾半天以后,发现用一个shell是/bin/bash的用户却是可以登录ftp的。于是,试着把xxx用户的shell也改成/bin/bash,果然也可以登录了。但是这样显然还没有解决我的问题,因为这样一来,xxx这个用户都可以通过ssh登录服务器了,安全就没有保障了。 于是再找更详细的原因,终于发现了: 其实vsftpd对本地用户鉴权的过程中是可以检查用户shell的合法性的,而且默认就启用了。虽然你可以在配置文件中通过添加 代码:
check_shell=NO 要解决这个问题,还得继续问:vsftpd是怎么检查一个shell是否合法呢?其实这个答案很简单,vsftpd读取 /etc/shells 这个文件,如果用户的shell在这个文件里存在,就认为合法,否则即使你输入了正确的密码,仍然会给你一个530,哈哈。 所以,解决办法就是:把 /sbin/nologin 或者是 /bin/false 加到 /etc/shells 中去! |
|
|
||
|