存储基础网络 及 FTP服务 详解

存储基础网络 及 FTP服务 详解

  • 存储基础网络介绍
    • 1、总概
    • 2、直接存储(Direct Attached Storage)
    • 3、网络连接存储(Network Attached Storage)
    • 4、存储区域网络(Storage Area Networks,SAN)
  • 什么是文件共享服务?
    • 1、实现共享服务常用的有三种
    • 2、实现存储设备域服务器连接的方式有三种
  • FTP
    • 1、FTP 介绍
    • 2、FTP 两类连接介绍
    • 3、FTP 两种模式介绍
      • 主动模式:PORT
      • 被动模式:PASV
      • 两种模式的比较
    • 4、PAM(大多数应用程序都能来调用PAM实现认证)
  • 协议(C/S)
    • 1、Server
      • vsftpd
    • 2、Client
  • vsftpd
    • 1、URL
    • 2、默认情况
    • 3、权限情况说明
    • 4、查看 vsftpd 是否安装
    • 5、安装、启动和查看 vsftpd
    • 6、关闭firewall 和 SELinux
    • 7、FTP 访问
  • vsftpd 程序环境和用户类别
    • 1、程序环境
    • 2、用户类别
    • 3、FTP 服务状态码
    • 4、用户认证分类
  • vsftpd 配置文件
    • 1、文件格式
    • 2、帮助手册
    • 3、匿名用户权限
    • 4、系统用户
      • 为什么一般需要禁止系统用户登陆 FTP?
    • 5、日志
    • 6、守护进程的类型
    • 7、控制可登录vsftpd服务的用户列表(白名单的方式会安全很多)
    • 8、上传下载速率(字节/秒)
    • 9、并发连接数限制
    • 10、端口和时间配置
    • 11、登陆提示信息
    • 12、目录访问提示信息
    • 13、vsftpd 服务指定用户身份运行
    • 14、使用pam(Pluggable Authentication Modules)完成用户认证
    • 15、连接时间:秒为单位
    • 16、优先以文本方式传输
  • vsftpd 服务配置
  • 实现基于 SSL 的 FTPS
    • 1、查看是否支持SSL
    • 2、创建自签名证书
    • 3、配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
    • 4、用filezilla等工具测试
  • vsftpd 虚拟用户
    • 1、虚拟用户
    • 2、虚拟用户帐号的存储方式
  • FTP 命令
    • 1、FTP 内部命令
    • 2、关闭FTP连接
    • 3、下载文件
    • 4、上传文件

存储基础网络介绍

1、总概

DAS:Direct Attached Storage
	# 接口类型:“block”,只有块接口能分区和格式化,挂载使用
	# 设备:SATA,SAS;IDE,SCSI;USB
NAS:Network Attached Storage
	# 接口类型:"file"
	# 协议:CIFS(samba), NFS(Network File System)
	# RPC: Remote Procedure Call(重要概念)
SAN:Storage Area Network
	# 接口类型:"block"
	# 协议:iSCSI(IP-SAN), FCSAN, FCoE, ...
应用层:
	# ftp, ...

存储基础网络 及 FTP服务 详解_第1张图片

2、直接存储(Direct Attached Storage)

直接存储时,存储设备与主机的紧密相连。

  • 管理成本较低,实施简单
  • 储时直接依附在服务器上,因此存储共享受到限制
  • CPU必须同时完成磁盘存取和应用运行的双重任务,所以不利于CPU的指令周期的优化,增加系统负担

存储基础网络 及 FTP服务 详解_第2张图片

3、网络连接存储(Network Attached Storage)

通过局域网在多个文件服务器之间实现了互联,基于文件的协议( FTP、NFS、SMB/CIFS等 ),实现文件共享。

  • 集中管理数据,从而释放带宽、提高性能
  • 可提供跨平台文件共享功能
  • 可靠性较差,适用于局域网或较小的网络

存储基础网络 及 FTP服务 详解_第3张图片

4、存储区域网络(Storage Area Networks,SAN)

