成功不易,加倍努力!

  • 网络文件共享服务
    • 本章总目录
    • 1 存储类型
      • 1.1 DAS存储
      • 1.2 NAS存储
      • 1.3 SAN存储
      • 1.4 三种存储比较
    • 2 文件传输协议 FTP
      • 2.1 FTP工作原理介绍
      • 2.2 常见 FTP 相关软件
      • 2.3 vsftpd 软件介绍
      • 2.4 vsftpd服务常见配置
        • 2.4.1 命令端口
        • 2.4.2 主动模式端口
        • 2.4.3 被动模式端口范围
        • 2.4.4 使用当地时间
        • 2.4.5 匿名用户登录
        • 2.4.6 匿名用户上传
        • 2.4.7 指定匿名用户的上传文件的默认的所有者和权限
        • 2.4.8 Linux系统用户
        • 2.4.9 将系统用户映射为指定的guest用户
        • 2.4.10 禁锢系统用户
        • 2.4.11 日志
        • 2.4.12 提示信息
        • 2.4.13 PAM模块实现用户访问控制
        • 2.4.14 是否启用控制用户登录的列表文件
        • 2.4.15 vsftpd服务指定用户身份运行
        • 2.4.16 连接数限制
        • 2.4.17 传输速率,单位:字节/秒
        • 2.4.18 连接时间:秒为单位
        • 2.4.19 优先以文本方式传输
        • 2.4.20 实现基于 SSL 的 FTPS
      • 2.5 vsftpd 虚拟用户
        • 2.5.1 实现基于文件验证的vsftpd虚拟用户
        • 2.5.2 实现基于MYSQL验证的vsftpd虚拟用户

网络文件共享服务

本章总目录

  1. 存储类型
  2. FTP服务
  3. NFS服务
  4. SAMBA服务
  5. 网络数据同步

1 存储类型

存储类型分为三种

  • 直连式存储:Direct-Attached Storage,简称DAS
  • 网络附加存储:Network-Attached Storage,简称NAS
  • 存储区域网络:Storage Area Network,简称SAN

1.1 DAS存储

DAS存储是最常见的一种存储方式,尤其是在中小企业应用中。PC中的硬盘或只有一个外部SCSI接口的JBOD都属于DAS架构。DAS是指存储设备直接连接到服务器总线上,存储设备只与一台独立的主机连接,其他主机不能使用这个存储设备。DAS存储设备与服务器主机之间的连接通道通常采用SCSI连接,DAS存储设备主要是磁盘阵列(RAID: Redundant Arrays of Independent Disks)、磁盘簇(JBOD:Just a Bunch Of Disks)等。

1.2 NAS存储

NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上。与DAS以及SAN不同,NAS是文件级的存储方法。采用NAS较多的功能是用来进行文件共享。

NAS存储也通常被称为附加存储,顾名思义,就是存储设备通过标准的网络拓扑结构(例如以太网)添加到一群计算机上。NAS是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。如今更多的亲们采用NAS较多的功能是用来文档共享、图片共享、电影共享等等,而且随着云计算的发展,一些NAS厂商也推出了云存储功能,大大方便了企业和亲们等个人用户的使用。

NAS产品是真正即插即用的产品。NAS设备一般支持多计算机平台,用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合Unix/Windows NT局域网内,同时NAS的应用非常灵活。

但NAS有一个关键性问题,即备份过程中的带宽消耗。与将备份数据流从LAN中转移出去的存储区域网(SAN)不同,NAS仍使用网络进行备份和恢复。NAS 的一个缺点是它将存储事务由并行SCSI连接转移到了网络上。这就是说LAN除了必须处理正常的最终用户传输流外,还必须处理包括备份操作的存储磁盘请求。

1.3 SAN存储

存储区域网络,这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。SAN经过十多年历史的发展,已经相当成熟,成为业界的事实标准(但各个厂商的光纤交换技术不完全相同,其服务器和SAN存储有兼容性的要求)。

