一:安装vsftpd
查看是否已经安装vsftpd
rpm -qa | grep vsftpd
如果没有,就安装:
yum -y install vsftpd
执行完成后,就会看到Complete!表明安装成功了!
设置开机启动:
systemctl enable vsftpd.service
安装完成后,查看服务启动状态:
systemctl stop vsftpd.service
systemctl start vsftpd.service
systemctl restart vsftpd.service
systemctl status vsftpd.service
检查端口:
netstat -anp|grep 21
ftp服务启动的是21端口,按此方法开启21端口 。
二:设置用户
要连接上 vsftpd 服务器需要为Linux创建专门的用户, 接下来创建这个用户:
1:用户目录
在Linux中,不同用户是有不同目录访问权限的,所以首先创建一个目录,作为这个ftp用户所拥有的目录。
mkdir -p /home/ftproot/ftptest
2:创建用户
创建用户ftptest,并且指定其目录为用户目录中创建的/home/ftproot/ftptest
useradd -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端,这种不能登陆的用户又叫做虚拟用户
创建过程给出的警告信息是正常的,不用理会
3:设置目录权限
把目录/home/ftproot/ftptest的拥有者设置为ftptest
chown -R ftptest /home/ftproot/ftptest
使ftptest用户拥有这个目录的读写权限
chmod -R 775 /home/ftproot/ftptest
对设置权限不懂的,请查看:Linux常用命令
4:设置密码
为ftptest用户设置密码:
passwd ftptest
密码修改成功后会如图所示出现成功提示。
三:配置用户
要在vsftpd服务器中配置该用户
1:去掉匿名登录
默认情况下vsftpd服务器是允许匿名登陆的,这样非常不安全,所以要把这个选项关闭掉。
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
然后把本来的
anonymous_enable=YES
修改为
anonymous_enable=NO
修改完成之后,保存退出。
2:限制用户访问
创建的ftptest用户所拥有的目录是 /home/ftproot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。 为了规避这个隐患,需要限制ftptest用户只能通过ftp访问到 /home/ftproot/ftptest 目录以及子目录。
配置办法:
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
找到:
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
或
#chroot_list_file=/etc/chroot_list
并修改为:
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
注:
chroot_list_enable=YES: 表示对用户访问进行限制
chroot_list_file=/etc/vsftpd/chroot_list 在这个配置文件中添加用户,每个用户一行,则在这个文件里的用户登录ftp后, 可以访问上级目录 。而不在这个配置文件中的用户只能访问自己的home目录。
修改完成之后,保存退出。
3:用户列表
在chroot_list中添加ftptest用户,首先通过vi命令打开chroot_list文件(此文件本来是空的):
vi /etc/vsftpd/chroot_list
然后增加一行:
ftptest
修改完成之后,保存退出。
4:允许写权限
vsftpd服务器,一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。这个时候,就需要打开此用户的写权限,请按照如下办法操作:
首先通过vi命令打开ftp服务器配置文件:
vi /etc/vsftpd/vsftpd.conf
在最后面新加一行:
allow_writeable_chroot=YES
修改完成之后,保存退出。
四:配置端口
vsftpd有两种端口:
一种是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。 (安装用的这种)
1:配置端口
打开配置文件:
vi /etc/vsftpd/vsftpd.conf
在最后添加:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。
在后续要开放相应端口。
五:用户鉴权
因为用户 ftptest 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。。。搞死宝宝了
解决办法有如下两种:
1:方式一: pam.d/vsftpd 文件
vi /etc/pam.d/vsftpd
注释掉/etc/pam.d/vsftpd文件里这一行: #auth required pam_shells.so
这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器.
2:方式二:shells 文件
vi /etc/shells
在/etc/shells文件里面增加一行:/sbin/nologin
这样允许不能登录系统的用户通过鉴权
六:重启服务器
systemctl restart vsftpd.service
最后执行查看状态,以查看重启成功了
systemctl status vsftpd.service
bug解决方案:开启selinux权限
VSFTPD是一个FTP服务器程序,然后SELinux是CentOS的防火墙组件。由于 vsftpd 默认被 SELinux 拦截,所以会遇到的FTP以下的问题:
1.226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)
2.550 Failed to change directory(更改路径失败)
3.553 Could not create file.
4.或者干脆在发送了LIST命令以后,服务器没响应,超时断开。
遇到这样的问题,通常是vsftpd 没有足够的权限,很有可能是被SELinux阻止了。
查看命令:
getsebool -a | grep ftpd
#以下是显示出来的权限,off是关闭权限,on是打开权限
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
tftp_home_dir --> off
其中,ftp_home_dir和allow_ftpd_full_access必须为on 才能使vsftpd 具有访问ftp根目录,以及文件传输等权限。
设置命令:setsebool -P xxxxxx on
setsebool -P ftpd_full_access on
setsebool -P tftp_home_dir on
bug解决方案:被动模式连接服务器提示“服务器发回了不可路由的地址。使用服务器地址代替。”
我的理解是:vsftpd默认使用ipv6,我在上面加的那个属性地址,在使用IPv4时会发生错误。
解决方法:
listen=NO -> listen=YES
listen_ipv6=YES ->listen_ipv6=NO
这两处要一起改,单独改一处会发生错误,重启不了。
开启被动模式的代码:
# vim /etc/vsftpd/vsftpd.conf
#需要加入外部ip,否则被动模式会失败
pasv_address=39.96.38.179 #设置服务器外部ip
pasv_addr_resolve=YES
两处都要改,否则没有效果。
此bug不改filezilla不影响使用,但coda2不能列表。
评论
本文评论功能已关闭。