利用高速的光纤网络链接服务器与存储设备,基于SCSI,IP,ATM等多种高级协议,实现存储共享。

  • 服务器跟储存装置两者各司其职
  • 利用光纤信道来传输数据﹐以达到一个服务器与储存装置之间多对多的高效能、高稳定度的存储环境
  • 实施复杂,管理成本高

什么是文件共享服务?

简单来说就是文件或存储块设备可以共享给大家使用。

1、实现共享服务常用的有三种

  • ftp:属于应用层服务,可以跨平台使用(linux<->unix<->windows)
  • Nfs:属于内核模式,不可以跨平台(linux<->linux)
  • Samba:可以跨平台使用(linux<->unix<->windows)

2、实现存储设备域服务器连接的方式有三种

  • DAS:连接的磁盘
  • NAS:通过nfs/cifs协议实现网络文件共享(文件存储方式)电子邮件、网页服务器多媒体流服务、档案分享等就适用于NAS存储架构
  • SAS:通过网线或光纤实现ISCSI和FCSAN将物理存储设备连接起来使用(块存储方式较底层,需要格式化并挂载当本地磁盘使用)数据库有关的应用适用于SAN存储架构

FTP

1、FTP 介绍

ftp:file transfer protocol,文件传输协议。

2、FTP 两类连接介绍

  • 命令连接:传输命令(ftp 服务器端用的是20号端口,客户端使用随机端口N)
  • 数据连接:传输数据(ftp 在主动模式下服务器使用的是21号端口,客户端使用是随机端口N+1)(被动模式下是服务器端端口是随机的)

3、FTP 两种模式介绍

主动模式:PORT

Server: 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口
命令连接        # 客户端:随机port ---> 服务器:tcp21
数据连接        # 客户端:随机port <--- 服务器:tcp20
  • 主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

  • PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

被动模式:PASV

Server:打开一个随机端口,并等待客户端连接
	# Server 通过 21 号端口告诉客户端,服务器端打开另外一个端口,你可以来进行连接,进行数据传输
命令连接        # 客户端:随机port ---> 服务器:tcp21
数据连接        # 客户端:随机port ---> 服务器:随机port
被动访问示例:
	# 服务器会传递两个数字给客户端,可通过计算得出其服务器端口:
		227 Entering Passive Mode (172,16,0,1,224,59)
	# 服务器数据端口为:
		224*256+59
