网络文件共享
FTP
实现基于MYSQL验证的vsftpd虚拟用户
NFS文件系统
客户端NFS挂载
SAMBA
数据实时同步(inotify+rsync)
文件共享在一定程度上可以起到备份的作用
常见的存储方式:
DAS:直连存储,普通主机形式,组成就是服务器磁盘,截止是SCSI或者光纤,数据类型以块的方式本机管理;
SAN:存储区域网络,用户在客户端上看到的是空间,远程服务端映射成为客户端的一块磁盘,数据类型是块;
NAS:网络连接存储(基于文件协议FTP/NFS/SAMBA),数据类型在客户端是以文件方式。
FTP
文件传输协议FTP
File Transfer Protocol 早期的三个应用级协议之一
基于C/S结构
服务器端双通道协议:数据和命令连接(命令通道走的就是命令,协议随机端口)
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT style):服务器主动连接
命令(控制):客户端:随机port --- 服务器:tcp21
数据:客户端:随机port ---服务器:tcp20
被动(PASV style):客户端主动连接,每一次都有变化
命令(控制):客户端:随机port --- 服务器:tcp21
数据:客户端:随机port ---服务器:随机port
服务器被动模式数据端口示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服务器数据端口为:224*256+59
被动模式每次传输开启,传输结束关闭
ftp连接之后默认是被动模式,输入passive进入主动模式
firewalld可以自动分析识别ftp协议的端口,iptables还不支持,需要ftp模块
软件名为:vsftpd(系统自带),默认共享目录是pub,(lftp界面更清晰)
wget、curl都可以下载
get、mget
put、mput(带m的是批量)
sftp就是给予ssh协议的ftp
vsftpd默认是支持匿名下载,不支持匿名上传;操作系统账号可以下载,可以上传
windows客户端默认使用的是主动模式,linux客户端默认是使用被动模式
配置文件部分:
ftp的默认日志


实现基于SSL的FTPS
 查看是否支持SSL
ldd ​​which vsftpd​​ 查看到libssl.so,看到调用了ssl库
 创建自签名证书
cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text
 配置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
 用filezilla等工具测试
利用系统自带的自签名证书:pem 文件里是带自签名证书和私钥


vsftpd虚拟用户
实现基于文件验证的vsftpd虚拟用户
(PDF里有,每次新增加用户,要再输入一遍,不方便)
ftp的/目录是不能有写权限的
文档里20页左右有具体的步骤-------


实现基于MYSQL验证的vsftpd虚拟用户
pam_userdb的作用是验证数据库里的用户文件
环境:一台ftp服务器,一个数据库服务器
先搭数据库服务器:
建库,建表,设权限;
新建用户,密码加密;
建个账户授权从网络连过来,因为只需要验证,所以只开放查询即可;
接下来是FTP服务器,
首先需要安装vsftpd服务;
需要pam模块,这个软件叫pam-mysql,centos7epel源里没有,得编译安装:
依赖包,还有gcc++
解压
指定库文件的路径,放在pam的库目录里
出现模块即可
修改pam模块的配置文件
添加认证信息
把所有的虚拟用户映射成系统账户
这个用户的家目录对这个用户来讲不允许有写权限
如果用户要上传文件,可以专门建立一个上传的目录,给与系统账户权限,ftp的配置文件也得开启上传功能
修改pam配置文件,指名服务名,把所有用户全部映射成系统用户,重启服务
如果想让不同的用户拥有不同的权限,还需要设置
比如让ftpuser1能上传
可以匿名上传,也可以建立文件夹
如果想让不同的用户只能访问自己不同的文件夹,还需要设置
vim /etc/data/ftpuser2
如果想让user2有上传的权限,除了跟上面user1一样三行之外,还需要设置文件系统级别的权限,默认用户的根目录设权限也不行,得是子目录
FTP的缺点


NFS文件系统
centos7可以解决依赖性
共享的规则文件/etc/exports,写共享的目录和共享的范围(后面加rw就是读写,还有权限压榨)
重启 expotrfs -r平滑重启,-v\显示,
给共享目录设置用户权限
客户端访问的命令showmount
客户端挂载
客户端NFS挂载
实现基于普通用户wang的家目录的漫游,登录不同的机器,看到相同的目录
nfs服务器
先建共享目录,重启服务,开启启动
vim /etc/exports.d/wang.exports
客户端
挂载下试试,mount -a
自动挂载,autofs服务(自带),指定挂载规则
父目录是启动服务生成的,子目录是访问的时候生成的
最简单的挂载:


SAMBA
基于SMB协议,CIFS是一种文件系统
windows和linux查看端口都可以用netstat命令
相关包:
Samba 提供smb服务
Samba-client 客户端软件
samba-common 通用软件
cifs-utils smb客户端工具
samba-winbind 和AD相关
管理模式:域/工作组

