vsftpd安装及遇到的问题

先抛出两个常见的问题,让很多遇到此问题的人头痛不已,看似简单的问题,我也是费劲心思搞了两天才搞定,我再说说我是怎么解决的。即vsftpd 530 Login incorrect 和vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误。
1. 安装环境
操作系统: CentOS Linux release 7.4.1708 (Core) 
          系统信息:3.10.0-693.2.2.el7.x86_64 
2. 使用yum安装
yum -y install vsftpd

3. 转到/etc/vsftpd
3个配置文件的说明
ftpusers----------ftp用户黑名单,其中的用户不允许访问ftp服务器上传下载文件。
user_list---这里说了,如果配置项userlist_deny=NO,则只允许列表中的用户访问ftp,如果userlist_deny=YES,则列表中的用户不允许访问ftp.
vsftpd.conf ---这个是最重要的配置文件,很多问题都出在这里。
具体配置后面再讲。
4. 创建用户及指定其目录
先说一下ftp的用户分类,可以登录ftp的用户一共分为3类
操作系统内部用户
vsftpd虚拟用户
匿名用户
我选第一种用户,即操作系统内建用户登录ftp.
我的用户名putan123
adduser -d /opt/download  -g ftpuser -s /sbin/nologin putan123

指定目录/opt/download为上传下载目录;
指定用户组ftpuser
让用户putan123不能终端登录系统,只能用作ftp用户,这里还要限制制访问目录/opt/download,这里后面配置说明。

如果以前创建过此用户,现在删除重建,可能会出现两个错误,分别为:
>>Creating mailbox file: File exists
原因分析:当用户del user的时候,未删除相关联的邮箱账号文件,默认在/var/spool/mail/下。
解决方法:删除mail下对应的$USER文件即可。如用户putan123,rm -rf /var/spool/mail/putan123
>>adduser warning:the home directory already exists
Not copying any file from skel directory into it. 
原因分析:使用 userdel user 删除用户引起。
解决方法:改为userdel -rf user删除掉用户,重新建用户。

创建目录download后,要给相应的权限,众说纷纭,有说设置不正确有可能访问拒绝,这里我设置为750,证明下传上载都可以。
chmod 750 /opt/download

>> 修改用户密码
passwd putan123
两次输入密码成设置成功。
5.现在讲配置,先讲我刚安装时的配置,改了这几项,其它使用默认。

关掉匿名访问
anonymous_enable=NO 

这里有说selinux有影响,那就按照说明把selinux设置一下,放过vsftpd,还有防火墙,放开21,20端口,这里不讲这两项设置。
local_enable=YES

write_enable=YES

xferlog_enable=YES

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES

//注意这两项
所有用户都被限制在其主目录下
chroot_local_user=YES
不使用chroot_list_file指定的用户列表,没有任何“例外”用户
chroot_list_enable=NO

# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES

listen_ipv6=NO

//启用写日志,默认在/var/log/vsftpd.log
use_localtime=YES
dual_log_enable=YES

pam_service_name=vsftpd

这个组合说明,在user_list中的用户允许登录,不在user_list中的用户不能登录,所以我这里将putan123加入user_list配置文件。
userlist_enable=YES
userlist_deny=NO

要加入开机启动这里就不讲了。

完成了这些基本配置后,启动服务
systemctl start vsftpd.service

客户端登录试试,报以下经典的错误
vsftpd 530 Login incorrect
让人头痛的事开始了, 大家遇到的问题都不尽相同,有说selinux拦劫了,防火墙档住了,有说阿里云端口挡住了,还有的说pam.d配置不对等等,
其中pam.d的配置也说有多种情况,有的说要删除这项,有的说要改成那项,总之这里说法非常的多。
可能问题就出在这几个地方,按顺序都检查一遍,我这几个地方都检查了,还是不行,怎么改都会出现vsftpd 530 Login incorrect,简直可以让人
崩溃,最后冷静心下来,一步一步分析,看似简单,却搞两天解决不了。既然是登录权限,看去看来还是回到pam.d这里的配置,打开看了下
/etc/pam.d/vsftpd


#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

这个地方网上提到很多种组合法,既然默认的,那我不改他的结构,有人说文件目录不对问题,我就查一下.so文件在那个目录

find / -name pam_keyinit.so
显示在这里
/usr/lib64/security/pam_keyinit.so
其它几个文件都在这里,那么改成对的看看

#%PAM-1.0
session    optional     /usr/lib64/security/pam_keyinit.so    force revoke
auth       required     /usr/lib64/security/pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     /usr/lib64/security/pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     /usr/lib64/security/pam_loginuid.so
session    include      password-auth

特别注意:

(1) 这里任何项都不要删除或者改成别的,只改.so的路径成正确的即可,在某些系统下面这样就可以。

(2) 而在centos-7中,如果在(1)步不行,那注释掉以下一行后可以登录:

#auth    required /usr/lib64/security/pam_shells.so

重启vsftpd服务。终于是可以登录了,不再报这个错了,折腾了2两天算是有点进展。

不过又报另一个错:
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
有人说是这样的原因:从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
我使用了后者,在配置中加入allow_writeable_chroot=YES这一项。问题解决。

另外登录如果出现列出列表超时问题,将客户端的三个模式都改试一下,按照我这个配置,我发现改为主动模式可以解决这个问题。

总结一下原因,大致出在这几个地方:
(1). pam.d 里面的vsftpd文件里的so文件路径不对。默认的结构不要改,只改路径,开始就犯了这个错误,按网上说的一阵改,或者增加或者减少。
(2). vsftpd.conf文件中的配置项有问题。配置项对应其下用户列表文件,注意各种组合和黑名单。
(3). 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。 
(4). selinux档住了,防火墙扯住了端口,指定的监听端口一定要放开,我放开了21,22两个端口。如果修改了默认监听端口,要重新配置过。
(5). 客户端连接时,注意是默认模式,主动模式,被动模式中的那一种,另外登录类型选正常还是别的,视情况而定,加密类型,如果没有加密选普通,协议也要选对ftp等等。 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值