FTP介绍
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务器端可以实现共享文件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接(21端口),主要用于控制FTP连接信息,同时再生成一个单独的TCP连接(20端口)用于FTP数据传输。用户可以通过客户端向FTP服务器端上传、下载、删除文件,FTP服务器端可以同时提供给多人共享使用。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
FTP服务器端软件
Vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、 FileZilla Server等软件,其中Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd 。
客户端软件
浏览器,资源管理器,ftp,lftp(推荐)
端口
建立tcp连接: 21; 传输数据:20; 1024+的随即端口;
FTP传输模式介绍
vsftpd的被动模式是默认开启的,可以关闭,主动模式永远开启,不能关闭
主动模式: 21端口负责连接,20端口负责传输数据
client server
1024-------->21 负责连接
1024<--------20 负责传输
高安全区域 防火墙 低安全区域
被动模式:client server
1024-------->21 负责会话连接
1024-------->1024+存放数据等待客户端来拿数据
使用什么模式连接服务器是客户端说了算
能不能接受那个模式是服务器说了算
服务器关闭被动模式:
vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO
客户端关闭被动模式:
lftp 服务器端IP
> set ftp:passive-mode off
永久关闭客户端被动模式
vim /etc/lftp.conf
set ftp:passive-mode off
ftp的安全
1.关闭匿名用户除下载权限之外的一切权限
2.开启监控,也就是打开日志 /var/log/xferlog
安装ftp服务器端
准备工作:网络畅通,yum仓库可用,已关闭防火墙和selinux
①安装
yum -y install vsftpd
②启动服务并设置开机自启动
systemctl start vsftpd
systemctl enable vsftpd
③访问测试
ftp://服务器IP地址
如果ftp服务处于running状态,但是无法访问,检查防火墙和selinux是否已经关闭
FTP服务配置文件:/etc/vsftpd/vsftpd.conf
FTP默认对外共享文件夹:/var/ftp
FTP日志文件,记录用户的上传和下载:/var/log/xferlog
FTP服务器用户黑名单文件:/etc/vsftpd/ftpusers
FTP服务器用户黑白名单文件:/etc/vsftpd/user_list
安装ftp客户端
准备工作:网络畅通,yum仓库可用,已关闭防火墙和selinux
①安装
yum -y install lftp
②连接FTP服务器端
lftp FTP服务器端IP地址
ftp客户端相关操作
断开连接:exit
常规操作:ls cd
下载文件:get 文件名
下载目录:mirror 目录名
lftp无法下载ftp服务器端的文件/目录,可能是该文件/目录的权限问题
开启匿名用户的上传功能
①在对外共享目录下(默认为/var/ftp/)创建一个目录
给该目录写权限,在该目录内创建文件/目录
mkdir /var/ftp/upload
chmod 777 /var/ftp/upload/
②修改ftp配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重新读取配置文件:systemctl restart vsftpd
③使用客户端上传文件
lftp 服务器端IP
cd upload/
上传文件:put 上传文件名(绝对路径)
上传目录:mirror -R 上传目录名(绝对路径)
注意:
对外共享文件夹本身并不能设置777权限,否则会报错
上传文件/目录之前,要切换进对应的目录
常用的匿名FTP配置项
anonymous_enable=YES # 是否允许匿名用户访问
anon_umask=022 # 匿名用户所上传文件的权限掩码
anon_root=/var/ftp # 设置匿名用户的FTP根目录
anon_upload_enable=YES # 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES # 是否允许匿名用户允许创建目录
anon_other_write_enable=YES # 是否允许匿名用户有其他写入权(改名,删除,覆盖)
anon_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
更改ftp匿名用户对外共享目录
①在服务器端创建ftp指定对外共享目录
mkdir /tmp/ftp
②修改ftp配置文件
vim /etc/vsftpd/vsftpd.conf
在配置文件末尾加一行:anon_root=/tmp/ftp
重新读取配置文件:systemctl restart vsftpd
③验证
用服务器端在指定对外共享文件夹下( /tmp/ftp/)新建文件/目录
使用客户端lftp查看
启用FTP用户登录(普通用户)
①在服务器端添加用户和密码
useradd user01
passwd user01
②修改ftp配置文件
vim /etc/vsftpd/vsftpd.conf
local_enable=YES
(没开启的开启,本来就开着的不用管)
③在客户端普通用户登录
lftp 服务器端IP -u user01
Password:*****
普通用户默认对外共享目录为普通用户的家目录:/home/user01/
所以不同的普通用户对应着不同的对外共享目录
④验证
在服务器端用户的家目录下创建一个文件/目录touch /home/user01/u01
使用客户端lftp普通用户登录可以查看
常用的普通用户FTP配置项
local_enable=YES # 是否允许本地系统用户访问
local_umask=022 # 本地用户所上传文件的权限掩码
local_root=/var/ftp # 设置本地用户的FTP根目录
chroot_list_enable=YES # 表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list # 表示写在/etc/vsftpd/chroot_list文件里面的用户是不可以出chroot环境的。默认是可以的。
chroot_local_user=YES # 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。
local_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
设定不同的普通用户使用同一个对外共享目录
①创建普通用户共享目录
mkdir /home/ftp
②修改ftp配置文件
vim /etc/vsftpd/vsftpd.conf
Local_root=/home/ftp
重新读取配置文件:systemctl restart vsftpd
③验证
在服务器端用户的家目录下创建一个文件/目录touch /home/ftp/test
使用客户端lftp不同的普通用户登录可以查看
开启普通用户上传功能
①在普通用户对外共享目录下(已被修改为/home/ftp/)创建一个目录,可以在该目录内创建文件/目录(给写权限)
mkdir /home/ftp/upload
chmod 777 /home/ftp/upload/
②修改ftp配置文件
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重新读取配置文件:systemctl restart vsftpd
③验证
使用客户端lftp普通用户登录可以在upload/目录下上传文件/目录
ftp服务黑白名单
ftp黑名单文件:/etc/vsftpd/ftpusers
注意:黑名单文件ftpusers 优先级高于 黑白名单文件user_list
ftp黑白名单文件:/etc/vsftpd/user_list
修改ftp配置文件:vim /etc/vsftpd/vsftpd.conf
在配置文件中添加一行参数:userlist_deny=YES/NO
当 userlist_deny=YES 时,/etc/vsftpd/user_list 为黑名单文件
用户在 user_list 文件中,则该用户不可以访问FTP
用户不在 user_list 文件中,则该用户可以访问FTP
当 userlist_deny=NO 时,/etc/vsftpd/user_list 为白名单文件
用户在 user_list 文件中,则该用户可以访问FTP
用户不在 user_list 文件中,则该用户不可以访问FTP
黑名单文件ftpusers 优先级高于 黑白名单文件user_list
userlist_deny=NO时,用户在 user_list 文件中的同时也在ftpusers中,仍然不可以访问FTP
vsftpd.conf 配置文件参数详解
listen=YES # 是否以独立运行的方式监听服务
listen_address=192.168.4.1 # 设置监听FTP服务的IP地址
listen_port=21 # 设置监听FTP服务的端口号
write_enable=YES # 是否启用写入权限(上传,删除文件)
download_enable=YES # 是否允许下载文件
dirmessage_enable=YES # 用户切换进入目录时显示.message文件
xferlog_enable=YES # 启用日志文件,记录到/var/log/xferlog
xferlog_std_format=YES # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式
connect_from_port_20=YES # 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES # 允许服务器被动模式
pasv_max_port=24600 # 设置被动模式服务器的最大端口号
pasv_min_port=24500 # 设置被动模式服务器的最小端口号
pam_service_name=vsftpd # 用户认证的PAM文件位置(/etc/pam.d/vsftpd.vu)
userlist_enable=YES # 是否启用user_list列表文件
userlist_deny=YES # 是否禁用user_list中的用户
max_clients=0 # 限制并发客户端连接数
max_per_ip=0 # 限制同一IP地址的并发连接数
tcp_wrappers=YES # 是否启用tcp_wrappers主机访问控制
chown_username=root # 表示匿名用户上传的文件的拥有人是root,默认关闭
ascii_upload_enable=YES # 表示是否允许用户可以上传一个二进制文件,默认是不允许的
ascii_download_enable=YES # 这个是代表是否允许用户可以下载一个二进制文件,默认是不允许的
nopriv_user=vsftpd # 设置支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户
async_abor_enable=YES # 设定支持异步传输功能
ftpd_banner=Welcome to Awei FTP servers # 设定Vsftpd的登陆标语
guest_enable=YES # 设置启用虚拟用户功能
guest_username=ftpuser # 指定虚拟用户的宿主用户
virtual_use_local_privs=YES # 设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vconf # 设定虚拟用户个人Vsftp的配置文件存放路径