FTP

存储类型了解:

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下载:

连接服务器的状态码:
   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层 传输层的加密

  1. 查看依赖的加密库文件是否存在

[root@centos-mini certs]# ldd `which vsftpd`|grep ssl
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f46700b0000)
  1. 更改 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服务器
111111111111.png

上面生成证书时填写的相关信息,这里就有显示了
image.png

加密传输就完成了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345