就像这台电脑,就是已经加入域了
------0
linux访问windows共享目录
首先在windows某个公共盘建立一个共享目录,给权限(桌面不行,桌面是等于登录用户的家目录),windows命名的目录和共享目录名字可以不一样(后面加个$符号,windows识别为隐藏,linux没用);
如果在windows创建一个共享目录,用linux访问的话,默认是用root用户,而windows是没有root用户的,需要创建系统账户,然后变为samba账户,这里就比如创建一个test用户,密码是centos;
然后用linux客户端就可以查看了,-L只是查看,登录的话需要全路径
挂载上去更方便
查看访问情况
删除共享
删除用户
虽然SAMBA解决了跨系统共享的问题,但是生产中一般用windows的不多,所以用的比较少


linux Samba server
139、445端口,nmd是解析服务,用137、138端口
作为Samba服务端,必须有linux专有的Samba账号
首先创建系统账号
然后映射为Samba账号,-a是加入,不加的话是更改,-d是禁用,-x是删除
查看Samba账号的目录和命令:
刚才创建用户忘了给家目录,这样访问会有问题,所以需要建立用户家目录,三个同样操作
查看smb服务的状态


数据实时同步(inotify+rsync)
数据包:xinetd rsync inotify-tools
inotify有默认监控的最大值,生产中不够用的话,可以调大/proc/sys/fs/inotify三个值
max_queued_events:inotify #事件队列最大长度,如值太小会出现 EventQueue Overflow 错误,默认值:16384
max_user_watches #可以监视的文件数量(单进程),默认值:8192
max_user_instances #每个用户创建inotify实例最大值,默认值:128
总结inotify的用法:-m始终监听、-r递归、-q输出少量信息、-o打印输出到文件、--timefmt <fmt> 指定时间输出格式、--format <fmt> 指定的输出格式;即实际监控输出内容、-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
[root@mini71 ~]#inotifywait -mrq /data/www -o /data/inotfy.txt --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib
改动
[root@mini71 ~]#tail -f /data/inotfy.txt
2020-04-21 22:02 /data/www/ event: OPEN;ISDIR
2020-04-21 22:02 /data/www/ event: CLOSE_NOWRITE;CLOSE;ISDIR
2020-04-21 22:03 /data/www/f1.txt event: CLOSE_WRITE;CLOSE
2020-04-21 22:04 /data/www/f1.txt event: CLOSE_WRITE;CLOSE
配置 rsync 服务器端的配置文件
vi /etc/rsyncd.conf
uid = root #
gid = root #
use chroot = no #
max connections = 0 #最大连接数
ignore errors #忽略错误
exclude = lost+found/ #针对不检查的文件夹
log file = /var/log/rsyncd.log #日志文件
pid file = /var/run/rsyncd.pid #进程文件
lock file = /var/run/rsyncd.lock #锁文件
reverse lookup = no #反向解析
hosts allow = 192.168.8.0/24 #允许的地址列表
[backup] #模块名称
path = /backup/ #路径
comment = backup #描述
read only = no #知只读
auth users = rsyncuser #rsync提供的账号
secrets file = /etc/rsync.pass #账户密码文件
比如:72是rsync服务端,71是inotfy服务端,实现数据实时同步
配置rsync服务端配置文件
[root@mini72 ~]#vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.36.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
写密码文件
[root@mini72 ~]#echo "rsyncuser:123456" >/etc/rsync.pass
[root@mini72 ~]#cat /etc/rsync.pass
rsyncuser:123456
设权限
[root@mini72 ~]#chmod 600 /etc/rsync.pass
启动服务
[root@mini72 ~]#rsync --daemon
对应建立备份目录
[root@mini72 ~]#mkdir /backup
inotify服务端测试同步
[root@mini71 ~]#rsync -avz --password-file=/etc/rsync.pass /data/www
sending incremental file list
www/
www/f1.txt
sent 471 bytes received 39 bytes 1,020.00 bytes/sec
total size is 646 speedup is 1.27
[root@mini72 ~]#ls /backup/
www
##注意/data/www后面加不加斜杠,不加斜杠可以把整个目录都复制过来
编写数据实时同步的脚本
[root@mini71 ~]#vim inotify_rsync.sh
#!/bin/bash
SRC='/data/www'
DEST='rsyncuser@192.168.36.72::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
加执行权限
[root@mini71 ~]#chmod +x inotify_rsync.sh
执行脚本
[root@mini71 ~]#. inotify_rsync.sh
测试
[root@mini71 ~]#touch /data/www/test.txt
[root@mini72 ~]#ls /backup/www/
f1.txt test.txt
实时观察watch
rsync是基于文件级的同步,在处理一些单个的大文件修改时,会同步整个文件,这一点是性能弊端


从跨平台角度说,
samba, ftp差不多, 而nfs不支持windows平台
从挂载角度说,
samba, nfs可以把远程目录挂载到本地目录上, 对用户是透明的. 而ftp则不行
从使用范围上说,
samba, nfs最好是限定在局域网内, 不要暴露在公网上. 而ftp则不同, 既可以面向内网, 也可以是公网.
从面向对像来说,
三者都支持文件, 但samba还支持打印机, 以及作windows域管理器
samba就是网络邻居, ftp就不用说了. nfs在linux平台上和samba差不多. 所以你可以自己比较下, 网上邻居和ftp差别.