SAN提供了一种与现有LAN连接的简易方法,并且通过同一物理通道支持广泛使用的SCSI和IP协议。SAN不受现今主流的、基于SCSI存储结构的布局限制。特别重要的是,随着存储容量的爆炸性增长,SAN允许企业独立地增加它们的存储容量。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据置放在那里,服务器都可直接存取所需的数据。因为采用了光纤接口,SAN还具有更高的带宽。

如今的SAN解决方案通常会采取以下两种形式:光纤信道以及iSCSI或者基于IP的SAN,也就是FC SAN和IP SAN。光纤信道是SAN解决方案中大家最熟悉的类型,但是,最近一段时间以来,基于iSCSI的SAN解决方案开始大量出现在市场上,与光纤通道技术相比较而言,这种技术具有良好的性能,而且价格低廉。

SAN的优势:

随着存储容量的增长,SAN允许企业独立地增加他们的存储容量。

SAN允许任何服务器连接到任何存储阵列(好处是:不管数据放在哪里,服务器都可以直接存取所需的数据)

由于使用光纤接口,SAN具有更高的带宽。除了FC连接,SAN连接还有ISCSI(SCSI over IP)以及SAS(Serial Attached SCSI)接口。

光纤接口可以提供10公里那么长那么远的连接长度,非常容易实现物理分离的存储

1.4 三种存储比较

SAN与NAS的主要区别体现在文件系统所在的位置

DAS NAS SAN
传输类型 SCSI、FC IP IP、FC、SAC
数据类型 数据块 文件 数据块
典型应用 任何 文件服务器 数据库应用
优点 磁盘与服务器分离
便于统一管理
不占用应用服务器资源
广泛支持操作系统
扩展较容易
即插即用,安装简单方便
高扩展性
高可用性
数据集中,易管理
缺点 连接距离短
数据分散,共享困难
存储空间利用率不高
扩展性有限
不适合存储量大的块级应用
数据备份及恢复占用网络带宽
相比NAS成本较高
安装和升级比NAS复杂

三种存储架构的应用场景

  • DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
  • NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
  • SAN则适用于大型应用或数据库系统,缺点是成本高、较为复杂

2 文件传输协议 FTP

2.1 FTP工作原理介绍

文件传输协议:File Transfer Protocol 早期的三个应用级协议之一,基于C/S结构
数据传输格式:二进制(默认)和文本
双通道协议:命令和数据连接

两种模式:从服务器角度

  • 主动 (PORT style):服务器主动连接
    命令(控制):客户端:随机port —> 服务器:21/tcp
    数据:客户端:随机port <—服务器:20/tcp
  • 被动 (PASV style):客户端主动连接
    命令(控制):客户端:随机port —> 服务器:21/tcp
    数据:客户端:随机port —> 服务器:随机port /tcp

范例:服务器被动模式数据端口

227 Entering Passive Mode (172,16,0,1,224,59)
服务器数据端口为:224*256+59

FTP服务状态码

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

用户认证

匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件

2.2 常见 FTP 相关软件

FTP服务器端软件

Wu-ftpd,Proftpd,Pureftpd,Filezilla Server,Serv-U,Wing FTP Server,IIS
vsftpd:Very Secure FTP Daemon,CentOS 默认FTP服务器
高速,稳定,下载速度是WU-FTP的两倍
ftp.redhat.com数据:单机最多可支持15000个并发

vsftpd官网: https://security.appspot.com/vsftpd.html

Filezilla官网: https://filezilla-project.org/index.php

客户端软件:

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),官网:https://www.gftp.org/
filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

2.3 vsftpd 软件介绍

由 vsftpd 包提供,不再由xinetd管理
用户认证配置文件:/etc/pam.d/vsftpd

启动服务相关文件

/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd

配置文件

/etc/vsftpd/vsftpd.conf

帮助:man 5 vsftpd.conf

配置文件格式:

option=value

注意:= 前后不要有空格

用户和其共享目录

  • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
  • 系统用户共享文件位置:用户家目录
  • 虚拟用户共享文件位置:为其映射的系统用户的家目录

