FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
文件传输:文件上传与文件下载
FTP软件名称 => vsftpd => vs(very secure ftp daemon)
在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默认使用的就是被动模式!
1. 关闭防火墙和selinux
2. 配置yum源(mount /dev/sr0 /mnt)
3. 软件三部曲
4. 了解配置文件
5. 根据需求修改配置文件来完成服务的搭建
6. 启动服务,开机自启动
7. 测试验证
第一步:关闭防火墙与SELinux
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
第二步:配置YUM源
有网配置公网YUM源(阿里、清华、华为),没网就配置本地YUM源
这里用公网阿里云
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
第三步:安装vsftpd软件(FTP => vsftpd)
# yum install vsftpd -y
这里需要一些环境,如果报错的话
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
第四步:启动ftp服务并添加到开机启动项中
# systemctl start vsftpd
# systemctl enable vsftpd
第五步:测试FTP是否安装成功
☆ 基于Windows资源管理器的访问
在我的电脑上,输入栏里:ftp://192.168.1.12
☆ 基于FlashFxp、FileZilla软件
☆ 基于ftp以及lftp命令进行连接(Linux与Linux之间的FTP文件传输)
yum install ftp lftp -y
# ftp 192.168.1.12
单个文件:
上传: put 文件名
下载: get 文件名
多个文件:
上传多个文件(支持通配符):mput 文件名1 文件名2
下载多个文件(支持通配符):mget 文件名1 文件名2
整个目录:
上传文件夹:mirror -R 文件夹名
下载文件夹:mirror 下载文件夹存放到本地目录的位置
lftp是一个功能强大的下载工具,它支持访问文件的协议:ftp,sftp, ftps, http, hftp, fish.(其中ftps和https需要在编译的时候包含openss库)。lftp的界面和shell很像:有命令补全功能,历史记录,允许多个后台任务执行等功能,使用起来比较疯便。而且它还具有书签,排队,镜像,断点续传,多进程下载等功能。
1、登录ftp
//命令格式:
lftp用户名:密码@ftp地址:传送端口(默认为21)
用法
(1)lftp username:password@127.0.0.0 回车
(2)lftp username@127.0.0.0 回车 #默认端口为21 ,回车后输入密码
(3)lftp 127.0.0.0 回车 ##回车后 login [] 登录
(4)lftp 回车 -->open 127.0.0.0-->login 登录
//如果在命令行中输入站点的名称,lftp将直接登录站点
如:ivy@ivy-OptiPlex-380:~$ lftp ftp://androidftp:androidftp@192.168.12.76/
cd 成功, 当前目录=/
lftp androidftp@192.168.12.76:/>
//如果不在命令行输入站点名称,则必须在进入到ftp界面后用open命令打开
2、下载文件
下载文件前首先要设置还本地的目录,用来存放下载的文件
lcd /home/ivy/doc ##设置本地存放目录get filename (如1.txt,ppt, pdf) //下载单个文件mget *.txt //下载一组文件,也即是批量下载所有的txt文件
get -c 1.txt //断点续传下载
mget -c *.txt //断点续传
pget -c n 10 file.dat //最多10个线程以允许断点续传的方式下载file.dat
mget -d dirname/(通配符*) //下载目录
mirror dirname //将目录的整个下载下来,子目录也会自动复制到,本地自动建立目录
3、 上传文件put 1.txt
mput *.txt
mirror -R miao //上传整个目录
mput -d dirname/* #上传目录
!ls浏览本体目录
cd切换到远端目录(lcd 切换到本地目录)
基本使用方法:
1)、下载服务器端文件:
# mirror –vn RCD LCD //RCD为远程路径,LCD为本地路径
2)、上传文件:
# mirror –R LCD RCD4.从远程主机上下载目录文件通过sftp下载目录:
lftp sftp://user@host -p port lftp :> mirror my_path
在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配置文件详解:
# grep -v ^# /etc/vsftpd/vsftpd.conf
anonymous_enable=YES 支持匿名用户访问
local_enable=YES 支持非匿名用户,普通账号登录,默认进入到自己家目录
write_enable=YES 写总开关
local_umask=022 反掩码 file:644 rw- r-- r-- dir:755
dirmessage_enable=YES 启用消息功能
xferlog_enable=YES 开启或启用xferlog日志
connect_from_port_20=YES 支持主动模式(默认被动模式)
xferlog_std_format=YES xferlog日志格式
listen=YES ftp服务独立模式下的监听
pam_service_name=vsftpd 指定认证文件
userlist_enable=YES 启用用户列表
tcp_wrappers=YES 支持tcp_wrappers功能(FTP限速操作)
# man 5 vsftpd.conf
简单来说:根据我们所学的内容(FTP)搭建一个客户服务系统(主要涉及客服资料上传与下载)
1. 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
2. 不允许匿名用户访问
3. 客服部门的相关文档保存在指定的目录里/data/kefu local_root=/data/kefu
4. 客服用户使用用户kefu/123登录后就只能在默认的/data/kefu目录里活动
# useradd wu
# echo 123 |passwd --stdin wu
# vim /etc/vsftpd/vsftpd.conf
12行 anonymous_enable=NO
listen=YES 改成yes 115
listen_ipv6=YES 删掉 124
配置修改完毕后,一定要重启vsftpd服务
# systemctl restart vsftpd
# mkdir /data/wu -p
# vim /etc/vsftpd/vsftpd.conf
17行 local_root=/data/kefu
禁锢kefu用户只能在/data/kefu目录下
# vim /etc/vsftp/vsftpd.conf
18行 chroot_local_user=YES
配置修改完毕后,一定要重启vsftpd服务
# systemctl restart vsftpd
完整配置
anonymous_enable=NO #禁止匿名用户访问
local_enable=YES
write_enable=YES
local_root=/data/wu #指定账号访问的目录
chroot_local_user=YES #限定wu/123只能在/data/wu目录下活动
allow_writeable_chroot=YES #版本问题,不添加会报错
local_umask=022
dirmessage_enable=YES #启用消息功能
xferlog_enable=YES #开启或启用xferlog日志
connect_from_port_20=YES #支持主动模式(默认被动模式)
xferlog_std_format=YES
listen=YES #ftp服务独立模式下的监听
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO #开启白名单,黑名单
tcp_wrappers=YES
以上问题主要出现在FTP2.3.5以后的版本中,当然你可以使用
# rpm -qi vsftpd 查看版本信息
解决方案:
① 去除写权限(治标不治本)
# chmod a-w /home/dhj
② 核心解决方案,添加一个选项
# vim /etc/vsftpd/vsftpd.conf
19行 allow_writeable_chroot=YES
② 核心解决方案,禁用一个选项
#listen_ipv6=YES
之所以无法上传,主要原因在于kefu这个账号对于/data/kefu文件夹没有w写权限
# setfacl -R -m u:kefu:rwx /data/kefu
# systemctl restart vsftpd
18行 chroot_local_user=YES 禁锢所有用户
需求:我们能不能给一小部分用户开通非禁锢权限。
# vim /etc/vsftpd/vsftpd.conf
105行 chroot_list_enable=YES 开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件
echo wu >> /etc/vsftpd/chroot_list 代表客服这个账号不会被禁锢在指定目录
# systemctl restart vsftpd
FTP、NFS以及SAMBA服务
ftp、lftp都是Linux下ftp的客户端管理工具,但是需要独立安装
# yum install ftp lftp -y
# ftp 192.168.1.12
Connected to 192.168.1.12 (192.168.1.12).
220 (vsFTPd 3.0.2)
Name (192.168.1.12:root): 输入FTP的账号
331 Please specify the password.
Password: 输入FTP账号对应的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
求帮助:
ftp> ?或help
Commands may be abbreviated. Commands are:
! debug mdir sendport site
$ dir mget put size
account disconnect mkdir pwd status
append exit mls quit struct
ascii form mode quote system
bell get modtime recv sunique
binary glob mput reget tenex
bye hash newer rstatus tick
case help nmap rhelp trace
cd idle nlist rename type
cdup image ntrans reset user
chmod lcd open restart umask
close ls prompt rmdir verbose
cr macdef passive runique ?
delete mdelete proxy send
第一个命令:ls命令
ftp> ls
查看当前连接的FTP目录下有哪些文件。
第三个命令:help命令
ftp> help put
put send one file
第四个命令:put与get命令
ftp> put 本地文件路径+名称 上传
ftp> get 远程文件路径+名称 下载
第五个命令:批量上传或下载多个文件
ftp> mput 文件名称1 文件名称2 文件名称3 ...
ftp> mget 文件名称1 文件名称2 文件名称3 ...
第六个命令:quit命令
ftp> quit
# lftp 用户名称@远程IP地址
Password:用户名称对应的密码
求帮助:help
lftp> help
针对某个命令求帮助:help + 命令
lftp> help mirror
案例:批量上传(把shop文件夹上传到FTP服务器端)
lftp> mirror -R 本地文件夹名称
案例:批量下载(把整个FTP下载到本地)
lftp> mirror 远程FTP路径
ftpusers 黑名单
user_list 默认是黑名单(可以成为白名单)
案例:默认情况下,root账号是否允许登录FTP服务器
[root@localhost ftp]# ftp 192.168.1.12
220 (vsFTPd 3.0.2)
Name (192.168.1.12:root): root
530 Permission denied.
Login failed.
ftp>
原因:root用户在黑名单里/etc/vsftpd/ftpusers黑名单中
案例:user_list可以从黑名单变成白名单(允许某个用户登录FTP系统服务器)
user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。
总结:
FTP必须支持tcp_wrappers
/etc/hosts.allow 允许
/etc/hosts.deny 拒绝
案例:如何禁止某个IP或IP网段
# vim /etc/hosts.deny
服务程序:主机
vsftpd:all 全部拒绝
vsftpd:all EXCEPT 192.168.0.2 拒绝所有除了192.168.0.2
vsftpd:192.168.0.254 拒绝单个IP地址
vsftpd:192.168.0.254:allow
//以上是允许192.168.0.254访问,类似/etc/hosts.allow里增加vsftpd:192.168.0.254
vsftpd:192.168.0.0/255.255.255.0 拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254 拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法
vim /etc/hosts.deny
vsftpd,sshd:10.1.1.1
案例:如何判断某个服务是否支持tcp_wrappers
1)./configure –enable-libwrap 表示支持tcp_wrappers访问控制(源码安装看配置项)
2)rpm安装(也包括yum安装)
# ldd命令 +二进制程序,查询某个软件包含哪些模块
案例:查询vsftpd与sshd是否支持tcp_wrappers
# ldd /usr/sbin/vsftpd |grep libwrap*
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2956480000)
# ldd /usr/sbin/sshd |grep libwrap*
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f015ff29000)
# vim /etc/vsftpd/vsftpd.conf
local_max_rate=0
0代表不限速
local_max_rate=数值 + 字节
local_max_rate=1024K
登录用户 wu,zs,lisi,密码123
一、搭建ftp服务--创建指定用户在指定目录
1.关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
2.配置yum源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
3.服务器安装vsftpd软件
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
# yum install vsftpd -y
# systemctl start vsftpd
# systemctl enable vsftpd
4.配置
# grep -v ^# /etc/vsftpd/vsftpd.conf>vsftpd.conf.1
# vim vsftpd.conf.1
修改内容
anonymous_enable=NO #禁止匿名用户访问
local_enable=YES
write_enable=YES
local_root=/data/wu #指定账号访问的目录
chroot_local_user=YES #限定wu/123只能在/data/wu目录下活动
allow_writeable_chroot=YES #版本问题,不添加会报错
local_umask=022
dirmessage_enable=YES #启用消息功能
xferlog_enable=YES #开启或启用xferlog日志
connect_from_port_20=YES #支持主动模式(默认被动模式)
xferlog_std_format=YES
listen=YES #ftp服务独立模式下的监听
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO #开启白名单,黑名单
tcp_wrappers=YES
排错指南
重启vsftpd服务时,报错
#systemctl status vsftpd 下面是failed ,
这里检查两个,一个是配置文件vsftpd.conf 一个是进程21
losf -i:21 直接kill
配置文件检查里面是否有写错的地方,如果没有明显错误,就检查有没有空格,每行的后面也要检查
#cat vsftpd.conf.1 >/etc/vsftpd/vsftpd.conf
5.创建可登录用户和创建家目录--测试
# useradd wu
# useradd zs
# useradd lisi
# echo 123 |passwd --stdin wu
# echo 123 |passwd --stdin zs
# echo 123 |passwd --stdin lisi
# mkdir /data/wu -p
如果无法上传:# setfacl -R -m u:wu:rwx /data/wu
6.重启服务
# systemctl restart vsftpd
7.特殊权限用户
# vim /etc/vsftpd/vsftpd.conf
105行 chroot_list_enable=YES 开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件
echo wu >> /etc/vsftpd/chroot_list 代表wu这个账号不会被禁锢在指定目录
# systemctl restart vsftpd
二、windows链接和linux链接,上传下载文件
windows
浏览器、文件管理器
ftp://192.168.8.137
要可以上网的地址
linux
1.下载ftp以及lftp
yum install ftp lftp -y
ftp 192.168.8.137
三、ftp客户端管理工具
1.ftp
单个文件:
上传: put 文件名
下载: get 文件名
多个文件:
上传多个文件(支持通配符):mput 文件名1 文件名2
下载多个文件(支持通配符):mget 文件名1 文件名2
整个目录:
上传文件夹:mirror -R 文件夹名
下载文件夹:mirror 下载文件夹存放到本地目录的位置
2.lftp工具:批量操作
针对某个命令求帮助:help + 命令
1、登录ftp
lftp用户名:密码@ftp地址:传送端口(默认为21)
lftp wu:123@192.168.8.137回车
2、下载文件
下载文件前首先要设置还本地的目录,用来存放下载的文件
lcd /home/ivy/doc ##设置本地存放目录get filename (如1.txt,ppt, pdf)
//下载单个文件mget *.txt
//下载一组文件,也即是批量下载所有的txt文件
get -c 1.txt //断点续传下载
mget -c *.txt //断点续传
pget -c n 10 file.dat //最多10个线程以允许断点续传的方式下载file.dat
mget -d dirname/(通配符*) //下载目录
mirror dirname //将目录的整个下载下来,子目录也会自动复制到,本地自动建立目录
3、 上传文件put 1.txt
mput *.txt
mirror -R miao //上传整个目录
mput -d dirname/* #上传目录
基本使用方法:
1)、下载服务器端文件:
# mirror –vn RCD LCD //RCD为远程路径,LCD为本地路径
2)、上传文件:
# mirror –R LCD RCD4.从远程主机上下载目录文件通过sftp下载目录:
lftp sftp://user@host -p port lftp :> mirror my_path
四、黑名单白名单,网络限速,禁止ip,网段
1.ip
# vim /etc/hosts.deny
服务程序:主机
vsftpd:all 全部拒绝
vsftpd:all EXCEPT 192.168.0.2 拒绝所有除了192.168.0.2
vsftpd:192.168.0.254 拒绝单个IP地址
vsftpd:192.168.0.254:allow
//以上是允许192.168.0.254访问,类似/etc/hosts.allow里增加vsftpd:192.168.0.254
vsftpd:192.168.0.0/255.255.255.0 拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254 拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法
vim /etc/hosts.deny
vsftpd,sshd:10.1.1.1
2.黑名单,白名单
ftpusers 黑名单
user_list 默认是黑名单(可以成为白名单)
user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。
3.限制流量
# vim /etc/vsftpd/vsftpd.conf
local_max_rate=0
0代表不限速
local_max_rate=数值 + 字节
local_max_rate=1024K
1. 安装vsftpd
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
# yum install vsftpd -y
# systemctl start vsftpd
# systemctl enable vsftpd
2. 创建账号zs和lisi
# useradd zs
# useradd lisi
# echo 123 |passwd --stdin zs
# echo 123 |passwd --stdin lisi
3. zs可以登陆ftp,lisi不可以
这里在/etc/vsftpd/vsftpd.conf中添加
userlist_deny=NO
配置中添加
allow_writeable_chroot=YES --版本超过FTP2.3.5,会报错,所以添加这段
将zs添加到白名单 user_list文件中
# echo zs >> user_list
# systemctl restart vsftpd
4. zs可以下载和上传文件
给zs用户写的权限
# setfacl -R -m u:zs:rwx /data/kefu
# systemctl restart vsftpd
5. lisi可以下载但不能上传
将lisi添加到白名单即可
# echo lisi >> user_list
# systemctl restart vsftpd
6. 给所有用户限速 为1M
在配置中添加
# vim /etc/vsftpd/vsftpd.conf
# systemctl restart vsftpd
local_max_rate=1024K
7. 不允许从192.168.1.11上进行登陆,其他ip都可以
# vim /etc/hosts.deny
在配置下面添加
vsftpd:192.168.1.11
# systemctl restart vsftpd
8. 设置root可以登陆ftp
将root从黑名单中删除
# vim /etc/vsftpd/ftpusers
删除root
# systemctl restart vsftpd
9.禁锢所有用户在/data/kefu目录之下
在配置中添加
local_root=/data/kefu
chroot_local_user=YES
# systemctl restart vsftpd