File Transfer Protocol ,文本传输协议
一、FTP服务基础
FTP(File Transfer Protocol)是典型的C/S结构的应用层协议, 就是在Intel用来传送文件的协议,需要有服务端软件和客户端软件两个部分共同实现文件传输功能。关于FTP服务,可以从接下来几个方面为大家介绍一下:
端口:
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信:
- 20端口: 用于建立数据连接,传输文件数据;
- 21端口: 建立控制连接,传输FTP控制指令;
配置文件:
服务配置文件: /etc/vsftpd/vsftpd.conf
== 数据连接:==
-
主动模式: 服务器主动发起连接。 首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接;
-
被动模式: 服务器被动等待数据连接。 如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动模式。首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
二、在服务器中部署FTP服务
2.1 关闭内核级的加强形火墙
vim /etc/sysconfig/selinux ##关闭selinux
SELINUX=disabled ##第7行
reboot ##重启虚拟机nux状态
getenforce ##查询selinux状态
2.2 安装服务
yum install -y lftp
yum install -y vsftpd
2.3 设置防火墙永久允许ftp服务
==方法一:==命令设定防火墙
systemctl start vsftpd ##打开vsftp服务
systemctl enable vsftpd ##允许开机自动启动
systemctl start firewalld ##打开防火墙
firewall-cmd --permanent --add-service=ftp ##允许ftp通过防火墙
systemctl restart firewalld ##重新开启防火墙(刷新)
==方法二:==图新设定防火墙
进入虚拟机图新页面 >> 桌面
- Linux桌面左上角 应用程序 >> 防火墙设置 >> 文件 >> 配置:永久 >> public >> 勾选ftp
- 选项 >> 重载防火墙
2.4 在客户端测试
三、 ftp的配置文件中相关功能的实现
配置文件:/etc/vsftpd/vsftpd.conf
日常报错问题:
550 ##文件权限过大
530 ##用户认证失败
550 ##服务本身功能未开放
553 ##本地文件系统权限太小
1)匿名用户设定
anonymous_enable=YES|NO ##匿名用户登陆限制
#<匿名用户上传>
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
#<匿名用户家目录修改>
anon_root=/direcotry
#<匿名用户上传文件默认权限修改>
anon_umask=xxx
#<匿名用户建立目录>
anon_mkdir_write_enable=YES|NO
#<匿名用户下载>
anon_world_readable_only=YES|NO ##注意设定参数值为no表示匿名用户可以下载
#<匿名用户删除>
anon_other_write_enable=YES|NO
#<匿名用户使用的用户身份修改>
chown_uploads=YES
chown_username=student
chown_uploads_mode=0644
#<最大上传速率>
anon_max_rate=102400
#<最大链接数>
max_clients=2
2)本地用户设定
local_enable=YES|NO ##本地用户登陆限制
write_enable=YES|NO ##本地用户写权限限制
#<本地用户家目录修改>
local_root=/directory
#<本地用户上传文件权限>
local_umask=xxx
#<限制本地用户浏览/目录>
所有用户被锁定到自己的家目录中
chroot_local_user=YES
chmod u-w /home/*
用户黑名单建立
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
用户白名单建立
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#<限制本地用户登陆>
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
3.1 匿名用户的设定
3.1.1 匿名用户登录
[root@Kiro /]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES ##第12行 允许匿名用户访问
19 write_enable=YES ##第19行 开启服务器的写权限
23 anon_umask=022 ##第23行 设置匿名用户上传数据文件的权限掩码
24 anon_upload_enable=YES ##第24行 允许匿名上传文件
25 anon_mkdir_write_enable=YES ##允许匿名用户创建目录
测试:
3.1.2 匿名用户上传
[root@Kiro ftp]# vim /etc/vsftpd/vsftpd.conf ##服务机修改vsftp配置文件
19 write_enable=YES ##ftp对用户可写
24 anon_upload_enable=YES ##匿名用户上传
[root@Kiro ftp]# systemctl restart vsftpd ##重启vsftp服务
[root@Kiro ftp]# chown :ftp pub ##将pub的属组改为ftp
[root@Kiro ftp]# chmod 775 pub ##允许pub文件被属组读和写
** put命令————上传文件
测试:
3.1.3 匿名用户家目录修改
[root@Kiro]# vim /etc/vsftpd/vsftpd.conf ##进入vsftp配置文件
13 anon_root=/opt ##匿名用户家目录修改
验证:
3.1.4 匿名用户上传文件的权限修改
anon_umask=755 ##匿名用户新增文件时系统保留的权限为022(属组和其他用户可读)
##这一步需要把之前配置文件里的添加的匿名用户家目录给注释掉
验证:
3.1.5 匿名用户建立目录
anon_mkdir_write_enable=YES ##匿名用户建立目录
测试:
3.1.6 匿名用户删除
anon_other_write_enable=YES ##打开匿名用户删除功能
systemctl restart vsftpd ##重启vsftpd服务
测试:
3.1.7 匿名用户下载
anon_world_readable_only=YES|NO ##匿名用户下载,设定参数为NO表示
systemctl restart vsftpd
3.2本地用户的设定
3.2.1本地用户的登录
local_enable=YES
3.2.2 本地用户家目录修改
local_root=/directory
write_enable=YES
3.2.3 本地用户上传文件权限
local_umask=022
3.2.4 限制本地用户浏览/目录
chroot_local_user=YES ##所有用户被锁定到自己的家目录中
chmod u-w /home/* ##用户不能有写的权限否则会报错500
3.2.5 本地用户黑名单的建立
userlist_enable=YES ##表示开启黑白名单功能
userlist_deny=YES ##YES表示下面的路径为黑名单
[root@Kiro pub]# vim /etc/vsftpd/user_list
[root@Kiro pub]# cat /etc/vsftpd/chroot_list
zhangsan
3.2.6 本地用户白名单的建立
userlist_enable=YES
userlist_deny=NO
vim /etc/vsftpd/user_list
3.2.7 限制本地用户登陆
/etc/vsftpd/ftpusers ##永久黑名单
/etc/vsftpd/user_list ##临时黑名单
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO ##临时黑名单变为白名单
【扩展】
- Linux : 运行环境:Very Secure FTP(vsftp)
- TFTP: 69 简单FTP