Vsftpd 文件传输服务
ftp是典型的C/S结构,由服务端跟客户端两个部分共同实现文件传输功能
一、Ftp工作原理
ftp采用TCP协议的20、21端口与客户端进行通信
20端口:用于建立数据连接并传输文件数据
21端口:用于建立控制连接,并传输ftp控制命令
二、ftp的传输模式
1、主动模式
首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,服务端从 20 端口主动向客户端发起连接。
在主动模式下, FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求, 并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认, 然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151, 最后客户端返回确认。
2、被动模式
首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,客户端向服务端的非20端口发送请求并建立连接数据
在被动模式中,命令连接和数据连接都由客户端来发起,如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认。
vsftpd默认是被动模式。所以客户端要设置被动模式连接,如果到现在还没连接成功的看客户端有没有设置被动传输模式。
三、FTP 常见的服务端及客户端
1、常见的服务端程序
- IIS、Serv-U
- wu-ftpd、Proftpd
- vsftpd(Very Secure FTP Daemon)
2、常见的 FTP 客户端程序
- ftp 命令
- CuteFTP、FlashFXP、LeapFTP、Filezilla
- gftp、kuftp
四、部署 FTP 服务
1、把光盘挂载到/mnt下
1 | mount /dev/cdrom /mnt |
2、添加本地yum源
1 | cd /etc/yum.repos.d && mkdir repo.bak |
3、安装FTP 服务
1 | yum -y install vsftpd |
五、匿名用户访问
1、备份原 ftp 配置文件
1 | cd /etc/vsftpd/ |
2、修改配置文件
1 | anonymous_enable=YES |
3、给予数据根目录写权限
1 | cd /var/ftp |
4、启动服务
1 | systemctl start vsftpd |
六、user_list文件限制用户登录
1、编辑/etc/vsdtpd/user_list文件,把允许登录服务的用户添加进文件
Ps 此 ftpusers 文件中的所有用户都将禁止登陆,不管 user_list 文件中是否出现。
2、添加用户赋予密码
3、编辑配置文件追加以下内容(记得把 anonymous_enable
配置改为 NO)
1 | vim vsftpd.conf |
4、重启vsftpd服务
1 | systemctl restart vsftpd |
5、测试 nlemon 用户不可以登陆访问
6、验证 ylemon 用户可以登陆访问
七、虚拟用户登录(常用)
vsftpd提供了三种认证方式,分别是:匿名用户认证、本地用户认证和虚拟用户认证。从安全的角度来说,虚拟用户最安全也是最常用的认证方式,下面开始配置虚拟用户。
1、创建vusers.list文件
1 | vim /etc/vsftpd/vusers.list |
2、db_load 创建用户的数据库文件
1 | cd /etc/vsftpd/ |
3、添加映射的本地用户
1 | useradd -d /var/ftproot -s /sbin/nologin virtual |
4、添加编辑文件vsftpd.vu
1 | vim /etc/pam.d/vsftpd.vu |
5、编辑配置文件
1 | vim /etc/vsftpd/vsftpd.conf |
6、创建vusers_dir目录下的虚拟用户
1 | mkdir /etc/vsftpd/vusers_dir |
7、为虚拟用户设置不同的权限
tom 权限设置
1 | vim /etc/vsftpd/vusers_dir/tom |
jerry 权限设置
1 | # 如果不进行权限设置的话,默认该用户只有 登录、浏览、下载 的权限。 |
8、验证虚拟用户权限
- 使用Tom虚拟用户登录服务,Tom可以登录、浏览、下载、上传、创建、删除
- Jerry用户只能登录、浏览、下载、但无法上传