存储类型了解:
DAS :本地存储
SAN :远端存储(与本地磁盘使用感觉一样,可以删,可以格式化)
NAS :远端存储(只能存储数据空间只能用,管理不了;就像百度云盘)
工作原理
FTP:file transfer protocol 文件传输协议
结构类型 :
是c/s 架构
双通道协议:
① 数据通道
② 命令连接的通道
数据传输的格式:
① 二进制格式(默认格式)
② 文本格式
数据传输连接模式:
主动模式:服务器数据端口,会使用 tcp20 端口去连接实时协商的客户端随机端口 (随机端口每次传输都不一样)
被动模式:客户端主动去连接服务器端,客户端口 与服务端口都是随机的,是在传输数据时实时协商的;每次传输数据,端口都是会变的
服务器主动连接客户端(主动模式):
客户端端口 服务器端口
命令连接 : 随机 ----------------------------> tcp 21
数据连接 : 随机 <---------------------------- tcp 20
客户端主动连接服务器(被动模式):
客户端端口 服务器端口
命令连接 : 随机 ----------------------------> tcp 21
数据连接 : 随机 ----------------------------> 随机
服务器被动模式数据端口:
227 Entering Passive Mode (10,0,0,4,165,41).
被动模式,服务端 随机端口号计算:165 * 256 + 41 = 7661
查看服务端 随机端口确实为 7661
[root@centos-mini ~]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.0.0.4:21 10.0.0.7:50798
ESTAB 0 0 10.0.0.4:43309 10.0.0.12:58625
ESTAB 0 52 10.0.0.4:22 10.0.0.1:14051
ESTAB 0 25528 10.0.0.4:7661 10.0.0.7:34104
ESTAB 0 0 10.0.0.4:49413 10.0.0.12:48533
[root@centos-mini ~]#
客户端连接介绍
客户端软件:
ftp,lftp,lftpget,waget,curl
指定模式登录:
ftp -A ftpserver_IP port { -A 主动模式 | -p 被动模式 }
指定用户名登录:
方法一:lftp -u username ftpserver_IP
方法二:lftp username@ftpserver_IP
下载文件:
vsftpd安装完,服务端上默认匿名(不要密码)访问路径:/var/ftp
1.linux下的ftp载命令:
ftp服务端IP:10.0.0.4
方法一:lftpget ftp://10.0.0.4/pub/test_ftp_4
方法二:wget ftp://10.0.0.4/pub/test_ftp_4 ( --ftp-user=USER --ftp-password=PASS )
方法三:curl -O ( -u USER:PASSWORD )ftp://10.0.0.4/pub/test_ftp_4
方法四:curl -O ftp://( USER:PASSWORD )@10.0.0.4/test_ftp_4
2.windows 下 ftp下载:
-
方法一:安装 filezilla 客户端下载(filezilla是免费开源的 https://dl3.cdn.filezilla-project.org/client/FileZilla_3.48.1_win64.zip?h=8zpjwhcizinrd1j4r48h-Q&x=1590200215)
-
方法二:windows 下可直接输入 ftp://10.0.0.4/ 进入浏览文件列表
-
方法三: 浏览器连接: ftp://ftpuser:123456@10.0.0.4
连接服务器的状态码:
1xx :信息 125 : 数据连接打开
2xx :成功类信息 200 :命令OK 230 :登录成功
3xx :补充类 331 : 用户名OK
4xx : 客户端错误 425 :不能打开数据连接
5xx : 服务器错误 530 :不能登录
用户认证:
匿名用户:linux的 ftp 用户 对应 ftp,anonymous (不需要密码,或者连账号都不用输入,默认以
/var/ftp
作为根 " / " 目录 )
系统用户:linux用户,正常使用linux 的 用户 密码 登录即可
虚拟用户:ftp特定的专用账户,独立的用户/密码文件
软件介绍
vsftpd软件
vsftpd 全称 Very Secure FTP daemon;是红帽公司出的一款ftp 服务软件
红帽官网数据 (https://www.redhat.com/zh/about/press-releases/186?source=searchresultlisting)
FTP服务器可同时处理多达15000个用户。单个服务器 处理超过2500次并发下载。
服务脚本:
/etc/init.d/vsftpd
/usr/lib/systemd/system/vsftpd.service
主配置文件及解释:
/etc/vsftpd/vsftpd.conf
#这里的所有参数都可以通过 man 5 vsftpd.conf 查看解释
#指定服务端口,不加默认 21
listen_port=21
#控制 主动模式 开关( connect_from_port_20 名字比较有疑惑性,不要在意,就是个开关),默认开启,默认 20 端口;
#改为 "NO" ,能以主动模式登录ftp服务器,但是,无法传输数据,和执行与数据相关的命令(如:ls)
connect_from_port_20=YES
# 指定 主动模式,数据传输的 端口;生效前提,需先配置 connect_from_port_20=YES ;
ftp_data_port=20
#被动模式指定连接的端口范围,max,min 默认都为 0,即默认 5000以上的任意端口;
pasv_max_port=6200
pasv_min_port=6000
#使用当地时间,默认 "NO", 默认显示时间为 GMT,我们当地时间为 UTC
use_localtime=YES
#匿名用户:
#支持匿名用户,默认开启,改为NO 匿名用户无法登录
anonymous_enable=YES
#匿名用户登录无需输入密码(直接略过口令登陆),默认关闭
no_anon_password=YES
#只能下载,所有用户都有,读权限的文件(chmod o+r),默认YES
anon_world_readable_only=YES
#匿名上传文件,默认NO;要注意一下,上传文件的用户,对系统本身的目录,是否有写权限
anon_upload_enable=NO
#给匿名用户创建目录的权限;默认NO;生效前提 write_enable=YES,默认YES
anon_mkdir_write_enable=NO
#如果设置为 YES,则允许匿名用户执行除上传和创建目录以外的写入操作,例如删除和重命名。
anon_other_write_enable=NO
#指定匿名上传的umask,默认 077
anon_umask=077
#指定上传文件的默认的所有者权限
chown_uploads=YES (默认NO)
chown_username=wang
chown_upload_mode=0644
#linux系统账户:
#所有linux系统用户映射都成guest用户
guest_enable=YES (默认NO)
#指定 guest 用户,需要与 guest_enable=YES 连用
guest_username=ftp (默认用户:ftp)
#允许linux系统用户登陆
local_enable=YES
#允许linux系统用户上传文件
write_enable=YES
#指定 linux 系统用户上传文件的默认权限,注意 不要与匿名上传的umask混为一谈
local_umask=022
#指定非匿名用户登陆的默认目录
local_root=/ftproot (默认 none)
#禁锢 所有 linux 系统本地用户,只能访问指定的目录,以以目录为 登陆ftp的根 "/"(圈禁,不允许访问其它目录,提高安全性)
#注意:如果 报错 500 OOPS: vsftpd: refusing to run with writable anonymous root;
#是不能给家目录 写 权限,只能在加目录下 新建目录,再给写权限
chroot_local_user=YES (默认 NO)
#禁锢 列表中 linux 系统本地用户,只能访问自己的家目录,以自己的家目录为 登陆ftp的根 "/"
#开启禁锢列表
chroot_list_enable=YES
#禁锢列表文件,chroot_local_user=YES,列表用户为白名单,不禁锢;反之 chroot_local_user=NO,则为黑名单
chroot_list_file=/etc/vsftpd/chroot_list
#日志信息:
#wu-ftp日志:默认启用
# 启动记录上传下载日志
xferlog_enable=YES
#使用wu-ftp日志格式
xferlog_std_format=YES
#日志路径
xferlog_file=/var/log/xferlog
#vdftp日志:默认不启用
#启用日志
dual_log_enable=NO
#日志路径
vsftpd_log_file=/var/log/vsftpd.log (默认路径)
#登陆提示信息:
#配置文件填入 登陆提示
ftpd_banner=Welcome to blah FTP service.
#登陆提示 指定到某个文件(优先级高于 ftpd_banner)
banner_file=/root/login.ftp
#访问目录显示信息;
#只有再登陆后,第一次进入有提示信息(.message)的目录,才会出现提示信息;
# .message 放在需要提示的目录中,系统默认会找这个文件
dirmessage_enable=YES (默认YES)
message_file=.messgae (默认文件,存储提示内容)
#用户权限控制
#用户权限通过 pam 控制,对应控制文件:/etc/vsftpd/ftpusers:
pam_service_name=vsftpd (默认vsftpd 对应/etc/pam.d/vsftpd文件 )
#vsftpd自带权限控制 对应控制文件:/etc/vsftpd/user_list
#开启控制权限 与 userlist_deny=YES 连用
userlist_enable=YES (默认NO)
#userlist_deny=YES 列表用户拒绝访问(黑名单);userlist_deny=NO ,只允许列表用户访问(白名单)
userlist_deny=YES
#连接限制
#限制最大并发连接数(超过上限报错:There are too many connected user,please try later)
max_clients=1000 (默认 2000)
#限制单个客户端IP连接的并发数
max_per_ip=10 (默认50)
vsftpd 目录文件
[root@centos-mini pam.d]# ll /etc/vsftpd/
总用量 24
-rw-r--r-- 1 root root 8 5月 23 19:00 chroot_list
-rw------- 1 root root 133 5月 30 22:54 ftpusers
-rw------- 1 root root 361 3月 22 2017 user_list
-rw------- 1 root root 4611 5月 23 20:08 vsftpd.conf
-rwxr--r-- 1 root root 338 3月 22 2017 vsftpd_conf_migrate.
1. ftpusers文件作用
是通过 pam做的权限控制,控制用户认证的列表文件
pam控制用户访问ftp服务(不是ftp专用服务,别的服务也可以用它来配置认证):
在这里指定的文件访问权限:
-
sense=deny
表示/etc/vsftpd/ftpusers
为黑名单,文件列表内的服务器不能访问ftp服务 -
sense=allow
则表示/etc/vsftpd/ftpusers
白名单,只有文件列表的用户可以访问 ftp服务
[root@centos-mini pam.d]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
以上方法生效的前提是pam_service_name=vsftpd
:
pam_service_name=vsftpd 指的就是 → /etc/pam.d/vsftpd
vim /etc/vsftpd/vsftpd.conf
#用户权限通过 pam 控制:
pam_service_name=vsftpd (默认存在)
省略。。。
2. user_list文件作用
vsftpd自带的权限控制,与
ftpusers
的用法基本一样,控制用户登陆的列表文件
#vsftpd自带权限控制 对应控制文件:/etc/vsftpd/user_list
#开启控制权限 与 userlist_deny=YES 连用
userlist_enable=YES (默认NO)
#userlist_deny=YES 列表用户拒绝访问(黑名单);userlist_deny=NO ,只允许列表用户访问(白名单)
userlist_deny=YES
3.chroot_list文件作用
linux 系统用户登陆后,以自己的家目录为根
"/"
目录,操作锁定到家目录里
#禁锢 所有 linux 系统本地用户,只能访问自己的家目录,以自己的家目录为 登陆ftp的根 "/"
#注意:如果 报错 500 OOPS: vsftpd: refusing to run with writable anonymous root;
#是不能给家目录 写 权限,只能在加目录下 新建目录,再给写权限
#现在这个BUG被应该修复了
chroot_local_user=YES (默认 NO)
#禁锢 列表中 linux 系统本地用户,只能访问自己的家目录,以自己的家目录为 登陆ftp的根 "/"
#开启禁锢列表
chroot_list_enable=YES
#禁锢列表文件,chroot_local_user=YES,列表用户为白名单,不禁锢;反之 chroot_local_user=NO,则为黑名单
chroot_list_file=/etc/vsftpd/chroot_list
4. 指定默认执行账户
这是vsftpd想要完全取消特权时使用的用户的名称。请注意,这应该是一个专门的用户,而不是
nobody
。在大多数机器上,nobody
会被用来做很多重要的事情。(降权的,root用户只启动程序,不以root省份运行程序。提高安全性)
nopriv_user=laowang (默认 nobody)
默认用户:
#修改前
[root@centos-mini vsftpd]# ps auxf|grep ftp
root 1609 0.0 0.1 139280 5236 pts/0 S+ May30 0:00 | \_ vim /etc/vsftpd/vsftpd.conf
root 15328 0.0 0.0 103332 892 pts/1 S+ 15:09 0:00 \_ grep ftp
root 14733 0.0 0.0 52124 844 ? Ss May30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 15247 0.0 0.0 58912 2128 ? Ss 15:08 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftpuser 15258 0.0 0.0 58936 1256 ? S 15:08 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
#修改后
[root@centos-mini ~]# ps -auxf|grep ftpd
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 16931 0.0 0.0 103332 892 pts/0 S+ 15:34 0:00 | \_ grep ftpd
root 16800 0.0 0.0 52124 840 ? Ss 15:32 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
laowang 16921 0.0 0.0 58912 2132 ? Ss 15:34 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftpuser 16925 0.0 0.0 58936 1256 ? S 15:34 0:00 \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
5.用户限速下载
- 本匿名用户限速下载
匿名客户端允许的最大数据传输速率(字节/秒)。
anon_max_rate=1024000 (默认 0,不限速;102400b=1Mb,限速后,每个匿名用户下载都是1Mb的速度)
- 本地用户限速下载
本地身份验证用户允许的最大数据传输速率(字节/秒)。
local_max_rate=102400 (默认 0,不限速;102400b=1Mb,限速后,每个本地用户下载都是1Mb的速度)
6.连接超时时间
connect_timeout=60 (默认60) 主动模式数据连接超时时长
accept_timeout=60 (默认60) 被动模式数据连接超时时长
data_connection_timeout=300 (默认300) 数据传输没有反应的时候,设置超时的时间
idle_session_timeout=60 (默认60) 无命令操作超时时长
7.优先以文本方式传输
文本模式下载,会默认增加换行符等格式符号;所以,最好还是用 二进制传输,不要开启文本模式,二进制文件传输后,就不能使用了;默认就是使用二进制的
ascii_download_enable=YES (默认 NO)
ascii_upload_enable=YES (默认 NO)
8.独立服务器与非独立服务
设置成listen=NO,就是非独立服务;一般不用去改变它,主要是针对centos 6的,centos 7 全都是 systemd接管的非独立服务
#由于 centos 7 是systemd接管所有服务,所有服务都是非独立服务
#在centos 7上:
listen=NO
#centos 6 上默认是 独立服务,如果平时使用不多,可以把ftp 加入到 xinetd,改为非独立服务
在centos 6 上:
listenYES
9.网络传输进行加密
提高网络传输的安全性,防止恶意抓包盗取数据,所以要对数据包进行加密,该加密为网络层第 4层 传输层的加密
- 查看依赖的加密库文件是否存在
[root@centos-mini certs]# ldd `which vsftpd`|grep ssl
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f46700b0000)
- 更改 vsftpd 配置文件,开启 ssl 加密传输
vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES(默认 NO) # 启动ssl加密 ( 该条YES 为 下面四条生效的前提 )
allow_anon_ssl=NO (默认 NO) # 匿名不支持ssl
force_local_logins_ssl=YES (默认YES) # 本地用户登陆加密
force_local_data_ssl=YES (默认 YES) # 本地用户数据传输加密
rsa_cert_file= /etc/pki/tls/certs/vsftpd.pem
3.生成ssl 证书
cd /etc/pki/tls/certs
make vsftpd.pem
tcpdump -nn -i eth0 -x port 21
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:guangdong
Locality Name (eg, city) [Default City]:shenzhen
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
生成 vsftpd.pem 加密证书
[root@centos-mini certs]# ls
ca-bundle.crt ca-bundle.trust.crt localhost.crt make-dummy-cert Makefile renew-dummy-cert vsftpd.pem
连接ftp服务器上面生成证书时填写的相关信息,这里就有显示了
加密传输就完成了