2.4 vsftpd服务常见配置

2.4.1 命令端口
listen_port=2121 默认值为21

范例:

[root@centos6 ~]#lftp 10.0.0.8 -p 2121
[root@centos6 ~]#ftp 10.0.0.8 2121
2.4.2 主动模式端口

主动或者被动都是以服务器的角度

connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 (默认) 指定主动模式的端口
2.4.3 被动模式端口范围
linux ftp   客户端默认使用被动模式
windows ftp 客户端默认使用主动模式
pasv_min_port=6000 0为随机分配,端口范围会影响客户端的并发数
pasv_max_port=6010
2.4.4 使用当地时间
use_localtime=YES 使用当地时间(默认为NO,使用GMT)
2.4.5 匿名用户登录
anonymous_enable=YES 支持匿名用户,CentOS8 默认不允许匿名
no_anon_password=YES 匿名用户略过口令检查 , 默认NO
2.4.6 匿名用户上传
anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES 匿名建目录
setfacl -m u:ftp:rwx /var/ftp/pub

注意:还需要开启文件系统访问的权限,不能给FTP根目录写权限,只能级子目录写权限,否则报如下错误

[root@centos6 ~]#ftp 10.0.0.8
Connected to 10.0.0.8 (10.0.0.8).
220 (vsFTPd 3.0.3)
Name (10.0.0.8:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
anon_world_readable_only=NO 只能下载全部读的文件, 默认YES
anon_umask=0333 指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
anon_other_write_enable=YES 可删除和修改上传的文件, ,默认NO
2.4.7 指定匿名用户的上传文件的默认的所有者和权限
chown_uploads=YES   #默认NO
chown_username=wang
chown_upload_mode=0644
2.4.8 Linux系统用户
local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限对应umask
2.4.9 将系统用户映射为指定的guest用户
guest_enable=YES    所有系统用户都映射成guest用户
guest_username=ftp  配合上面选项才生效,指定guest用户
local_root=/ftproot 指定guest用户登录所在目录,但不影响匿名用户的登录目录

2.4.10 禁锢系统用户

禁锢所有系统在家目录中

chroot_local_user=YES #禁锢系统用户,默认NO,即不禁锢

禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反

chroot_list_enable=YES #默认是NO
chroot_list_file=/etc/vsftpd/chroot_list #默认值当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单
2.4.11 日志
#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 可自动生成, 此为默认值
2.4.12 提示信息

登录提示信息

方法一:
ftpd_banner="welcome to mage ftp server"
方法二:
banner_file=/etc/vsftpd/ftpbanner.txt     #优先级更高

目录访问提示信息

dirmessage_enable=YES 此为默认值
message_file=.message 信息存放在指定目录下.message ,此为默认值,只支持单行说明

范例:

[root@centos8 ~]#cd /var/ftp
[root@centos8 ftp]#mkdir upload
[root@centos8 ftp]#cd pub/
[root@centos8 pub]#ls
[root@centos8 pub]#mkdir tools
[root@centos8 pub]#echo tools software > tools/.message
[root@centos8 pub]#cd ..
[root@centos8 ftp]#ls
pub  upload
[root@centos8 ftp]#echo upload file > upload/.message[root@Centos7 ~]#ftp 10.0.0.8
Connected to 10.0.0.8 (10.0.0.8).
220 (vsFTPd 3.0.3)
Name (10.0.0.8:root): ftp    #匿名登陆,事先改好了配置文件
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is the current directory
ftp> ls
227 Entering Passive Mode (10,0,0,8,222,100).
150 Here comes the directory listing.
drwxr-xr-x    3 0        0              19 Jul 04 07:06 pub
drwxr-xr-x    2 0        0              22 Jul 04 07:07 upload
226 Directory send OK.
ftp> cd upload
250-upload file       #目录提示信息
250 Directory successfully changed.
ftp> cd ../pub/tools
250-tools software    #目录提示信息
250 Directory successfully changed.

范例:目录提示信息加颜色

[root@centos8 ~]#vim /var/ftp/pub/tools/.message
^[[32mtools software^[[0m

或者

2.4.13 PAM模块实现用户访问控制
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默认文件中用户拒绝登录,默认是黑名单,但也可以是白名单

范例:

[root@centos8 ~]#ldd /usr/sbin/vsftpd |grep pam
libpam.so.0 => /lib64/libpam.so.0 (0x00007fb286c34000)#修改PAM配置,使ftpusers成为白名单
[root@centos8 ~]#vim /etc/pam.d/vsftpd
#%PAM-1.0
session     optional    pam_keyinit.so force revoke
#将sense=deny 修改为 sense=allow
auth        required    pam_listfile.so     item=user  sense=allow   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_listfile模块相当于黑名单(或者白名单,取决于sense=deny/allow)
[root@centos8 ~]#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

2.4.14 是否启用控制用户登录的列表文件
userlist_enable=YES                     此为默认值
userlist_deny=YES(默认值)                   黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/user_list    此为默认值

范例:

[root@centos8 ~]#cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
2.4.15 vsftpd服务指定用户身份运行
nopriv_user=nobody 此为默认值

范例:

[root@centos8 ~]#pstree -p |grep vsftpd`-vsftpd(2122)-+-vsftpd(2546)---vsftpd(2548)`-vsftpd(2552)---vsftpd(2554)[root@centos8 ~]#ps auxf |grep vsftpd
root       2574  0.0  0.0  12108   964 pts/2    S+   16:01   0:00              \_ grep --color=auto vsftpd
root       2122  0.0  0.0  26984   408 ?        Ss   15:08   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody     2546  0.0  0.2  61656  4072 ?        Ss   15:57   0:00  \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
mage       2548  0.0  0.2  74236  3796 ?        S    15:57   0:00  |   \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody     2552  0.0  0.2  61656  4136 ?        Ss   15:58   0:00  \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
cui        2554  0.0  0.2  74236  3792 ?        S    15:58   0:00      \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

2.4.16 连接数限制
max_clients=0 #最大并发连接数

如果超出连接,会报如下提示

max_per_ip=0 #每个IP同时发起的最大连接数

如果超出连接,会报如下提示

2.4.17 传输速率,单位:字节/秒
anon_max_rate=0     匿名用户的最大传输速率,以字节为单位,比如:1024000表示1MB/s
local_max_rate=0    本地用户的最大传输速率
2.4.18 连接时间:秒为单位
connect_timeout=60          主动模式数据连接超时时长
accept_timeout=60          被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60    无命令操作超时时长
2.4.19 优先以文本方式传输
ascii_upload_enable=YES
ascii_download_enable=YES

说明:不建议使用文本方式,因为可能导致二进制文件内容被破坏

范例:

[root@Centos7 ~]#ftp 10.0.0.8
Connected to 10.0.0.8 (10.0.0.8).
220 (vsFTPd 3.0.3)
Name (10.0.0.8:root): ftp    #匿名登陆,事先改好了配置文件
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.   #默认是二进制方式传输
2.4.20 实现基于 SSL 的 FTPS


查看是否支持SSL

ldd `which vsftpd` #查看到libssl.so

范例:

[root@centos8 ~]#ldd `which vsftpd`|grep libssl
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f8878e2c000)

创建自签名证书

#CentOS 7 上可以实现直接生成一个包括私钥和证书的文件
[root@centos7 ~]#mkdir /etc/vsftpd/ssl
[root@centos7 ~]#cd /etc/pki/tls/certs/
[root@centos7 certs]#make /etc/vsftpd/ssl/vsftpd.pem
[root@centos7 certs]#openssl x509 -in /etc/vsftpd/ssl/vsftpd.pem -noout -text#在CentOS8上手动分别生成一个证书和私钥文件,再合并成一个文件
[root@centos8 ~]#mkdir /etc/vsftpd/ssl
[root@centos8 ~]#cd /etc/vsftpd/ssl
[root@centos8 ssl]#openssl req -x509 -nodes -keyout vsftpd.key -out vsftpd.crt -days 365 -newkey rsa:2048
[root@centos8 ssl]#cat vsftpd.crt vsftpd.key > vsftpd.pem

配置vsftpd服务支持SSL:

[root@centos8 ~]#vim /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 #一个包括证书和私钥两个内容的文件
#rsa_private_key_file /path/file #此项如果没有指定,私钥也在证书文件中
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#require_ssl_reuse=NO
#ssl_ciphers=HIGH[root@centos8 ~]#systemctl restart vsftpd[root@Centos7 ~]#ftp 10.0.0.8
Connected to 10.0.0.8 (10.0.0.8).
220 (vsFTPd 3.0.3)
Name (10.0.0.8:root): mage
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>#用filezilla等工具测试


2.5 vsftpd 虚拟用户

虚拟用户:给特定服务使用的用户帐号

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

虚拟用户帐号的存储方式:

  • 文件:创建文本文件,奇数行为用户名,偶数行为密码,再被编码为hash 格式Berkeley DB database文件

    db_load -T -t hash -f vusers.txt vusers.db
    
  • 关系型数据库中的表中:实时查询数据库完成用户认证
    vsftpd 支持mysql库:pam要依赖于pam-mysql

    /lib64/security/pam_mysql.so
    /usr/share/doc/pam_mysql-0.7/README
    
2.5.1 实现基于文件验证的vsftpd虚拟用户

2.5.1.1 创建用户数据库文件

[root@centos8 ~]#rpm -qf `which db_load`
libdb-utils-5.3.28-37.el8.x86_64
[root@centos8 ~]#vim /etc/vsftpd/vusers.txt
ftp_wang
wangpass
ftp_mage
magepass
[root@centos8 ~]#db_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vusers.db
[root@centos8 ~]#chmod 600 /etc/vsftpd/vusers.*

2.5.1.2 创建用户和访问FTP目录

[root@centos8 ~]#useradd -d /data/ftproot -s /sbin/nologin -r vuser
[root@centos8 ~]#mkdir -pv /data/ftproot/upload
[root@centos8 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
#chmod a=rx /data/ftproot/ 如果自动创建家目录,需修改权限

2.5.1.3 创建pam配置文件

[root@centos8 ~]#vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

2.5.1.4 指定pam配置文件

[root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser   #系统用户映射为指定用户
pam_service_name=vsftpd.db

2.5.1.5 虚拟用户建立独立的配置文件

#指定各个用户配置文件存放的路径
[root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/conf.d/
#创建各个用户配置文件存放的路径
[root@centos8 ~]#mkdir /etc/vsftpd/conf.d/
#创建各用户自已的配置文件,允许wang用户可读写,其它用户只读
[root@centos8 ~]#vim /etc/vsftpd/vusers.d/ftp_wang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#创建各用户自已的配置文件
[root@centos8 ~]#vim /etc/vsftpd/conf.d/ftp_mage
#登录目录改变至指定的目录
local_root=/data/ftproot2
2.5.2 实现基于MYSQL验证的vsftpd虚拟用户

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

项目网站:https://sourceforge.net/projects/pam-mysql/

因此项目年代久远不再更新,只支持CentOS 6,7,不支持CentOS 8

环境准备

本实验在两台主机上实现
一台做为FTP服务器,CentOS 7
一台做MySQL 数据库服务器

2.5.2.1 在数据库服务器上安装mysql数据库

#注意:MySQL8.0由于取消了PASSWORD()函数,不支持
[root@centos8 ~]#yum -y install mariadb-server
[root@centos8 ~]#systemctl enable --now mariadb.service
MariaDB [(none)]> select password("centos");
+-------------------------------------------+
| password("centos")                        |
+-------------------------------------------+
| *128977E278358FF80A246B5046F51043A2B1FCED |
+-------------------------------------------+
1 row in set (0.000 sec)

2.5.2.2 在数据库服务上配置数据库支持vsftpd服务

#建立存储虚拟用户数据库和表
[root@centos8 ~]#mysql
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp_wang',password('magedu'));
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp_mage',password('magedu'));
#创建连接的数据库用户
MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftpd@'10.0.0.%' IDENTIFIED BY 'magedu';
MariaDB [vsftpd]> FLUSH PRIVILEGES;

2.5.2.3 在FTP服务器上安装vsftpd 和 pam_mysql包

[root@centos7 ~]#yum install vsftpd

2.5.2.4 在FTP服务器上安装 pam_mysql

对于 centos 6:pam_mysql由EPEL的源中提供

[root@centos6 ~]#yum install pam_mysql

对于 centos7 和 8:无对应rpm包,需手动编译安装

pam-mysql源码进行编译

#安装相关包
[root@centos7 ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
#下载pam-mysql源码进行编译
[root@centos7 ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
[root@centos7 ~]#tar xvf pam_mysql-0.7RC1.tar.gz
[root@centos7 ~]#cd pam_mysql-0.7RC1/
[root@centos7 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security#如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误
#checking if the second argument of pam_conv.conv() takes const pointer... no
configure: error: Your system doesn't appear to be configured to use PAM.
Perhaps you need to specify the correct location where the PAM modules reside.[root@centos7 pam_mysql-0.7RC1]#make install
[root@centos7 pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so

2.5.2.5 在FTP服务器上建立pam认证所需文件

[root@centos7 ~]#vi /etc/pam.d/vsftpd.mysql
#添加如下两行
auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd
table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver
db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:以上参考 README文档

crypt 加密方式

  • 0表示不加密
  • 1表示crypt(3)加密
  • 2表示使用mysql password()函数加密
  • 3表示md5加密
  • 4表示sha1加密

配置字段说明

  • auth 表示认证
  • account 验证账号密码正常使用
  • required 表示认证要通过
  • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
  • user=vsftpd为登录mysql的用户
  • passwd=magedu 登录mysql的的密码
  • host=mysqlserver mysql服务器的主机名或ip地址
  • db=vsftpd 指定连接msyql的数据库名称
  • table=users 指定连接数据库中的表名
  • usercolumn=name 当做用户名的字段
  • passwdcolumn=password 当做用户名字段的密码
  • crypt=2 密码的加密方式为mysql password()函数加密

2.5.2.6 建立相应用户和修改vsftpd配置文件

#建立虚拟用户映射的系统用户及对应的目录
[root@centos7 ~]#useradd -s /sbin/nologin -d /data/ftproot -r vuser
#centos7 需除去ftp根目录的写权限[root@centos7 ~]#mkdir -pv /data/ftproot/upload
[root@centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
#添加下面两项
guest_enable=YES
guest_username=vuser#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql启动vsftpd服务
[root@centos7 ~]#systemctl enable --now vsftpd

2.5.2.7 在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

#配置vsftpd为虚拟用户使用配置文件目录
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/#创建所需要目录,并为虚拟用户提供配置文件
[root@centos7 ~]#mkdir /etc/vsftpd/conf.d/
#配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
#注意:需确保对应的映射用户对于文件系统有写权限
[root@centos7 ~]#vim /etc/vsftpd/conf.d/ftp_wang
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
#登录目录改变至指定的目录
local_root=/data/ftproot2

Linux网络文件共享服务(一)存储类型和文件传输协议FTP相关推荐

  1. Linux 网络文件共享服务详细介绍

    Linux 网络文件共享介绍 一.常见的存储类型 1.1 DAS 类型的存储 1.2 NAS 类型的存储 1.3 SAN 类型的存储 1.4 三种存储类型的比较 二.文件传输协议 FTP 2.1 FT ...

  2. 28 网络文件共享服务

    文章目录 网络文件共享服务 本章内容 存储类型 FTP服务 NFS服务 SAMBA服务 网络数据同步 1 存储类型 存储类型分为三种 1.1 DAS存储 1.2 NAS存储 但NAS有一个关键性问题, ...

  3. 网络协议从入门到底层原理(10)WebSocket、WebService、RESTful、HTTPDNS、FTP文件传输协议、邮件相关协议、IPv6

    其他协议 WebSocket WebSocket - 建立连接 WebService RESTful HTTPDNS FTP文件传输协议 邮件相关的协议(SMTP.POP.IMAP) POP vs I ...

  4. Linux实战教学笔记22:企业级NFS网络文件共享服务

    第二十二节 企业级NFS网络文件共享服务 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载 ...

  5. 23.网络文件共享服务

    文章目录 1 存储类型 1.1 DAS存储 1.2 NAS存储 1.3 SAN存储 1.4 三种存储比较 2 FTP 文件传输协议 2.1 FTP工作原理介绍 2.2 常见 FTP 相关软件 2.3 ...

  6. Samba网络文件共享服务介绍

    Samba网络文件共享服务 一.samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块, ...

  7. (转)企业级NFS网络文件共享服务

    企业级NFS网络文件共享服务 原文:http://www.cnblogs.com/chensiqiqi/archive/2017/03/10/6530859.html --本教学笔记是本人学习和工作生 ...

  8. NFS网络文件共享服务

    NFS网络文件共享服务 1.1 NFS介绍 1)什么是NFS? NFS是Network File System的缩写,中文意思是网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间 ...

  9. Linux运维系列总结-Linux系统启动过程、WEB工作原理、DHCP工作原理、DNS解析原理、NFS网络文件系统、FTP文件传输协议、PXE+KICKSTART自动安装系统

    Linux运维系列总结-Linux系统启动过程.WEB工作原理.DHCP工作原理.DNS解析原理.NFS网络文件系统.FTP文件传输协议.PXE+KICKSTART自动安装系统 1.Linux系统的启 ...

最新文章

  1. wxWidgets:添加状态栏
  2. (十七)java版spring cloud+spring boot 社交电子商务平台-spring+springmvc+kafka分布式消息中间件集成方案...
  3. IDEA的基本使用:让你的IDEA有飞一般的感觉 | CSDN 博文精选
  4. oracle pr,PRMSCAN ORACLE碎片扫描合并工具
  5. python并发编程2-进程
  6. python:第一个简单爬虫程序
  7. fx5u mc协议_三菱PLC编程入门:FX5U系列常见问题!
  8. oracle archivelog满了,Oracle archivelog占用100%如何处理?
  9. postman使用记录,带cookie的get请求和传json对象的post请求示范
  10. 麻省理工18年春软件构造课程阅读11“抽象函数与表示不变量”
  11. 红外线相关的论文(可见光和红外图像融合、红外图像增强、红外图像目标检测、红外图像分割...)
  12. Android源码下载repo以及repo init总结
  13. Execl单元格图片锁定----一定能
  14. 【PyG 教程】PyG 自定义构造 GNN
  15. 制作“玄”字logo
  16. 腾讯音乐路演PPT曝光:发行区间13至15美元 下周上市
  17. Zabbix自动发现和自动注册
  18. TCP/IP模型以及OSI七层参考模型各层的功能介绍和主要协议
  19. 西行漫记(19):毕业了
  20. 冰岛警方选中IDEMIA为其提供新的出入境系统

热门文章

  1. P1162 填涂颜色
  2. 极浅显编序号常识凸显有最大自然数
  3. 互联网晚报 | 北京上海人均存款超20万元;爱驰汽车建议员工自费垫付社保公积金;​微信掌纹支付发布...
  4. 换手率高量比小是怎么回事?
  5. 债市、股市、汇市、利息四者之间有什么样的联系?
  6. 植物大战僵尸年度版的用户资料保存路径
  7. 缺陷检测-金属表面缺陷检测
  8. 什么是“同层稽核”,什么是“不同层稽核”
  9. 【观察】昇腾智行:AI稽核收费方案再创新,助推智慧高速发展“加速度”
  10. 安卓应用上传应用宝遇到的问题