本文章所对应的Linux系统是RedHat系列的CentOS
一、vsftpd安装配置
vsftpd简介:vsftpd是“very secure FTP daemon” 的缩写,是一个完全免费的、开放源代码的ftp服务器软件。
vsftpd特点:是一款在Linux发行版中最受推崇的FTP服务器程序,小巧轻快,安全易用,支持虚拟用户、支持带宽限制等功能。
vsftp安装配置:
以下命令是否需要用sudo权限执行则根据您具体环境决定
1.通过rpm -qa | grep vsftpd 命令可检查是否已经安装vsftpd
2.没有安装则进行安装,命令为yum -y install vsftpd 默认配置文件在/etc/vsftpd/vsftpd.conf
3.选择在根或者用户目录下创建ftp文件夹:mkdir ftpfile,如:/ftpfile
4.添加匿名用户:useradd ftpuser -d /ftpfile -s /sbin/nologin
5.修改ftpfile权限:chown -R ftpuser.ftpuser /ftpfile
6.重设ftpuser密码:passwd ftpuser 回车后便会要求输入密码。
7.配置vsftpd的配置文件,命令:sudo vim /etc/vsftpd/vsftpd.conf修改部分主要是红色部分,但其它部分也要修改,最好与下图一致,没有截图出来的部分是不需要修改的
8.ftp服务器的配置:
1)cd /etc/vsftpd(进入到vsftpd的目录文件)
2)sudo vim chroot_list(创建该文件)
3)在文件输入 ftpuser即把刚才新增的虚拟用户添加到此配置文件中,后续要引用
4)重启vsftpd,命令sudo service vsftpd restart
9防火墙配置,命令:sudo vim /etc/sysconfig/iptables 编辑该文件,在文件中添加如下内容,:wq保存退出
#vsftpd
-A INPUT -p TCP --dport 61001:62000 -j ACCEPT
-A OUTPUT -p TCP --sport 61001:62000 -j ACCEPT
-A INPUT -p TCP --dport 20 -j ACCEPT
-A OUTPUT -p TCP --dport 20 -j ACCEPT
-A INPUT -p TCP --dport 21 -j ACCEPT
-A OUTPUT -p TCP --dport 21 -j ACCEPT
10重启防火墙,命令:sudo service iptables restart
11配置安全文件(网上有网友说这是美国安全局对于强制访问控制实现),命令sudo vim /etc/selinux/config,修改为SELINUX=disabled:wq保存退出 否则有时运行时会出现550拒绝访问
然后输入命令,sudo setenforce 0 让刚才的修改生效
然后重启ftp服务器,sudo service vsftpd restart
注:如果一会验证的时候还是碰到550则执行:sudo setsebool -P ftp_home_dir 1
12vsftp验证,命令sudo service vsftpd restart
注:第一次启动时Shutting down vsftpd是failed是正常的,因为这是重启命令,保证Starting vsftpd是OK即代表vsftpd服务成功
12通过页面验证,通过ifconfig查看到ip之后,在浏览器中访问 ftp://XXX.XXX.XXX.XXX(XXX为ip地址),正确进入之后需要账号ftpuser,密码是刚才自己设定的,则证明ftp服务已经成功建立
13可以通过ftp客户端软件验证,例如cuteftp,filezilla,viperftp,flashftp,leapftp等来进行连接ftp服务器,进行文件上传下载
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
1)PORT(主动)方式的连接过程是:客户端相服务器的FTP端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路。
当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:"我打开了***端口,你过来连接我"。于是服务器从20端口相客户端的***端口发送连接请求,建立一条数据链路来传送数据。
2)(被动)方式的连接过程是:客户端相服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了***端口,你过来连接我”。于是客户端向服务器的***端口发送连接请求,建立一条数据链路来传送数据。从上面可以看出,两种方式的命令链路连接方法是一样的。而数据链路的建立方法就完全不同,FTP的复杂性就在于此。
本文章到此就分享结束了,欢迎大神一起讨论