示例:
03:16:54.409764 IP 172.16.141.252.21 > 172.16.141.99.63582: Flags [P.], seq 354:407, ack 97, win 227, options [nop,nop,TS val 610401588 ecr 2070474], length 53: FTP: 227 Entering Passive Mode (172,16,141,252,169,111).
	0x0000:  28d2 4470 abbe e43a 6e0a 9b88 0800 4500  (.Dp...:n.....E.
	0x0010:  0069 ec34 4000 4006 dad9 ac10 8dfc ac10  .i.4@.@.........
	0x0020:  8d63 0015 f85e 8edd 20b0 83b5 cea2 8018  .c...^..........
	0x0030:  00e3 5c9b 0000 0101 080a 2461 fd34 001f  ..\.......$a.4..
	0x0040:  97ca 3232 3720 456e 7465 7269 6e67 2050  ..227.Entering.P
	0x0050:  6173 7369 7665 204d 6f64 6520 2831 3732  assive.Mode.(172
	0x0060:  2c31 362c 3134 312c 3235 322c 3136 392c  ,16,141,252,169,
	0x0070:  3131 3129 2e0d 0a                        111)...
[root@neo vsftpd]# ss -t
State       Recv-Q Send-Q                   Local Address:Port                                    Peer Address:Port                
ESTAB       0      248                     172.16.141.252:ssh                                    172.16.141.99:55025                
ESTAB       0      0                ::ffff:172.16.141.252:ftp                            ::ffff:172.16.141.189:50701                
ESTAB       0      0                ::ffff:172.16.141.252:ftp                             ::ffff:172.16.141.99:64168  
  • 为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

  • 当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

  • PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

两种模式的比较

  • 主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这 个端口很有可能被服务器端的防火墙阻塞掉。
  • 幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

4、PAM(大多数应用程序都能来调用PAM实现认证)

PAM:Pluggable Authenticate Module插入式认证模块,大多数应用程序都能来调用PAM实现认证。

此模块是认证框架,是库,高度模块化。

PAM的一些信息查看:

[root@neo ~]# rpm -ql pam | less
[root@neo ~]# ls /etc/pam.d/
chfn         fingerprint-auth     passwd            postlogin     runuser-l          smtp.postfix  sudo-i          systemd-user
chsh         fingerprint-auth-ac  password-auth     postlogin-ac  smartcard-auth     sshd          su-l            vlock
config-util  login                password-auth-ac  remote        smartcard-auth-ac  su            system-auth
crond        other                polkit-1          runuser       smtp               sudo          system-auth-ac
[root@neo ~]# cat /etc/pam.d/login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so
[root@neo ~]# which login
/usr/bin/login
[root@neo ~]# rpm -qf /usr/bin/login
util-linux-2.23.2-59.el7.x86_64
[root@neo ~]# rpm -ql pam | less

协议(C/S)

1、Server

  • Windows: Serv-U, IIS, Filezilla
  • 开源:wuftpd, proftpd, pureftpd, vsftpd(Very Secure FTP daemon), ...

vsftpd

# Very Secure FTP Daemon,CentOS默认FTP服务器
# 高速,稳定,下载速度是WU-FTP的两倍
# ftp.redhat.com,数据:单机最多可支持15000个并发

2、Client

  • Windows:ftp, Filezilla, CuteFTP, FlashFXP, ...
  • 开源:lftp, ftp, Filezilla, gftp, ...
# ftp,lftp,lftpget,wget,curl
	# ftp -A ftpserver port -A主动模式 –p 被动模式
	# lftp –u username ftpserver
	# lftp username@ftpserver
	# lftpget ftp://ftpserver/pub/file
# gftp:GUI centos5 最新版2.0.19 (11/30/2008)
# filezilla,CuteFtp,FlashFXP,LeapFtp
# IE ftp://username:password@ftpserver

vsftpd

vsftpd is a Very Secure FTP daemon. It was written completely from scratch.

1、URL

SCHEME://username:password@HOST:PORT/PATH/TO/FILE

路径映射:用户家目录,每个用户的URL的 / 映射到当前用户的家目录

2、默认情况

  • vsftpd以ftp用户的身份运行进程,默认用户即为ftp用户,匿名用户的默认路径即ftp用户的家目录/var/ftp
    ftp, anonymous

  • 安装完 vsftpd 后# yum -y install vsftpd,可直接进行 ftp 访问。

3、权限情况说明

一个用户通过文件共享服务访问文件系统上的文件的生效权限为此二者的交集。首先确认文件系统上对文件或目录的权限,再确认共享的权限。

4、查看 vsftpd 是否安装

以下三种方法都可以对安装情况进行查看:

[root@neo ~]# rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64
[root@neo ~]# vsftpd -v
vsftpd: version 3.0.2
[root@neo ~]# yum info vsftpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * extras: mirror.bit.edu.cn
 * updates: mirror.lzu.edu.cn
Installed Packages
Name        : vsftpd
Arch        : x86_64
Version     : 3.0.2
Release     : 25.el7
Size        : 353 k
Repo        : installed
From repo   : base
Summary     : Very Secure Ftp Daemon
URL         : https://security.appspot.com/vsftpd.html
License     : GPLv2 with exceptions
Description : vsftpd is a Very Secure FTP daemon. It was written completely from
            : scratch.

5、安装、启动和查看 vsftpd

安装:

[root@neo ~]# yum -y install vsftpd

启动:

[root@neo ~]# systemctl start vsftpd.service
[root@neo ~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-08-13 01:31:23 EDT; 4h 51min ago
  Process: 10711 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 10712 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─10712 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Aug 13 01:31:23 neo systemd[1]: Starting Vsftpd ftp daemon...
Aug 13 01:31:23 neo systemd[1]: Started Vsftpd ftp daemon.

查看: 有21监听端口代表 vsftpd 启动成功

[root@neo ~]# ss -tnl
State       Recv-Q Send-Q        Local Address:Port           Peer Address:Port
LISTEN      0      50                      *:3306                        *:* 
LISTEN      0      128                      *:22                         *:*      
LISTEN      0      100              127.0.0.1:25                         *:* 
LISTEN      0      128                     :::80                        :::*  
LISTEN      0      32                      :::21                        :::*  
LISTEN      0      128                     :::22                        :::*        
LISTEN      0      100                    ::1:25                        :::*      

6、关闭firewall 和 SELinux

1、直接通过命令进行关闭:
setenforce 0  # 设置SELinux 成为permissive模式 (关闭SELinux)
setenforce 1  # 设置SELinux 成为enforcing模式  (开启SELinux)
 
2、再或者修改配置文件,重启后依旧生效:
# vim /etc/selinux/config              # 修改配置文件
# SELINUX=enforcing                    # 进行注释
# SELINUXTYPE=targeted                 # 进行注释
SELINUX=disabled                       # 增加此条命令

3、通过命令设置 SELinux :
getsebool -a | grep ftp
setsebool -P ftpd_full_access on
1、关闭防火墙:
systemctl stop firewalld.service       #停止firewall
systemctl disable firewalld.service    #禁止firewall开机启动

2、如果不愿意关闭防火墙,需要防火墙添加FTP服务:
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

7、FTP 访问

在不进行 vsftpd 配置文件修改的情况,可使用匿名用户登陆,如下:

存储基础网络 及 FTP服务 详解_第4张图片

vsftpd 程序环境和用户类别

1、程序环境

主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
数据根目录:/var/ftp  
服务脚本文件: /usr/lib/systemd/system/vsftpd.service
			 /etc/rc.d/init.d/vsftpd

2、用户类别

  • 匿名用户:anonymous --> ftp, /var/ftp/var/ftp 属主和属组、读写权限均不能修改,否则无法启动)
  • 系统用户:至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd
  • 虚拟用户:非系统用户,用户账号非为可登录操作系统的用户账号(非/etc/passwd

用户通过vsftpd服务访问到的默认路径,是用户自己的家目录;默认可以自己有权限访问的所有路径间切换;禁锢用户于其家目录中。

3、FTP 服务状态码

1XX:信息       125:数据连接打开
2XX:成功类状态  200:命令OK 230:登录成功
3XX:补充类说明  331:用户名OK
4XX:客户端错误  425:不能打开数据连接
5XX:服务器错误  530:不能登录

4、用户认证分类

  • 匿名用户:ftp,anonymous,对应Linux用户ftp

  • 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow

  • 虚拟用户:特定服务的专用用户,独立的用户/密码文件

    nsswitch:network service switch           # 名称解析框架
    pam:pluggable authentication module       # 用户认证
    	/lib64/security 
    	/etc/pam.d/ 
    	/etc/pam.conf
    

vsftpd 配置文件

主配置文件:/etc/vsftpd/vsftpd.conf

1、文件格式

directive value
	# 注意:directive之前不能有多余字符
	
格式:option=value
    # 注意:= 前后不要有空格

2、帮助手册

# man 5 vsftpd.conf

3、匿名用户权限

anonymous_enable=YES           # 只有下载权限
anon_upload_enable=YES         # 上传权限,仅能上传文件
anon_mkdir_write_enable=YES    # 创建目录
anon_other_write_enable=YES    # 删除目录/文件
anon_umask=077 

详细:

anonymous_enable=YES           # 支持匿名用户
no_anon_password=YES           # (默认N0),匿名用户略过口令检查 
anon_world_readable_only       # (默认YES)只能下载全部读的文件
anon_upload_enable=YES         # 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES    # 匿名建目录
anon_umask=077                 # 指定匿名上传文件的umask,默认077
anon_other_write_enable=YES    # 可删除和修改上传的文件

指定上传文件的默认的所有者和权限:

chown_uploads=YES(默认NO)
chown_username=wang
chown_upload_mode=0644

4、系统用户

local_enable=YES                # 是否允许linux用户登录
write_enable=YES                # 允许linux用户上传文件
local_umask=022                 # 指定系统用户上传文件的默认权限
guest_enable=YES                # 所有系统用户都映射成guest用户
guest_username=ftp              # 配合上面选项才生效,指定guest用户
local_root=/ftproot             # guest 用户登录所在目录

辅助配置文件/etc/vsftpd/ftpusers

  • 列在此文件中的用户 均禁止使用ftp服务

  • 对配置文件进行修改后,都需要进行服务重启才能生效

    [root@neo ~]# cat /etc/vsftpd/ftpusers 
    # Users that are not allowed to login via ftp
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    
  • 禁锢所有本地用户于其家目录;需要事先去除用户对家目录的写权限:

    chroot_local_user=YES(默认NO,不禁锢)
    
  • 禁锢列表中文件存在的用户于其家目录中;需要事先去除用户对家目录的写权限;(chmod a-w /home/user

  • 禁锢在列表中的用户,ftp 登陆后,pwd 只会显示 / ,且切换不到其它目录下,与未禁锢在列表中的用户显示不一样

  • 禁锢或不禁锢特定的系统用户在家目录中

    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    
    当chroot_local_user=YES时,则chroot_list中用户不禁锢
    当chroot_local_user=NO时,则chroot_list中用户禁锢
    

为什么一般需要禁止系统用户登陆 FTP?

因FTP是明文传输的,通过以下命令可抓取FTP的登陆密码。所以系统用户是禁止用于登陆FTP的。

[root@neo ~]# tcpdump -i enp1s0 -nn -XX tcp port 21

5、日志

  • wu-ftp日志:默认启用

    xferlog_enable=YES (默认)               # 启用记录上传下载日志
    xferlog_std_format=YES (默认)           # 使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog (默认)    # 可自动生成
    
  • vsftpd日志:默认不启用

    dual_log_enable=YES                      # 使用vsftpd日志格式,默认不启用
    vsftpd_log_file=/var/log/vsftpd.log(默认)# 可自动生成
    

6、守护进程的类型

  • standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求

  • transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问请求时不启动;当托管方收到访问请求时,才启动服务进程

    CentOS 6:xinetd独立守护进程, /etc/xinetd.d/
    CentOS 7:由systemd代为监听
    

7、控制可登录vsftpd服务的用户列表(白名单的方式会安全很多)

userlist_enable=YES  # 启用/etc/vsftpd/user_list文件来控制可登录用户
userlist_deny=YES    # YES:意味着此为黑名单
					 # NO:白名单

8、上传下载速率(字节/秒)

anon_max_rate=0      # 匿名用户的上传下载速率,0代表无限制
local_max_rate=0     # 本地用户的上传下载速率,0代表无限制

9、并发连接数限制

max_clients=2000     # 最大并发连接数
max_per_ip=50        # 每个IP同时发起的最大连接数

10、端口和时间配置

命令端口
	# listen_port=21

主动模式端口
	# connect_from_port_20=YES   # 主动模式端口为20
	# ftp_data_port=20 (默认)	 # 指定主动模式的端口

被动模式端口范围
	linux                         # 客户端默认使用被动模式
	windows                       # 客户端默认使用主动模式
	pasv_min_port=6000            # 0为随机分配
	pasv_max_port=6010            # 0为随机分配

使用当地时间
	# use_localtime=YES           # 使用当地时间(默认为NO,使用GMT)

11、登陆提示信息

ftpd_banner=“welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt     # 优先上面项生效

12、目录访问提示信息

dirmessage_enable=YES (默认)
message_file=.message(默认)                # 信息存放在指定目录下.message

13、vsftpd 服务指定用户身份运行

nopriv_user=nobody (默认值)

14、使用pam(Pluggable Authentication Modules)完成用户认证

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd
	       /etc/vsftpd/ftpusers       # 默认文件中用户拒绝登录

15、连接时间:秒为单位

connect_timeout=60            # 主动模式数据连接超时时长
accept_timeout=60             # 被动模式数据连接超时时长
data_connection_timeout=300   # 数据连接无数据输超时时长
idle_session_timeout=60       # 无命令操作超时时长

16、优先以文本方式传输

ascii_upload_enable=YES
ascii_download_enable=YES

vsftpd 服务配置

配置FTP服务以非独立服务方运行:

vim /etc/vsftpd/vsftpd.conf/
	listen=NO,默认为独立方式

vim /etc/xinetd.d/vsftpd
service ftp
{
	flags 		       = REUSE
	socket_type        = stream
	wait 		       = no
	user	           = root
	server    		   = /usr/sbin/vsftpd
	log_on_failure     += USERID
	disable            = no
}

实现基于 SSL 的 FTPS

1、查看是否支持SSL

# ldd `which vsftpd`      # 看是否能看到libssl.so

2、创建自签名证书

cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text

3、配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf

ssl_enable=YES                # 启用SSL
allow_anon_ssl=NO             # 匿名不支持SSL
force_local_logins_ssl=YES    # 本地用户登录加密
force_local_data_ssl=YES      # 本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

4、用filezilla等工具测试

vsftpd 虚拟用户

1、虚拟用户

  • 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
  • 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

2、虚拟用户帐号的存储方式

  • 文件:编辑文本文件,此文件需要被编码为hash格式(奇数行为用户名,偶数行为密码)

    db_load -T -t hash -f vusers.txt vusers.db
    
  • 关系型数据库中的表中:实时查询数据库完成用户认证

  • mysql库:pam要依赖于pam-mysql

    /lib64/security/pam_mysql.so
    /usr/share/doc/pam_mysql-0.7/README
    

FTP 命令

1、FTP 内部命令

ftp> ascii     # 设定以ASCII方式传送文件(缺省值)
ftp> bell      # 每完成一次文件传送,报警提示
ftp> binary    # 设定以二进制方式传送文件
ftp> bye       # 终止主机FTP进程,并退出FTP管理方式
ftp> case      # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
ftp> cd        # 同UNIX的CD命令
ftp> cdup      # 返回上一级目录
ftp> chmod     # 改变远端主机的文件权限
ftp> close     # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除
ftp> delete    # 删除远端主机中的文件
ftp> dir [remote-directory] [local-file]  # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ftp> get [remote-file] [local-file]       # 从远端主机中传送至本地主机中
ftp> help [command]                       # 输出命令的解释
ftp> lcd       # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
ftp> ls [remote-directory] [local-file]   # 同DIR
ftp> macdef                               # 定义宏命令
ftp> mdelete [remote-files]               # 删除一批文件
ftp> mget [remote-files]                  # 从远端主机接收一批文件至本地主机
ftp> mkdir directory-name                 # 在远端主机中建立目录
ftp> mput local-files                     # 将本地主机中一批文件传送至远端主机
ftp> open host [port]                     # 重新建立一个新的连接
ftp> prompt                               # 交互提示模式
ftp> put local-file [remote-file]         # 将本地一个文件传送至远端主机中
ftp> pwd       # 列出当前远端主机目录
ftp> quit      # 同BYE
ftp> recv remote-file [local-file]         # 同GET
ftp> rename [from] [to]                    # 改变远端主机中的文件名
ftp> rmdir directory-name                  # 删除远端主机中的目录
ftp> send local-file [remote-file]         # 同PUT
ftp> status    # 显示当前FTP的状态.
ftp> system    # 显示远端主机系统类型.
ftp> user user-name [password] [account]   # 重新以别的用户名登录远端主机.
ftp> ? [command]                           # 同HELP. [command]指定需要帮助的命令名称。
								   	       # 如果没有指定 command,ftp 将显示全部命令的列表。
ftp> !         # 从 ftp 子系统退出到shell

2、关闭FTP连接

bye
exit
quit

3、下载文件

ftp> get readme.txt # 下载 readme.txt 文件
ftp> mget *.txt     # 下载所又以 .txt 结尾的文件

4、上传文件

ftp> put /path/readme.txt # 上传 readme.txt 文件
ftp> mput *.txt           # 可以上传多个文件

你可能感兴趣的:(Linux学习笔记,Linux,存储,FTP)