FTP服务介绍
FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
-
主要用于互联网中文件的双向传输(上传/下载)、文件共享
-
跨平台Linux、Windows
-
FTP是C ==client==/S ==server==架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
-
FTP的默认端口21号(命令端口)20号(数据端口,主动模式下),默认被动模式下
-
FTP程序(软件)vsftpd
FTP软件名称 => vsftpd =>(very secure ftp daemon)
1、FTP服务的客户端工具
Linux:ftp(密码登录)、lftp(匿名登录)
Windows:FlashFXP(虚拟主机)、FileZilla ==IE、Chrome、Firefox 新版本的浏览器不支持==
lftp和ftp工具区别:
-
lftp:默认是以匿名用户访问
-
ftp:默认是以用户名/密码方式访问
-
lftp可以批量并且下载目录
FTP的两种运行模式(了解)
在FTP服务中,其一共拥有两种模式(主动模式+被动模式)
==参考点,FTP的服务器端。==
如果是FTP服务器端主动连接客户端=>主动模式,如果是客户端主动连接FTP服务器端=>被动模式。
主动模式
cmd:命令端口(发送FTP请求)
data:数据端口(后期用于传输数据)
1.客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
2.服务端的21号命令端口响应客户端的随机命令端口
3.服务端的20号端口主动==>请求连接客户端的随机数据端口 ==> 经过客户端的防火墙
4.客户端的随机数据端口进行确认
被动模式
1.客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
2.服务端的21号命令端口响应客户端的随机命令端口
3.客户端主动连接服务端打开的大于1023的随机数据端口 ==> 需要开放端口的操作只需要设置在服务器上
4.服务端进行确认
FTP默认使用的就是被动模式!
比如服务端使用:1024~5000
防火墙设置一个规则1024~5000放行
FTP配置文件中MIN102
搭建FTP服务(重要)
步骤概述:
关闭防火墙和selinux
配置yum源(mount /dev/sr0 /mnt)
软件三部曲
了解配置文件
根据需求修改配置文件来完成服务的搭建
启动服务,开机自启动
测试验证
第一步:关闭防火墙与SELinux
systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUX=disabled第二步:配置YUM源
有网配置公网YUM源(阿里、清华、华为),没网就配置本地YUM源 mount /dev/sr0 /mnt yum clean all yum makecache第三步:安装vsftpd软件(FTP => vsftpd)
yum install vsftpd -y第四步:启动ftp服务并添加到开机启动项中
systemctl start vsftpd systemctl enable vsftpd第五步:测试FTP是否安装成功
ifconfig ens33 inet 192.168.66.138 netmask 255.255.255.0 broadcast 192.168.66.255find / -name pub -type d基于浏览器的访问(新浏览器不支持)
基础cmd命令行访问
C:\Users\ccdj>ftp 192.168.66.138 连接到 192.168.66.138。 220 (vsFTPd 3.0.2) 200 Always in UTF8 mode. 用户(192.168.66.138:(none)): anonymous 331 Please specify the password. 密码: 230 Login successful. ftp> dir 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 2 0 0 6 Jun 09 2021 pub 226 Directory send OK. ftp: 收到 64 字节,用时 0.00秒 64.00千字节/秒。基于Windows资源管理器的访问
基于FlashFxp、FileZilla软件
基于ftp以及lftp命令进行连接(Linux与Linux之间的FTP文件传输)
需要单独安装
yum install ftp lftp -y ftp 10.1.1.10ftp 192.168.66.138 Connected to 192.168.66.138 (192.168.66.138). 220 (vsFTPd 3.0.2) Name (192.168.66.138:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files.ftp内输入help可以查看指令帮助
FTP的配置文件详解(重要)
在Server服务器端,使用rpm -ql vsftpd
rpm -ql vsftpd /usr/lib/systemd/system/vsftpd.service 启动脚本 /etc/vsftpd 配置文件的目录 /etc/vsftpd/ftpusers 用户列表文件,黑名单 /etc/vsftpd/user_list 用户列表文件,可黑可白(默认是黑名单) /etc/vsftpd/vsftpd.conf 配置文件(主配置文件) /usr/sbin/vsftpd 程序本身(二进制的命令) /var/ftp 匿名用户的默认数据根目录 /var/ftp/pub 匿名用户的扩展数据目录vsftpd配置文件详解:
anonymous_enable=NO
作用:禁止匿名用户登录。
说明:设置为
NO
时,FTP 服务器不允许匿名访问,所有用户必须使用有效的用户名和密码登录。
local_enable=YES
作用:允许本地用户登录。
说明:设置为
YES
时,系统上的本地用户可以使用 FTP 登录。
write_enable=YES
作用:启用写操作。
说明:设置为
YES
时,允许用户执行上传、删除、重命名等写操作。
local_umask=022
作用:设置本地用户的文件权限掩码。
说明:值为
022
表示上传的文件默认权限为644
(rw-r--r--),目录默认权限为755
(rwxr-xr-x)。
dirmessage_enable=YES
作用:启用目录消息功能。
说明:当用户进入某个目录时,会显示该目录下的
.message
文件内容。
connect_from_port_20=YES
作用:启用从端口 20 进行数据连接。
说明:设置为
YES
时,FTP 数据连接将使用标准端口 20。
chroot_local_user=YES
作用:将本地用户限制在其主目录中。
说明:设置为
YES
时,用户无法访问其主目录之外的文件。
allow_writeable_chroot=YES
作用:允许 chroot 目录可写。
说明:设置为
YES
时,即使用户的主目录是可写的,也不会触发安全限制。
chroot_list_enable=YES
作用:启用 chroot 用户列表功能。
说明:设置为
YES
时,可以通过指定的列表文件控制哪些用户被限制在主目录中。
chroot_list_file=/etc/vsftpd/chroot_list
作用:指定 chroot 用户列表文件的位置。
说明:该文件包含需要限制或不限制主目录的用户列表。
listen=NO
作用:是否以独立模式运行 vsftpd。
说明:设置为
NO
时,vsftpd 不会直接监听端口,而是依赖于xinetd
或其他服务管理器。
local_root=/data/kefu
作用:设置本地用户的根目录。
说明:所有本地用户登录后,默认进入
/data/kefu
目录。
pam_service_name=vsftpd
作用:指定 PAM(Pluggable Authentication Modules)服务名称。
说明:用于定义 vsftpd 使用的 PAM 配置文件。
userlist_enable=YES
作用:启用用户列表功能。
说明:设置为
YES
时,可以通过用户列表文件控制哪些用户可以或不可以登录。
tcp_wrappers=YES
作用:启用 TCP Wrappers 支持。
说明:设置为
YES
时,vsftpd 会使用/etc/hosts.allow
和/etc/hosts.deny
文件进行访问控制。grep -v ^# /etc/vsftpd/vsftpd.conf grep -v ^# /etc/vsftpd/vsftpd.conf > /etc/vsftpd/vsftpd.confman 5 vsftpd.conf
FTP任务解决方案
任务背景
简单来说:根据我们所学的内容(FTP)搭建一个客户服务系统(主要涉及客服资料上传与下载)
1.客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档 2.不允许匿名用户访问 3.客服部门的相关文档保存在指定的目录里/data/kefu ==> local_root=/data/kefu 4.客服用户使用用户kefu/123登录后就只能在默认的/data/kefu目录里活动创建客服账号(Server)
useradd kefu echo 123 | passwd --stdin kefu不允许匿名用户访问
vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO配置修改完毕后,一定要重启vsftpd服务
systemctl restart vsftpd指定账号访问的目录
mkdir /data/kefu -p vim /etc/vsftpd/vsftpd.conf local_root=/data/kefu限定目录下活动
禁kefu用户只能在/data/kefu目录下
vim /etc/vsftpd/vsftpd.conf chroot_local_user=YES配置修改完毕后,一定要重启vsftpd服务
systemctl restart vsftpd无法上传
之所以无法上传,主要原因在于kefu这个账号对于/data/kefu文件夹没有w写权限
#setfacl -R -m u:kefu:rwx /data/kefu systemctl restart vsftpd500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
local_root=/data/kefu
chroot_local_user=YES
禁锢目录补充
chroot_local_user=YES 禁锢所有用户需求:我们能不能给一小部分用户开通非禁权限。
vim /etc/vsftpd/vsftpd.conf chroot_list_enable=YES 开启用户列表文件 chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件 echo kefu >>/etc/vsftpd/chroot_list 代表客服这个账号不会被禁在指定目录 systemctl restart vsftpd