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

网络文件共享服务

本章总目录

  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的主要区别体现在文件系统所在的位置

DASNASSAN
传输类型SCSI、FCIPIP、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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值