23.网络文件共享服务
文章目錄
- 1 存儲類型
- 1.1 DAS存儲
- 1.2 NAS存儲
- 1.3 SAN存儲
- 1.4 三種存儲比較
- 2 FTP 文件傳輸協(xié)議
- 2.1 FTP工作原理介紹
- 2.2 常見 FTP 相關(guān)軟件
- 2.3 vsftpd 軟件介紹
- 2.4 vsftpd服務(wù)常見配置
- 2.4 vsftpd服務(wù)常見配置
- 2.4.2 主動模式端口
- 2.4.3 被動模式端口范圍
- 2.4.4 使用當(dāng)?shù)貢r間
- 2.4.5 匿名用戶登錄
- 2.4.6 匿名用戶上傳
- 2.4.7 指定匿名用戶的上傳文件的默認(rèn)的所有者和權(quán)限
- 2.4.8 Linux系統(tǒng)用戶
- 2.4.9 將所有系統(tǒng)用戶映射為指定的guest用戶
- 2.4.10 禁錮系統(tǒng)用戶
- 2.4.11 日志
- 2.4.12 提示信息
- 2.4.13 PAM模塊實現(xiàn)用戶訪問控制
- 2.4.14 是否啟用控制用戶登錄的列表文件
- 2.4.14 vsftpd服務(wù)指定用戶身份運(yùn)行
- 2.4.15 連接數(shù)限制
- 2.4.16 傳輸速率,單位:字節(jié)/秒
- 2.4.17 連接時間:秒為單位
- 2.4.18 以文本方式傳輸
- 2.5 vsftpd 虛擬用戶
- 2.5.1 實現(xiàn)基于文件驗證的vsftpd虛擬用戶
- 2.5.1.1 創(chuàng)建用戶數(shù)據(jù)庫文件
- 2.5.1.2 創(chuàng)建用戶和訪問FTP目錄
- 2.5.1.3 創(chuàng)建pam配置文件
- 2.5.1.4 指定pam配置文件
- 2.5.1.5 虛擬用戶建立獨(dú)立的配置文件
- 2.5.2 實現(xiàn)基于MYSQL驗證的vsftpd虛擬用戶
- 2.5.2.1 在數(shù)據(jù)庫服務(wù)器上安裝mysql數(shù)據(jù)庫
- 2.5.2.2 在數(shù)據(jù)庫服務(wù)上配置數(shù)據(jù)庫支持vsftpd服務(wù)
- 2.5.2.3 在FTP服務(wù)器上安裝vsftpd 和 pam_mysql包
- 2.5.2.4 在FTP服務(wù)器上安裝 pam_mysql
- 2.5.2.5 在FTP服務(wù)器上建立pam認(rèn)證所需文件
- 2.5.2.6 建立相應(yīng)用戶和修改vsftpd配置文件
- 2.5.2.7 在FTP服務(wù)器上配置虛擬用戶具有不同的訪問權(quán)限
- 3 NFS 服務(wù)
- NFS工作原理
- 3.2 NFS軟件介紹
- 3.3 NFS共享配置文件格
- 3.4 NFS工具
- 3.4.1 rpcinfo
- 3.4.2 exportfs
- 3.4.3 showmount
- 3.4.4 mount.nfs
- 3.5 自動掛載
- 3.5.1 相關(guān)包和文件
- 3.5.2 配置文件格式
- 3.5.2.1 相對路徑法
- 3.5.2.2 絕對路徑法
- 3.7 實戰(zhàn)案例
- 3.7.1 目標(biāo)
- 3.7.2 環(huán)境準(zhǔn)備
- 3.7.3 步驟
- 4 SAMBA 服務(wù)
- 4.1 SAMBA 服務(wù)簡介
- 4.2 SAMBA 軟件介紹
- 4.3 SAMBA客戶端工具
- 4.3.1 使用smbclient 訪問SAMBA服務(wù)器
- 4.3.2 掛載CIFS文件系統(tǒng)
- 4.4 管理SAMBA用戶
- 4.4.1 實現(xiàn)samba用戶說明
- 4.4.2 管理用戶命令添加
- 4.5 SAMBA服務(wù)器配置
- 4.5.1 SAMBA服務(wù)器全局配置
- 4.5.2 配置特定目錄共享
- 4.6 實戰(zhàn)案例
- 4.6.1 實戰(zhàn)案例:利用SAMBA實現(xiàn)指定目錄共享
- 4.6.2 實戰(zhàn)案例2:實現(xiàn)不同samba用戶訪問相同的samba共享,實現(xiàn)不同的配置
- 5 數(shù)據(jù)的實時同步
- 5.1 實時同步技術(shù)介紹
- 5.2 實現(xiàn) inotify
- 5.2.1 內(nèi)核支持
- 5.2.2 inotify-tools工具
- 5.3 rsync
- 5.3.1 rsync命令
- 5.3.2 以獨(dú)立服務(wù)方式運(yùn)行rsync并實現(xiàn)驗證功能
- 5.4 inotify+rsync+shell 腳本實現(xiàn)實時數(shù)據(jù)同步
- 5.5 sersync 實現(xiàn)實時數(shù)據(jù)同步
- 5.5.1 sersync 介紹
- 5.5.2 基于rsync daemon 實現(xiàn) sersync
- 5.5.3 基于遠(yuǎn)程shell 實現(xiàn) sersync
- 5.6 實戰(zhàn)案例:實現(xiàn)基于分布式的LAMP架構(gòu),并將NFS實時同步到備份服務(wù)器
- 在這里插入圖片描述
1 存儲類型
存儲類型分為三種
- 直連式存儲:Direct-Attached Storage,簡稱DAS
- 存儲區(qū)域網(wǎng)絡(luò):Storage Area Network,簡稱SAN
- 網(wǎng)絡(luò)附加存儲:Network-Attached Storage,簡稱NAS
1.1 DAS存儲
DAS存儲是最常見的一種存儲方式,尤其是在中小企業(yè)應(yīng)用中。PC中的硬盤或只有一個外部SCSI接口的JBOD都屬于DAS架構(gòu)。DAS是指存儲設(shè)備直接連接到服務(wù)器總線上,存儲設(shè)備只與一臺獨(dú)立的主機(jī)連接,其他主機(jī)不能使用這個存儲設(shè)備。DAS存儲設(shè)備與服務(wù)器主機(jī)之間的連接通道通常采用SCSI連接,DAS存儲設(shè)備主要是磁盤陣列(RAID: Redundant Arrays of Independent Disks)、磁盤簇(JBOD:Just a Bunch Of Disks)等。
1.2 NAS存儲
NAS存儲就是存儲設(shè)備通過標(biāo)準(zhǔn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(比如以太網(wǎng))添加到一群計算機(jī)上。與DAS以及SAN不同,NAS是文件級的存儲方法。采用NAS較多的功能是用來進(jìn)行文件共享。
NAS存儲也通常被稱為附加存儲,顧名思義,就是存儲設(shè)備通過標(biāo)準(zhǔn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(例如以太網(wǎng))添加到一群計算機(jī)上。NAS是文件級的存儲方法,它的重點在于幫助工作組和部門級機(jī)構(gòu)解決迅速增加存儲容量的需求。如今更多的親們采用NAS較多的功能是用來文檔共享、圖片共享、電影共享等等,而且隨著云計算的發(fā)展,一些NAS廠商也推出了云存儲功能,大大方便了企業(yè)和親們等個人用戶的使用。
NAS產(chǎn)品是真正即插即用的產(chǎn)品。NAS設(shè)備一般支持多計算機(jī)平臺,用戶通過網(wǎng)絡(luò)支持協(xié)議可進(jìn)入相同的文檔,因而NAS設(shè)備無需改造即可用于混合Unix/Windows NT局域網(wǎng)內(nèi),同時NAS的應(yīng)用非常靈活。
但NAS有一個關(guān)鍵性問題,即備份過程中的帶寬消耗。與將備份數(shù)據(jù)流從LAN中轉(zhuǎn)移出去的存儲區(qū)域網(wǎng)(SAN)不同,NAS仍使用網(wǎng)絡(luò)進(jìn)行備份和恢復(fù)。NAS 的一個缺點是它將存儲事務(wù)由并行SCSI連接轉(zhuǎn)移到了網(wǎng)絡(luò)上。這就是說LAN除了必須處理正常的最終用戶傳輸流外,還必須處理包括備份操作的存儲磁盤請求。
1.3 SAN存儲
存儲區(qū)域網(wǎng)絡(luò),這個是通過光纖通道或以太網(wǎng)交換機(jī)連接存儲陣列和服務(wù)器主機(jī),最后成為一個專用的存儲網(wǎng)絡(luò)。SAN經(jīng)過十多年歷史的發(fā)展,已經(jīng)相當(dāng)成熟,成為業(yè)界的事實標(biāo)準(zhǔn)(但各個廠商的光纖交換技術(shù)不完全相同,其服務(wù)器和SAN存儲有兼容性的要求)。
SAN提供了一種與現(xiàn)有LAN連接的簡易方法,并且通過同一物理通道支持廣泛使用的SCSI和IP協(xié)議。SAN不受現(xiàn)今主流的、基于SCSI存儲結(jié)構(gòu)的布局限制。特別重要的是,隨著存儲容量的爆炸性增長,SAN允許企業(yè)獨(dú)立地增加它們的存儲容量。SAN的結(jié)構(gòu)允許任何服務(wù)器連接到任何存儲陣列,這樣不管數(shù)據(jù)置放在那里,服務(wù)器都可直接存取所需的數(shù)據(jù)。因為采用了光纖接口,SAN還具有更高的帶寬。
如今的SAN解決方案通常會采取以下兩種形式:光纖信道以及iSCSI或者基于IP的SAN,也就是FC SAN和IP SAN。光纖信道是SAN解決方案中大家最熟悉的類型,但是,最近一段時間以來,基于iSCSI的SAN解決方案開始大量出現(xiàn)在市場上,與光纖通道技術(shù)相比較而言,這種技術(shù)具有良好的性能,而且價格低廉。
SAN的優(yōu)勢:
隨著存儲容量的增長,SAN允許企業(yè)獨(dú)立地增加他們的存儲容量。
SAN允許任何服務(wù)器連接到任何存儲陣列(好處是:不管數(shù)據(jù)放在哪里,服務(wù)器都可以直接存取所需的數(shù)據(jù))
由于使用光纖接口,SAN具有更高的帶寬。除了FC連接,SAN連接還有ISCSI(SCSI over IP)以及SAS(Serial Attached SCSI)接口。
光纖接口可以提供10公里那么長那么遠(yuǎn)的連接長度,非常容易實現(xiàn)物理分離的存儲
1.4 三種存儲比較
SAN與NAS的主要區(qū)別體現(xiàn)在文件系統(tǒng)所在的位置
三種存儲架構(gòu)的應(yīng)用場景
- DAS雖然比較古老了,但是還是很適用于那些數(shù)據(jù)量不大,對磁盤訪問速度要求較高的中小企業(yè)
- NAS多適用于文件服務(wù)器,用來存儲非結(jié)構(gòu)化數(shù)據(jù),雖然受限于以太網(wǎng)的速度,但是部署靈活,成本低
- SAN則適用于大型應(yīng)用或數(shù)據(jù)庫系統(tǒng),缺點是成本高、較為復(fù)雜
2 FTP 文件傳輸協(xié)議
2.1 FTP工作原理介紹
文件傳輸協(xié)議:File Transfer Protocol 早期的三個應(yīng)用級協(xié)議之一,基于C/S結(jié)構(gòu)
數(shù)據(jù)傳輸格式:二進(jìn)制(默認(rèn))和文本
雙通道協(xié)議:命令和數(shù)據(jù)連接
兩種模式:從服務(wù)器角度
- 主動(PORT style):服務(wù)器主動連接
命令(控制):客戶端:隨機(jī)port —> 服務(wù)器:21/tcp
數(shù)據(jù):客戶端:隨機(jī)port <—服務(wù)器:20/tcp - 被動(PASV style):客戶端主動連接
命令(控制):客戶端:隨機(jī)port —> 服務(wù)器:21/tcp
數(shù)據(jù):客戶端:隨機(jī)port —> 服務(wù)器:隨機(jī)port /tcp
范例:服務(wù)器被動模式數(shù)據(jù)端口
227 Entering Passive Mode (172,16,0,1,224,59)服務(wù)器數(shù)據(jù)端口為:224*256+59
FTP服務(wù)狀態(tài)碼:
1XX:信息 125:數(shù)據(jù)連接打開 2XX:成功類狀態(tài) 200:命令OK 230:登錄成功 3XX:補(bǔ)充類 331:用戶名OK 4XX:客戶端錯誤 425:不能打開數(shù)據(jù)連接 5XX:服務(wù)器錯誤 530:不能登錄用戶認(rèn)證:
匿名用戶:ftp,anonymous,對應(yīng)Linux用戶ftp
系統(tǒng)用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務(wù)的專用用戶,獨(dú)立的用戶/密碼文件
修改ftp家目錄
[root@centos8 ~]#mkdir /data/ftproot [root@centos8 ~]#usermod -d /data/ftproot ftp#查看 [root@centos8 ~]#getent passwd ftp ftp:x:14:50:FTP User:/data/ftproot:/sbin/nologin#恢復(fù) [root@centos8 ~]#usermod -d /var/ftp ftp2.2 常見 FTP 相關(guān)軟件
FTP服務(wù)器端軟件
Wu-ftpd,Proftpd,Pureftpd,Filezilla Server,Serv-U,Wing FTP Server,IIS
vsftpd:Very Secure FTP Daemon,CentOS 默認(rèn)FTP服務(wù)器
vsftpd官網(wǎng): https://security.appspot.com/vsftpd.html
Filezilla官網(wǎng): 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),官網(wǎng):https://www.gftp.org/
filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver
2.3 vsftpd 軟件介紹
由 vsftpd 包提供,不再由xinetd管理
用戶認(rèn)證配置文件:/etc/pam.d/vsftpd
啟動服務(wù)相關(guān)文件:
/usr/lib/systemd/system/vsftpd.service /etc/rc.d/init.d/vsftpd配置文件:
/etc/vsftpd/vsftpd.conf幫助:man 5 vsftpd.conf
配置文件格式:
option=value注意:= 前后不要有空格
用戶和其共享目錄
- 匿名用戶(映射為系統(tǒng)用戶ftp )共享文件位置:/var/ftp
- 系統(tǒng)用戶共享文件位置:用戶家目錄
- 虛擬用戶共享文件位置:為其映射的系統(tǒng)用戶的家目錄
2.4 vsftpd服務(wù)常見配置
2.4 vsftpd服務(wù)常見配置
listen_port=2121 默認(rèn)值為21范例:端口號的修改
#修改 [root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf listen_port=1234#命令行連接 [root@centos7 ~]#ftp 10.0.0.8 1234 Connected to 10.0.0.8 (10.0.0.8). 220 (vsFTPd 3.0.3) Name (10.0.0.8:root): #資源管理器連接 ftp://10.0.0.8:1234/2.4.2 主動模式端口
connect_from_port_20=YES 主動模式端口為20 ftp_data_port=20 (默認(rèn)) 指定主動模式的端口2.4.3 被動模式端口范圍
linux ftp 客戶端默認(rèn)使用被動模式 windows ftp 客戶端默認(rèn)使用主動模式 pasv_min_port=6000 0為隨機(jī)分配,端口范圍會影響客戶端的并發(fā)數(shù) pasv_max_port=60102.4.4 使用當(dāng)?shù)貢r間
use_localtime=YES 使用當(dāng)?shù)貢r間(默認(rèn)為NO,使用GMT)2.4.5 匿名用戶登錄
anonymous_enable=YES #支持匿名用戶,CentOS8 默認(rèn)不允許匿名 no_anon_password=YES #匿名用戶略過口令檢查 , 默認(rèn)NO2.4.6 匿名用戶上傳
anon_upload_enable=YES 匿名上傳,注意:文件系統(tǒng)權(quán)限 anon_mkdir_write_enable=YES 匿名建目錄setfacl -m u:ftp:rwx /var/ftp/pub注意:還需要開啟文件系統(tǒng)訪問的權(quán)限,不能給FTP根目錄寫權(quán)限,只能級子目錄寫權(quán)限,否則報如下錯誤
[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 只能下載全部讀的文件, 默認(rèn)YES anon_umask=0333 指定匿名上傳文件的umask,默認(rèn)077,注意:0333中的0不能 省略 anon_other_write_enable=YES 可刪除和修改上傳的文件,默認(rèn)NO2.4.7 指定匿名用戶的上傳文件的默認(rèn)的所有者和權(quán)限
chown_uploads=YES #默認(rèn)NO chown_username=wang chown_upload_mode=06442.4.8 Linux系統(tǒng)用戶
local_enable=YES 是否允許linux用戶登錄 write_enable=YES 允許linux用戶上傳文件 local_umask=022 指定系統(tǒng)用戶上傳文件的默認(rèn)權(quán)限對應(yīng)umask2.4.9 將所有系統(tǒng)用戶映射為指定的guest用戶
guest_enable=YES 所有系統(tǒng)用戶都映射成guest用戶 guest_username=ftp 配合上面選項才生效,指定guest用戶 local_root=/ftproot 指定guest用戶登錄所在目錄,但不影響匿名用戶的登錄目錄 user_config_dir=/etc/vsftpd/conf.d/ 每個用戶獨(dú)立的配置文件目錄范例: 讓所有的系統(tǒng)用戶映射指定guest用戶,并且每個用戶目錄的不同的
[root@centos8 ~]#useradd ftpuser[root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=ftpuser user_config_dir=/etc/vsftpd/conf.d/ #每個用戶獨(dú)立的配置文件目錄[root@centos8 ~]#systemctl restart vsftpd [root@centos8 ~]#mkdir /etc/vsftpd/conf.d/ [root@centos8 ~]#chmod 555 /home/ftpuser/[root@centos8 ~]#cat /etc/vsftpd/conf.d/wang local_root=/ftproot_wang [root@centos8 ~]#cat /etc/vsftpd/conf.d/mage local_root=/ftproot_mage[root@centos8 ~]#mkdir /ftproot_wang [root@centos8 ~]#mkdir /ftproot_mage2.4.10 禁錮系統(tǒng)用戶
禁錮所有系統(tǒng)用戶在家目錄中
chroot_local_user=YES #禁錮系統(tǒng)用戶,默認(rèn)NO,即不禁錮禁錮或不禁錮特定的系統(tǒng)用戶在家目錄中,與上面設(shè)置功能相反
chroot_list_enable=YES #默認(rèn)是NO chroot_list_file=/etc/vsftpd/chroot_list #默認(rèn)值當(dāng)chroot_local_user=YES和chroot_list_enable=YES時,則chroot_list中用戶不禁錮,即白名 單 當(dāng)chroot_local_user=NO和chroot_list_enable=YES時, 則chroot_list中用戶禁錮,即黑名單2.4.11 日志
#wu-ftp 日志:默認(rèn)啟用 xferlog_enable=YES 啟用記錄上傳下載日志,此為默認(rèn)值 xferlog_std_format=YES 使用wu-ftp日志格式,此為默認(rèn)值 xferlog_file=/var/log/xferlog 可自動生成, 此為默認(rèn)值#vsftpd日志:默認(rèn)不啟用 dual_log_enable=YES 使用vsftpd日志格式,默認(rèn)不啟用 vsftpd_log_file=/var/log/vsftpd.log 可自動生成, 此為默認(rèn)值2.4.12 提示信息
登錄前提示信息
ftpd_banner="welcome to mage ftp server" banner_file=/etc/vsftpd/ftpbanner.txt目錄訪問提示信息
dirmessage_enable=YES 此為默認(rèn)值 message_file=.message 信息存放在指定目錄下.message ,此為默認(rèn)值,只支持單行說明范例:目錄訪問提示信息
[root@centos8 tools]#pwd /var/ftp/tools [root@centos8 ftp]#cd tools/ [root@centos8 tools]#vi .message代碼中中的 ^[ 是在vim插入規(guī)模下按 crtl+v esc [root@centos8 tools]#vi .message ^[[1;32m software dir^[[0m2.4.13 PAM模塊實現(xiàn)用戶訪問控制
pam_service_name=vsftpd#pam配置文件:/etc/pam.d/vsftpd /etc/vsftpd/ftpusers 默認(rèn)文件中用戶拒絕登錄,默認(rèn)是黑名單,但也可以是白名單范例:
#修改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-auth2.4.14 是否啟用控制用戶登錄的列表文件
never allow users in this file, and do not even prompt for a password.
userlist_enable=YES 此為默認(rèn)值 userlist_deny=YES(默認(rèn)值) 黑名單,不提示口令,NO為白名單 userlist_file=/etc/vsftpd/user_list 此為默認(rèn)值范例:root登錄
#刪除/etc/vsftpd/ftpusers 與/etc/vsftpd/user_list里的root [root@centos7 ~]#ftp 10.0.0.8 Connected to 10.0.0.8 (10.0.0.8). 220-welcome to M43 220 Name (10.0.0.8:root): root 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 ftp>2.4.14 vsftpd服務(wù)指定用戶身份運(yùn)行
nopriv_user=nobody 此為默認(rèn)值2.4.15 連接數(shù)限制
max_clients=0 #最大并發(fā)連接數(shù)范例:設(shè)置連接數(shù)
[root@centos8 vsftpd]#vim vsftpd.conf max_clients=1 [root@centos8 vsftpd]#systemctl restart vsftpd如果超出連接,會報如下提示
2.4.16 傳輸速率,單位:字節(jié)/秒
anon_max_rate=0 匿名用戶的最大傳輸速率,以字節(jié)為單位,比如:1024000表示1MB/s local_max_rate=0 本地用戶的最大傳輸速率范例:限速
#限速 [root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf anon_max_rate=1024000 local_max_rate=10240000 [root@centos8 ~]#systemctl restart vsftpd2.4.17 連接時間:秒為單位
connect_timeout=60 主動模式數(shù)據(jù)連接超時時長 accept_timeout=60 被動模式數(shù)據(jù)連接超時時長 data_connection_timeout=300 數(shù)據(jù)連接無數(shù)據(jù)輸超時時長 idle_session_timeout=60 無命令操作超時時長2.4.18 以文本方式傳輸
以文本方式傳輸文件時,會自動對文件進(jìn)行格式轉(zhuǎn)換,比如轉(zhuǎn)換成windows的文本格式
#啟用此選項可使服務(wù)器在ASCII模式下實際對文件進(jìn)行ASCII處理。 #默認(rèn)是禁用,禁用后,服務(wù)器將假裝允許ASCII模式,但實際上會忽略激活它的請求 ascii_upload_enable=YES ascii_download_enable=YES說明:不建議使用文本方式,因為可能導(dǎo)致二進(jìn)制文件內(nèi)容被破壞
2.5 vsftpd 虛擬用戶
虛擬用戶:給特定服務(wù)使用的用戶帳號
- 所有虛擬用戶會統(tǒng)一映射為一個指定的系統(tǒng)帳號:訪問共享位置,即為此系統(tǒng)帳號的家目錄
- 各虛擬用戶可被賦予不同的訪問權(quán)限,通過匿名用戶的權(quán)限控制參數(shù)進(jìn)行指定
虛擬用戶帳號的存儲方式:
- 文件:創(chuàng)建文本文件,奇數(shù)行為用戶名,偶數(shù)行為密碼,再被編碼為hash 格式Berkeley DB
database文件
- 關(guān)系型數(shù)據(jù)庫中的表中:實時查詢數(shù)據(jù)庫完成用戶認(rèn)
vsftpd 支持mysql庫:pam要依賴于pam-mysql
2.5.1 實現(xiàn)基于文件驗證的vsftpd虛擬用戶
2.5.1.1 創(chuàng)建用戶數(shù)據(jù)庫文件
[root@centos8 ~]#rpm -qf `which db_load` libdb-utils-5.3.28-37.el8.x86_64 [root@centos8 ~]#yum -y install libdb-utils-5.3.28-37.el8.x86_64 [root@centos8 ~]#vim /etc/vsftpd/vusers.txt ftpuser1 111111 ftpuser2 123456#將生成的txt文件轉(zhuǎn)換成db格式 [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 創(chuàng)建用戶和訪問FTP目錄
[root@centos8 ~]#useradd -d /data/ftproot -s /sbin/nologin -r ftpuser [root@centos8 ~]#mkdir -pv /data/ftproot/upload mkdir: created directory '/data/ftproot' mkdir: created directory '/data/ftproot/upload' [root@centos8 ~]#setfacl -m u:ftpuser:rwx /data/ftproot/upload [root@centos8 ~]#ll /data/ftproot/ total 0 drwxrwxr-x+ 2 root root 6 Mar 11 09:48 upload2.5.1.3 創(chuàng)建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/vusers2.5.1.4 指定pam配置文件
[root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf guest_enable=yes #開啟虛擬用戶 guest_username=ftpuser #虛擬用戶映射為ftpuser賬號 pam_service_name=vsftpd.db2.5.1.5 虛擬用戶建立獨(dú)立的配置文件
#指定各個用戶配置文件存放的路徑 [root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/conf.d/#創(chuàng)建各個用戶配置文件存放的路徑 [root@centos8 ~]#mkdir /etc/vsftpd/conf.d/#創(chuàng)建各用戶自已的配置文件,允許ftpuser1用戶可讀寫,其它用戶只讀 [root@centos8 ~]#vim /etc/vsftpd/conf.d/ftpuser1 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/data/ftproot1#創(chuàng)建各用戶自已的配置文件 [root@centos8 ~]#vim /etc/vsftpd/conf.d/ftpuser2 #登錄目錄改變至指定的目錄 local_root=/data/ftproot2 #針對各個用戶建立對應(yīng)的數(shù)據(jù)目錄 [root@centos8 ~]#mkdir /data/ftproot1/ [root@centos8 ~]#mkdir /data/ftproot2/2.5.2 實現(xiàn)基于MYSQL驗證的vsftpd虛擬用戶
利用 pam_mysql 模塊可以實現(xiàn)基于MySQL的FTP虛擬用戶功能
項目網(wǎng)站:
http://pam-mysql.sourceforge.net/ https://sourceforge.net/projects/pam-mysql/ http://sf.net/projects/pam-mysql注意:因為此項目年代久遠(yuǎn)不再更新,當(dāng)前只支持CentOS 6,7,不支持CentOS 8
環(huán)境準(zhǔn)備
2.5.2.1 在數(shù)據(jù)庫服務(wù)器上安裝mysql數(shù)據(jù)庫
#注意:MySQL8.0由于取消了PASSWORD()函數(shù)不支持,因此選擇Mariadb [root@centos8 ~]#yum -y install mariadb-server [root@centos8 ~]#systemctl enable --now mariadb.service2.5.2.2 在數(shù)據(jù)庫服務(wù)上配置數(shù)據(jù)庫支持vsftpd服務(wù)
[root@centos8 ~]#mysql MariaDB [(none)]> create database vsftpd; MariaDB [(none)]> use vdftpd; MariaDB [(none)]> create table users ( id int auto_increment not null primary key, name char(50) binary not null, password char(41) binary not null );#添加虛擬用戶,為了安全應(yīng)該使用PASSWORD函數(shù)加密其密碼后存儲 MariaDB [vsftpd]> insert into users(name,password)values('ftpuser1',password('123456')); MariaDB [vsftpd]> insert into users(name,password)values('ftpuser2',password('654321')); MariaDB [vsftpd]> select * from users; +----+----------+-------------------------------------------+ | id | name | password | +----+----------+-------------------------------------------+ | 1 | ftpuser1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 2 | ftpuser2 | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 | +----+----------+-------------------------------------------+ 2 rows in set (0.001 sec)#創(chuàng)建連接的數(shù)據(jù)庫用戶 MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '111111';2.5.2.3 在FTP服務(wù)器上安裝vsftpd 和 pam_mysql包
[root@centos7 ~]#yum -y install vsftpd2.5.2.4 在FTP服務(wù)器上安裝 pam_mysql
對于 centos 6:pam_mysql由EPEL的源中提供
[root@centos6 ~]#yum install pam_mysql對于 centos7 和 8:無對應(yīng)rpm包,需手動編譯安裝
注意: 當(dāng)前版本的源碼不支持 CentOS 8,使用中會提示下面錯誤
pam-mysql 源碼進(jìn)行編譯
#安裝相關(guān)包 [root@centos7 ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel #下載pam-mysql源碼進(jìn)行編譯 [root@centos7 ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql0.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 Mar 11 11:00 /lib64/security/pam_mysql.la -rwxr-xr-x 1 root root 141712 Mar 11 11:00 /lib64/security/pam_mysql.so2.5.2.5 在FTP服務(wù)器上建立pam認(rèn)證所需文件
[root@centos7 ~]#vi /etc/pam.d/vsftpd.mysql #添加如下兩行 auth required pam_mysql.so user=vsftpd passwd=111111 host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 #驗證身份 account required pam_mysql.so user=vsftpd passwd=111111 host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 #證明賬戶有效注意:以上參考 README文檔
crypt 加密方式:
- 0表示不加密
- 1表示crypt(3)加密
- 2表示使用mysql password()函數(shù)加密
- 3表示md5加密
- 4表示sha1加密
配置字段說明
- auth 表示認(rèn)證
- account 驗證賬號密碼正常使用
- required 表示認(rèn)證要通過
- pam_mysql.so模塊是默認(rèn)的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕對路徑;后面為給此模塊傳遞的參數(shù)
- user=vsftpd為登錄mysql的用戶
- passwd=magedu 登錄mysql的的密碼
- host=mysqlserver mysql服務(wù)器的主機(jī)名或ip地址
- db=vsftpd 指定連接msyql的數(shù)據(jù)庫名稱
- table=users 指定連接數(shù)據(jù)庫中的表名
- usercolumn=name 當(dāng)做用戶名的字段
- passwdcolumn=password 當(dāng)做用戶名字段的密碼
- crypt=2 密碼的加密方式為mysql password()函數(shù)加密
2.5.2.6 建立相應(yīng)用戶和修改vsftpd配置文件
#建立虛擬用戶映射的系統(tǒng)用戶及對應(yīng)的目錄 [root@centos7 ~]#useradd -s /sbin/nologin -d /data/ftproot -r vuser #centos7 需除去ftp根目錄的寫權(quán)限[root@centos7 ~]#mkdir -pv /data/ftproot/upload [root@centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload#確保/etc/vsftpd/vsftpd.conf中已經(jīng)啟用了以下選項 [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf #添加下面兩項 guest_enable=YES guest_username=vuser#修改下面一項,原系統(tǒng)用戶無法登錄 pam_service_name=vsftpd.mysql啟動vsftpd服務(wù) [root@centos7 ~]#systemctl enable --now vsftpd2.5.2.7 在FTP服務(wù)器上配置虛擬用戶具有不同的訪問權(quán)限
vsftpd可以在配置文件目錄中為每個用戶提供單獨(dú)的配置文件以定義其ftp服務(wù)訪問權(quán)限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可
#配置vsftpd為虛擬用戶使用配置文件目錄 [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf #添加如下選項 user_config_dir=/etc/vsftpd/conf.d/#創(chuàng)建所需要目錄,并為虛擬用戶提供配置文件 [root@centos7 ~]#mkdir /etc/vsftpd/conf.d/ #配置虛擬用戶的訪問權(quán)限 #虛擬用戶對vsftpd服務(wù)的訪問權(quán)限是通過匿名用戶的相關(guān)指令進(jìn)行的。如要讓用戶wang具有上傳文件的權(quán)限,可修改/etc/vsftpd/vusers.d/ftpuser1文件,在里面添加如下選項并設(shè)置為YES即可,只讀則設(shè)為NO#注意:需確保對應(yīng)的映射用戶對于文件系統(tǒng)有寫權(quán)限,允許1可讀寫,2只讀 [root@centos7 ~]#vim /etc/vsftpd/conf.d/ftpuser1 anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO} #登錄目錄改變至指定的目錄 local_root=/data/ftproot1[root@centos7 ~]#vim /etc/vsftpd/conf.d/ftpuser2 #登錄目錄改變至指定的目錄 local_root=/data/ftproot2#針對各個用戶建立對應(yīng)的數(shù)據(jù)目錄 [root@centos8 ~]#mkdir /data/ftproot1/ [root@centos8 ~]#mkdir /data/ftproot2/3 NFS 服務(wù)
NFS工作原理
NFS:Network File System 網(wǎng)絡(luò)文件系統(tǒng),基于內(nèi)核的文件系統(tǒng)。Sun 公司開發(fā),通過使用 NFS,用戶和程序可以像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件,基于RPC(Remote Procedure Call Protocol 遠(yuǎn)程過程調(diào)用)實現(xiàn)
RPC采用C/S模式,客戶機(jī)請求程序調(diào)用進(jìn)程發(fā)送一個有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行
NFS優(yōu)勢:節(jié)省本地存儲空間,將常用的數(shù)據(jù),如:/home目錄,存放在NFS服務(wù)器上且可以通過網(wǎng)絡(luò)訪問,本地終端將可減少自身存儲空間的使用
3.2 NFS軟件介紹
軟件包:nfs-utils(包括服務(wù)器和客戶端相關(guān)工具,CentOS8 最小化安裝時默認(rèn)沒有安裝)
相關(guān)軟件包:rpcbind(必須),tcp_wrappers
Kernel支持:nfs.ko
端口:2049(nfsd), 其它端口由portmap(111)分配
NFS服務(wù)主要進(jìn)程:
- rpc.nfsd 最主要的NFS進(jìn)程,管理客戶端是否可登錄
- rpc.mountd 掛載和卸載NFS文件系統(tǒng),包括權(quán)限管理
- rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
- rpc.statd 非必要,檢查文件一致性,可修復(fù)文
說明:CentOS 6 開始portmap進(jìn)程由rpcbind代替
日志:/var/lib/nfs/
NFS配置文件:
/etc/exports /etc/exports.d/*.exports3.3 NFS共享配置文件格
/dir 主機(jī)1(opt1,opt2) 主機(jī)2(opt1,opt2)...格式說明:
- 以#開始的行為注釋
- 主機(jī)格式:
- 每個條目指定目錄導(dǎo)出到的哪些主機(jī),及相關(guān)的權(quán)限和選項
范例:指明匿名用戶映射為特定用戶UID和組GID
[root@centos8 ~]#groupadd -r -g 80 www [root@centos8 ~]#useradd -r -g www -u 80 www[root@centos8 ~]#vim /etc/exports.d/test.exports /data/nfsdir2 10.0.0.27(rw,no_root_squash,all_squash,anonuid=80,anongid=80)[root@centos8 ~]#exportfs -r [root@centos8 ~]#exportfs -v3.4 NFS工具
3.4.1 rpcinfo
rpcinfo 工具可以查看RPC相關(guān)信息
查看注冊在指定主機(jī)的RPC程序
rpcinfo -p hostname查看RPC注冊程序
rpcinfo -s 10.0.0.283.4.2 exportfs
exportfs:可用于管理NFS導(dǎo)出的文件系統(tǒng)
常見選項:
-v #查看本機(jī)所有NFS共享 -r #重讀配置文件,并共享目錄 -a #輸出本機(jī)所有共享 -au #停止本機(jī)所有共享3.4.3 showmount
常見用法:
#查看遠(yuǎn)程主機(jī)的NFS共享 showmount -e hostname范例:
[root@centos7 ~]#showmount -e 10.0.0.28 Export list for 10.0.0.28: /data/nfsdir1 * /data/nfsdir2 10.0.0.273.4.4 mount.nfs
客戶端NFS掛載
NFS相關(guān)的掛載選項:man 5 nfs
fg #(默認(rèn))前臺掛載 bg #后臺掛載 hard #(默認(rèn))持續(xù)請求 soft #非持續(xù)請求 intr #和hard配合,請求可中斷 rsize #和wsize 一次讀和寫數(shù)據(jù)最大字節(jié)數(shù),rsize=32768 _netdev #無網(wǎng)絡(luò)連接不掛載 vers #指定版本,客戶端centos8默認(rèn)4.2 ,centos7默認(rèn)4.1 centos6默認(rèn)4.0提示:基于安全考慮,建議使用 nosuid,_netdev,noexec 掛載選項
3.5 自動掛載
可使用 autofs 服務(wù)按需要掛載外圍設(shè)備,NFS共享等,并在空閑5分鐘后后自動卸載
3.5.1 相關(guān)包和文件
軟件包:autofs
服務(wù)文件:/usr/lib/systemd/system/autofs.service
配置文件:/etc/auto.master
3.5.2 配置文件格式
參看幫助:man 5 autofs
所有導(dǎo)出到網(wǎng)絡(luò)中的NFS啟用特殊匹配 -host 至“browse”
范例:/net目錄可以自動掛載NFS共享
root@centos7 ~]#cd /net [root@centos7 net]#cd 10.0.0.28自動掛載資源有兩種格式:
- 相對路徑法:將mount point 路徑分成 dirname 和 basename 分別配置,可能會影響現(xiàn)有的目錄結(jié)構(gòu)
- 絕對路徑法:直接匹配全部的絕對路徑名稱,都寫入到指定的配置文件里,不會影響本地目錄結(jié)構(gòu)
3.5.2.1 相對路徑法
范例:相對路徑法(10.0.0.27/data/home----->/d1/d2/d3/d4)
[root@centos8 ~]#vim /etc/auto.master /d1/d2/d3 /etc/a.misc [root@centos8 ~]#vim /etc/a.misc d4 -fstype=nfs 10.0.0.27:/data/home [root@centos8 ~]#systemctl restart autofs.service [root@centos8 ~]#vim /etc/auto.master /misc /etc/auto.misc [root@centos8 ~]#vim /etc/auto.misc cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom范例:相對路徑法為支持通配符
vim /etc/auto.master /misc /etc/auto.misc vim /etc/auto.misc #表示/misc下面的子目錄和nfs共享/export目錄的子目錄同名 * server:/export/&3.5.2.2 絕對路徑法
范例:絕對路徑法(10.0.0.27/data/home----->/d1/d2/d3/d4)
[root@centos8 ~]#vim /etc/auto.master /- /etc/a.misc [root@centos8 ~]#vim /etc/a.misc /d1/d2/d3/d4 -fstype=nfs 10.0.0.27:/data/home [root@centos8 ~]#systemctl restart autofs.service3.7 實戰(zhàn)案例
范例:實現(xiàn)家目錄的漫游(數(shù)據(jù)的自動同步)
1.前期操作:
三臺機(jī)器全部安裝nfs yum -y install nfs-utils2.NFS server設(shè)置/data/home為共享目錄
[root@centos7 ~]#mkdir /data/home #[root@centos7 ~]#useradd -d /data/home/user1 -u 2000 user1 [root@centos7 ~]#vim /etc/exports /data/home *(rw,no_root_squash) [root@centos7 ~]#systemctl enable --now nfs-server [root@centos7 ~]#exportfs -r#檢查是否創(chuàng)建成功共享 [root@centos7 ~]#exportfs -v /data/home <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)3.拷貝server機(jī)器上的/home下數(shù)據(jù)到NFS server上
#[root@38client1 ~]#useradd -M -u 2000 user1 [root@38client1 ~]#rsync -a /home/ 10.0.0.27:/data/home/ [root@38client1 ~]#vim /etc/fstab 10.0.0.27:/data/home /home nfs _netdev 0 0 [root@38client1 ~]#mount -a#相對路徑法掛載 *[root@38client1 ~]#vim /etc/auto.master /home /etc/auto.home [root@38client1 ~]#vim /etc/auto.home * -fstype=nfs,vers=3 10.0.0.27:/data/home/0client2同樣操作 * #絕對路徑法掛載 *[root@48client1 ~]#vim /etc/auto.master /- /etc/auto.home *[root@48client1 ~]#vim /etc/auto.home /home/user1 -fstype=nfs,vers=3 nfsserver:/data/home/user14.測試NFS server服務(wù)器
#創(chuàng)建的數(shù)據(jù)表面看起來在/home下,實際是在/data/home下 [root@38client1 ~]#su - xu Last login: Thu Mar 11 17:28:14 CST 2021 on pts/0 [xu@38client1 ~]$pwd /home/xu [xu@38client1 ~]$touch xu.txt[root@centos7 ~]#ll /data/home/xu/ total 0 -rw-rw-r-- 1 xu xu 0 Mar 11 17:28 xu.txt3.7.1 目標(biāo)
將NFS的共享目錄,通過autofs 發(fā)布出來,做為遠(yuǎn)程主機(jī)用戶的家目錄
3.7.2 環(huán)境準(zhǔn)備
共三臺主機(jī) 一臺主機(jī) nfs server IP:10.0.0.27 另兩臺當(dāng) nfs client IP:10.0.0.38 IP:10.0.0.483.7.3 步驟
#在27機(jī)器上設(shè)置nfs共享 [root@centos7 ~]#yum -y install nfs-utils [root@centos7 ~]#mkdir /data/home [root@centos7 ~]#vim /etc/exports /data/home *(rw,no_root_squash) [root@centos7 ~]#systemctl enable --now nfs-server4 SAMBA 服務(wù)
4.1 SAMBA 服務(wù)簡介
SMB:Server Message Block 服務(wù)器消息塊,IBM發(fā)布,最早是DOS網(wǎng)絡(luò)文件共享協(xié)議,是私有協(xié)議
CIFS:common internet file system,微軟基于SMB發(fā)布
SAMBA:1991年Andrew Tridgell,實現(xiàn) windows和UNIX相通
官方網(wǎng)站:http://www.samba.org/
SAMBA的功能:
- 共享文件和打印,實現(xiàn)在線編輯
- 實現(xiàn)登錄SAMBA用戶的身份認(rèn)證
- 可以進(jìn)行NetBIOS名稱解析
- 外圍設(shè)備共享
Windows計算機(jī)網(wǎng)絡(luò)管理模式:
- 工作組WORKGROUP:計算機(jī)對等關(guān)系,帳號信息各自管理
- 域DOMAIN:C/S結(jié)構(gòu),帳號信息集中管理,DC,AD
4.2 SAMBA 軟件介紹
相關(guān)包:
- samba 提供smb服務(wù)器端
- samba-client 客戶端軟件
- samba-common 通用軟件
- cifs-utils smb客戶端工具
- samba-winbind 和AD相關(guān)
相關(guān)服務(wù)進(jìn)程:
- smbd 提供smb(cifs)服務(wù) TCP:139,445
- nmbd NetBIOS名稱解析 UDP:137,138
主配置文件:/etc/samba/smb.conf 幫助參看:man smb.conf
語法檢查: testparm [-v] [/etc/samba/smb.conf]
客戶端工具:smbclient,mount.cifs
范例:
dnf install samba systemctl start smb systemctl start nmb4.3 SAMBA客戶端工具
UNC路徑: Universal Naming Convention,通用命名規(guī)范,格式如下
\\sambaserver\sharename4.3.1 使用smbclient 訪問SAMBA服務(wù)器
smbclient -L instructor.example.com smbclient -L instructor.example.com -U smb用戶%password #可以使用-U選項來指定用戶%密碼,或通過設(shè)置和導(dǎo)出USER和PASSWD環(huán)境變量來指定 smbclient //instructor.example.com/shared -U smbuser1例: smbclient -L 10.0.0.28 -Usmbuser1%123456 smbclient //10.0.0.28/share -U smbuser1%1234564.3.2 掛載CIFS文件系統(tǒng)
范例:手動掛載
mount -o user=subuser1,password=123456 //server//shared /mnt/smb范例:開機(jī)自動掛載
[root@centos8 ~]#vim /etc/fstab //10.0.0.28/share /mnt/smb cifs username=smbuser1,password=123456 0 0 或 #可以用文件代替用戶名和密碼的輸入 //10.0.0.28/share /mnt/smb cifs cred=/etc/smbuser.txt 0 0 [root@centos8 ~]#vim /etc/smbuser.txt username=smbuser1 pass=123456[root@centos8 ~]#chmod 600 /etc/smbuser.txt [root@centos8 ~]#mount -a#此方法需要安裝cifs-utils包4.4 管理SAMBA用戶
4.4.1 實現(xiàn)samba用戶說明
- 包:samba-common-tools
- 工具:smbpasswd pdbedit
- 用戶數(shù)據(jù)庫:/var/lib/samba/private/passdb.tdb
說明:samba家目錄默認(rèn)共享,samba用戶須是Linux用戶,建議使用/sbin/nologin
4.4.2 管理用戶命令添加
samba用戶:
smbpasswd -a <user> pdbedit -a -u <user>修改用戶密碼:
smbpasswd <user>刪除用戶和密碼:
smbpasswd -x <user> pdbedit -x -u <user>查看samba用戶列表:
pdbedit -L -v范例: 創(chuàng)建samba用戶
#創(chuàng)建操作系統(tǒng)賬號 [root@mysql ~]#useradd smbuser1 [root@mysql ~]#useradd smbuser2 [root@mysql ~]#useradd smbuser3#將系統(tǒng)賬號加入smb數(shù)據(jù)庫中,使之稱為smb賬號 [root@mysql ~]#smbpasswd -a smbuser1 [root@mysql ~]#smbpasswd -a smbuser2 [root@mysql ~]#smbpasswd -a smbuser3[root@mysql ~]#pdbedit -L smbuser1:1001: smbuser3:1003: smbuser2:1002: [root@mysql ~]#pdbedit -L -v --------------- Unix username: smbuser1 NT username: Account Flags: [U ] User SID: S-1-5-21-2294771922-2251285063-641742858-1000 Primary Group SID: S-1-5-21-2294771922-2251285063-641742858-513 Full Name: Home Directory: \\mysql\smbuser1 HomeDir Drive: Logon Script: Profile Path: \\mysql\smbuser1\profile Domain: MYSQL Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Thu, 11 Mar 2021 22:10:53 CST Password can change: Thu, 11 Mar 2021 22:10:53 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF --------------- Unix username: smbuser3 NT username: Account Flags: [U ] User SID: S-1-5-21-2294771922-2251285063-641742858-1002 Primary Group SID: S-1-5-21-2294771922-2251285063-641742858-513 Full Name: Home Directory: \\mysql\smbuser3 HomeDir Drive: Logon Script: Profile Path: \\mysql\smbuser3\profile Domain: MYSQL Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Thu, 11 Mar 2021 22:11:40 CST Password can change: Thu, 11 Mar 2021 22:11:40 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF --------------- Unix username: smbuser2 NT username: Account Flags: [U ] User SID: S-1-5-21-2294771922-2251285063-641742858-1001 Primary Group SID: S-1-5-21-2294771922-2251285063-641742858-513 Full Name: Home Directory: \\mysql\smbuser2 HomeDir Drive: Logon Script: Profile Path: \\mysql\smbuser2\profile Domain: MYSQL Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Thu, 11 Mar 2021 22:11:33 CST Password can change: Thu, 11 Mar 2021 22:11:33 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF范例:刪除文件管理器緩存,登錄新用戶
C:\Users\33173>net use 會記錄新的網(wǎng)絡(luò)連接。狀態(tài) 本地 遠(yuǎn)程 網(wǎng)絡(luò)------------------------------------------------------------------------------- OK Y: \\172.16.0.253\linux43 Microsoft Windows Network OK Z: \\172.16.0.254\linux43 Microsoft Windows Network OK \\10.0.0.28\IPC$ Microsoft Windows Network 命令成功完成。C:\Users\33173>net use \\10.0.0.28\IPC$ /del \\10.0.0.28\IPC$ 已經(jīng)刪除。查看samba服務(wù)器狀態(tài):
smbstatus4.5 SAMBA服務(wù)器配置
samba 配置文件 /etc/samba/smb.conf 格式 ,使用.ini文件的格式
幫助:man smb.conf
用 [ ] 分成以下幾部分
- 全局設(shè)置:
- 特定共享設(shè)置:
samba配置中的宏定義:
%m 客戶端主機(jī)的NetBIOS名 %M 客戶端主機(jī)的FQDN %H 當(dāng)前用戶家目錄路徑 %U 當(dāng)前用戶的用戶名 %g 當(dāng)前用戶所屬組 %h samba服務(wù)器的主機(jī)名 %L samba服務(wù)器的NetBIOS名 %I 客戶端主機(jī)的IP,是i的大寫字母 %T 當(dāng)前日期和時間 %S 可登錄的用戶名4.5.1 SAMBA服務(wù)器全局配置
- workgroup 指定工作組名稱
- server string 主機(jī)注釋信息
- netbios name 指定NetBIOS名,可以被SAMBA客戶端使用,但不支持ping
注意:netbios name需要啟動nmb服務(wù)
[global] workgroup = workgroup netbios name = smbserver #此設(shè)置需要啟動nmb服務(wù)才可能生效- interfaces 指定服務(wù)偵聽接口和IP
- hosts allow 可用逗號,空格,或tab分隔,默認(rèn)允許所有主機(jī)訪問,也可在每個共享獨(dú)立配置,如在[global]設(shè)置,將應(yīng)用并覆蓋所有共享設(shè)置,可以是以下格式:
范例:
hosts allow = 172.16. .example.com- hosts deny 拒絕指定主機(jī)訪問,格式和hosts allow 相同
- config file=/etc/samba/conf.d/%U 用戶獨(dú)立的配置文件
- Log file=/var/log/samba/log.%I 不同客戶機(jī)采用不同日志
- log level = 2 日志級別,默認(rèn)為0,不記錄日志
范例:
[global] Log file=/var/log/samba/log.%I log level = 2- max log size=50 日志文件達(dá)到50K,將輪循rotate,單位KB
- Security三種認(rèn)證方式:
user:samba用戶(采有l(wèi)inux用戶,samba的獨(dú)立口令)
share:匿名(CentOS7不再支持),已不建議使用
server:已不建議使用 - passdb backend = tdbsam 密碼數(shù)據(jù)庫格式
4.5.2 配置特定目錄共享
每個共享目錄應(yīng)該有獨(dú)立的[ ]部分
[共享名稱] #遠(yuǎn)程網(wǎng)絡(luò)看到的共享名稱 comment #注釋信息 path #所共享的目錄路徑 public #能否被guest訪問的共享,默認(rèn)no,和guest=ok 類似 browsable #是否允許所有用戶瀏覽此共享,默認(rèn)為yes,no為隱藏 writable=yes #可以被所有用戶讀寫,默認(rèn)為no read only=no #和writable=yes等價,如與以上設(shè)置沖突,放在后面的設(shè)置生效,默認(rèn)只讀 write list #用戶,@組名,+組名 之間用逗號分隔,如:writable=no,列表中用戶或組可讀寫,不在列表中用戶只讀 valid users #特定用戶才能訪問該共享,如為空,將允許所有用戶,用戶名之間用空格分隔范例:基于特定用戶和組的共享
vim /etc/samba/smb.conf [share] path = /data/dir valid users=wang,@admins writeable = no browseable = no4.6 實戰(zhàn)案例
4.6.1 實戰(zhàn)案例:利用SAMBA實現(xiàn)指定目錄共享
范例:利用samba實現(xiàn)特定目錄(/data/smbshare)的共享
#在samba服務(wù)器上安裝samba包 [root@centos8 ~]#yum -y install samba#在samba服務(wù)器上創(chuàng)建操作系統(tǒng)賬號 [root@mysql ~]#useradd smbuser1 [root@mysql ~]#useradd smbuser2 [root@mysql ~]#useradd smbuser3#將系統(tǒng)賬號加入smb數(shù)據(jù)庫中,使之稱為smb賬號 [root@mysql ~]#smbpasswd -a smbuser1 [root@mysql ~]#smbpasswd -a smbuser2 [root@mysql ~]#smbpasswd -a smbuser3#samba服務(wù)器配置 [root@centos8 ~]#vim /etc/samba/smb.conf [share] #共享名 path=/data/smbshare #真實路徑 write list=smbuser1,smbuser2 #設(shè)置smbuser1,2可寫權(quán)限#給文件夾設(shè)置權(quán)限 [root@centos8 ~]#chmod 777 /data/smbshare/ [root@centos8 ~]#systemctl restart smb#前提:client機(jī)器安裝 yum -y install samba-client yum -y install cifs-utils#在client機(jī)器上測試smbuser3,發(fā)現(xiàn)無法上傳文件 [root@centos8 ~]#smbclient //10.0.0.28/share -U smbuser1%123456 Try "help" to get a list of possible commands. smb: \> put anaconda-ks.cfg putting file anaconda-ks.cfg as \anaconda-ks.cfg (14.6 kb/s) (average 14.6 kb/s) smb: \> ls. D 0 Fri Mar 12 09:27:27 2021.. D 0 Fri Mar 12 09:08:34 2021a.txt N 0 Fri Mar 12 09:11:10 2021b.txt N 0 Fri Mar 12 09:11:13 2021新建文本文檔.txt A 12 Fri Mar 12 09:18:43 2021anaconda-ks.cfg A 1554 Fri Mar 12 09:27:27 202152403200 blocks of size 1024. 52004772 blocks available smb: \> exit[root@centos8 ~]#smbclient //10.0.0.28/share -U smbuser3%123456 Try "help" to get a list of possible commands. smb: \> !ls anaconda-ks.cfg smb: \> ls. D 0 Fri Mar 12 09:27:27 2021.. D 0 Fri Mar 12 09:08:34 2021a.txt N 0 Fri Mar 12 09:11:10 2021b.txt N 0 Fri Mar 12 09:11:13 2021新建文本文檔.txt A 12 Fri Mar 12 09:18:43 2021anaconda-ks.cfg A 1554 Fri Mar 12 09:27:27 202152403200 blocks of size 1024. 52004792 blocks available smb: \> put anaconda-ks.cfg NT_STATUS_ACCESS_DENIED opening remote file \anaconda-ks.cfg smb: \> exit#在linux上實現(xiàn)映射,在client機(jī)器上進(jìn)行 #臨時掛載 [root@centos8 ~]#mount -o username=smbuser1,password=123456 //10.0.0.28/share /mnt/smb#持久掛載 [root@centos8 ~]#vim /etc/fstab //10.0.0.28/share /mnt/smb cifs username=smbuser1,password=123456 0 0 或 //10.0.0.28/share /mnt/smb cifs cred=/etc/smbuser.txt 0 0 [root@centos8 ~]#vim /etc/smbuser.txt username=smbuser1 pass=123456[root@centos8 ~]#chmod 600 /etc/smbuser.txt [root@centos8 ~]#mount -a#測試,client端smbuser1創(chuàng)建文件 [root@centos8 ~]#ls /mnt/smb anaconda-ks.cfg a.txt b.txt 新建文本文檔.txt [root@centos8 ~]#touch /mnt/smb/test.sh#檢驗,server端查看 [root@centos8 ~]#ls /data/smbshare/ anaconda-ks.cfg a.txt b.txt test.sh 新建文本文檔.txt4.6.2 實戰(zhàn)案例2:實現(xiàn)不同samba用戶訪問相同的samba共享,實現(xiàn)不同的配置
在4.6.1的基礎(chǔ)上進(jìn)行補(bǔ)充操作
#修改samba配置文件 [root@centos8 ~]#vim /etc/samba/smb.conf #在global下加一行 [global] config file= /etc/samba/conf.d/%U#針對smb1用戶創(chuàng)建單獨(dú)的配置文件 vim /etc/samba/conf.d/smbuser1 [share] path=/opt/smbshare1#重啟服務(wù) systemctl restart smb nmb#用戶smb1,smb2,smb3訪問share共享目錄,看到目錄是不同目錄 smbclient //10.0.0.28/share -Usmbuser1%123456 smbclient //10.0.0.28/share -Usmbuser2%123456 smbclient //10.0.0.28/share -Usmbuser3%1234565 數(shù)據(jù)的實時同步
在生產(chǎn)環(huán)境,有時會需要兩臺主機(jī)的特定目錄實現(xiàn)實時同步。比如,將NFS共享目錄的數(shù)據(jù)文件,自動實時同步到備份服務(wù)器特定目錄中
5.1 實時同步技術(shù)介紹
實現(xiàn)實時同步的方法
- inotify + rsync 方式實現(xiàn)數(shù)據(jù)同步
- sersync :前金山公司周洋(花椒直播)在 inotify 軟件基礎(chǔ)上進(jìn)行開發(fā)的,功能更加強(qiáng)大
工作原理:
- 要利用監(jiān)控服務(wù)(inotify),監(jiān)控同步數(shù)據(jù)服務(wù)器目錄中信息的變化
- 發(fā)現(xiàn)目錄中數(shù)據(jù)產(chǎn)生變化,就利用rsync服務(wù)推送到備份服務(wù)器上
inotify:
異步的文件系統(tǒng)事件監(jiān)控機(jī)制,利用事件驅(qū)動機(jī)制,而無須通過諸如cron等的輪詢機(jī)制來獲取事件,linux內(nèi)核從2.6.13起支持 inotify,通過inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動等各種事件
實現(xiàn)inotify軟件:
- inotify-tools
- sersync
- lrsyncd
inotify+rsync使用方式
- inotify 對同步數(shù)據(jù)目錄信息的監(jiān)控
- rsync 完成對數(shù)據(jù)的同步
- 利用腳本進(jìn)行結(jié)合
范例:實現(xiàn)數(shù)據(jù)的備份
目標(biāo):實現(xiàn)10.0.0.58與10.0.0.38/data/wordpress數(shù)據(jù)同步 #備份服務(wù)器操作 [root@backup ~]#ssh-keygen [root@backup ~]#ssh-copy-id 10.0.0.38 [root@backup ~]#crontab -e * * * * * /usr/bin/rsync -a --delete 10.0.0.38:/data/wordpress/ /data/wordpress-backup/5.2 實現(xiàn) inotify
5.2.1 內(nèi)核支持
內(nèi)核是否支持inotify
Linux支持inotify的內(nèi)核最小版本為 2.6.13,參看man 7 inotify
#列出下面的文件,說明服務(wù)器內(nèi)核支持inotify [root@centos8 ~]#ls -l /proc/sys/fs/inotify -rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events -rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances -rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches [root@centos8 ~]#cat /proc/sys/fs/inotify/max_queued_events 16384 [root@centos8 ~]#cat /proc/sys/fs/inotify/max_user_instances 128 [root@centos8 ~]#cat /proc/sys/fs/inotify/max_user_watches 8192inotify內(nèi)核參數(shù)說明:
- max_queued_events:inotify 事件隊列最大長度,如值太小會出現(xiàn) Event Queue Overflow 錯誤,默認(rèn)值:16384, 生產(chǎn)環(huán)境建議調(diào)大,比如:327679
- max_user_instances:每個用戶創(chuàng)建inotify實例最大值,默認(rèn)值:128
- max_user_watches:可以監(jiān)視的文件的總數(shù)量(inotifywait 單進(jìn)程),默認(rèn)值:8192,建議調(diào)大
范例:
[root@data-centos8 ~]#vim /etc/sysctl.conf fs.inotify.max_queued_events=66666 fs.inotify.max_user_watches=100000 [root@centos8 ~]#sysctl -p fs.inotify.max_queued_events = 66666 fs.inotify.max_user_watches = 100000 [root@centos8 ~]#cat /proc/sys/fs/inotify/* 66666 128 1000005.2.2 inotify-tools工具
inotify-tools參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
安裝inotify-tools:基于epel源,安裝在數(shù)據(jù)服務(wù)器上
yum -y install inotify-toolsinotify-tools包主要工具:
- inotifywait: 在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open ,close,delete等)發(fā)生,常用于實時同步的目錄監(jiān)控
- inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計
inotifywait 命令
格式:
常用選項:
-m, --monitor 始終保持事件監(jiān)聽 -d, --daemon 以守護(hù)進(jìn)程方式執(zhí)行,和-m相似,配合-o使用 -r, --recursive 遞歸監(jiān)控目錄數(shù)據(jù)信息變化 -q, --quiet 輸出少量事件信息 --exclude <pattern> 指定排除文件或目錄,使用擴(kuò)展的正則表達(dá)式匹配的模式實現(xiàn) --excludei <pattern> 和exclude相似,不區(qū)分大小寫 -o, --outfile <file> 打印事件到文件中,相當(dāng)于標(biāo)準(zhǔn)正確輸出,注意:使用絕對路徑 -s, --syslogOutput 發(fā)送錯誤到syslog相當(dāng)于標(biāo)準(zhǔn)錯誤輸出 --timefmt <fmt> 指定時間輸出格式 --format <fmt> 指定的輸出格式;即實際監(jiān)控輸出內(nèi)容 -e 指定監(jiān)聽指定的事件,如果省略,表示所有事件都進(jìn)行監(jiān)聽inotifywait 的–timefmt 時間格式
參考 man 3 strftim
范例:
--timefmt "%Y-%m-%d %H:%M:%S"inotifywait 的 --format 格式定義
%T #輸出時間格式中定義的時間格式信息,通過 --timefmt option 語法格式指定時間信息 %w #事件出現(xiàn)時,監(jiān)控文件或目錄的名稱信息,相當(dāng)于dirname %f #事件出現(xiàn)時,將顯示監(jiān)控目錄下觸發(fā)事件的文件或目錄信息,否則為空,相當(dāng)于basename %e #顯示發(fā)生的事件信息,不同的事件默認(rèn)用逗號分隔 %Xe #顯示發(fā)生的事件信息,不同的事件指定用X進(jìn)行分隔范例:
--format "%T %w%f event: %;e" --format '%T %w %f'inotifywait -e 選項指定的事件類型
create #文件或目錄創(chuàng)建 delete #文件或目錄被刪除 modify #文件或目錄內(nèi)容被寫入 attrib #文件或目錄屬性改變 close_write #文件或目錄關(guān)閉,在寫入模式打開之后關(guān)閉的 close_nowrite #文件或目錄關(guān)閉,在只讀模式打開之后關(guān)閉的 close #文件或目錄關(guān)閉,不管讀或是寫模式 open #文件或目錄被打開 lsdir #瀏覽目錄內(nèi)容 moved_to #文件或目錄被移動到監(jiān)控的目錄中 moved_from #文件或目錄從監(jiān)控的目錄中被移動 move #文件或目錄不管移動到或是移出監(jiān)控目錄都觸發(fā)事件 access #文件或目錄內(nèi)容被讀取 delete_self #文件或目錄被刪除,目錄本身被刪除 unmount #取消掛載范例:
-e create,delete,moved_to,close_write,attrib范例:使用inotifywait
#監(jiān)控一次性事件 inotifywait /data/www Setting up watches. Watches established. /data/www/ CREATE f1.txt#持續(xù)前臺監(jiān)控 inotifywait -mrq /data/www --exclude=".*\.swx|\.swp" /data/www/ OPEN f1.txt /data/www/ ACCESS f1.txt /data/www/ CLOSE_NOWRITE,CLOSE f1.txt#持續(xù)后臺監(jiān)控,并記錄日志 inotifywait -o /root/inotify.log -drq /data/wordpress --timefmt "%Y-%m-%d %H:%M:%S" --format "%T %w%f event: %e"#持續(xù)前臺監(jiān)控特定事件 inotifywait -mrq /data/www --timefmt "%F %H:%M:%S" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib5.3 rsync
rsync 常用于做為 linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具,實現(xiàn)遠(yuǎn)程同步,支持本地復(fù)制,或者與其他SSH、rsync主機(jī)同步數(shù)據(jù),支持增量備份,配合任務(wù)計劃,rsync能實現(xiàn)定時或間隔同步,配合inotify或sersync,可以實現(xiàn)觸發(fā)式的實時數(shù)據(jù)同步
官方網(wǎng)站: http://rsync.samba.org/
軟件包:rsync,rsync-daemon(CentOS 8)
服務(wù)文件:/usr/lib/systemd/system/rsyncd.service
配置文件:/etc/rsyncd.conf
端口:873/tcp
5.3.1 rsync命令
rsync 格式
#Local: rsync [OPTION...] SRC... [DEST]#Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST#Access via rsync daemon:Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DESTThe ':' usages connect via remote shell, while '::' & 'rsync://' usages connect to an rsync daemon, and require SRC or DEST to start with a module name.rsync有三種工作方式:
前兩者的本質(zhì)是通過本地或遠(yuǎn)程shell,而第3種方式則是讓遠(yuǎn)程主機(jī)上運(yùn)行rsyncd服務(wù),使其監(jiān)聽在一個端口上,等待客戶端的連接。
常見選項:
-v:顯示rsync過程中詳細(xì)信息。可以使用"-vvvv"獲取更詳細(xì)信息。 -P:顯示文件傳輸?shù)倪M(jìn)度信息。(實際上"-P"="--partial --progress",其中的"--progress"才是顯 示進(jìn)度信息的)。 -n --dry-run :僅測試傳輸,而不實際傳輸。常和"-vvvv"配合使用來查看rsync是如何工作的。 -a --archive :歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。 -r --recursive:遞歸到目錄中去。 -t --times:保持mtime屬性。強(qiáng)烈建議任何時候都加上"-t",否則目標(biāo)文件mtime會設(shè)置為系統(tǒng)時間, 導(dǎo)致下次更新:檢查出mtime不同從而導(dǎo)致增量傳輸無效。 -o --owner:保持owner屬性(屬主)。 -g --group:保持group屬性(屬組)。 -p --perms:保持perms屬性(權(quán)限,不包括特殊權(quán)限)。 -D :是"--device --specials"選項的組合,即也拷貝設(shè)備文件和特殊文件。 -l --links:如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對象 -z :傳輸時進(jìn)行壓縮提高效率 -R --relative:使用相對路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發(fā)送給服務(wù)端, 包括它們的屬性。用法見下文示例。 --size-only :默認(rèn)算法是檢查文件大小和mtime不同的文件,使用此選項將只檢查文件大小。 -u --update :僅在源mtime比目標(biāo)已存在文件的mtime新時才拷貝。注意,該選項是接收端判斷的,不會 影響刪除行為。 -d --dirs :以不遞歸的方式拷貝目錄本身。默認(rèn)遞歸時,如果源為"dir1/file1",則不會拷貝dir1 目錄,使用該選項將拷貝dir1但不拷貝file1。 --max-size :限制rsync傳輸?shù)淖畲笪募笮 ?梢允褂脝挝缓缶Y,還可以是一個小數(shù)值(例如:"-- max-size=1.5m") --min-size :限制rsync傳輸?shù)淖钚∥募笮 _@可以用于禁止傳輸小文件或那些垃圾文件。 --exclude :指定排除規(guī)則來排除不需要傳輸?shù)奈募?--delete :以SRC為主,對DEST進(jìn)行同步。多則刪之,少則補(bǔ)之。注意"--delete"是在接收端執(zhí)行 的,所以它是在:exclude/include規(guī)則生效之后才執(zhí)行的。 -b --backup :對目標(biāo)上已存在的文件做一個備份,備份的文件名后默認(rèn)使用"~"做后綴。 --backup-dir:指定備份文件的保存路徑。不指定時默認(rèn)和待備份文件保存在同一目錄下。 -e :指定所要使用的遠(yuǎn)程shell程序,默認(rèn)為ssh。 --port :連接daemon時使用的端口號,默認(rèn)為873端口。 --password-file:daemon模式時的密碼文件,可以從中讀取密碼實現(xiàn)非交互式。注意,這不是遠(yuǎn)程 shell認(rèn)證的密碼,而是rsync模塊認(rèn)證的密碼。 -W --whole-file:rsync將不再使用增量傳輸,而是全量傳輸。在網(wǎng)絡(luò)帶寬高于磁盤帶寬時,該選項比增 量傳輸更高效。 --existing :要求只更新目標(biāo)端已存在的文件,目標(biāo)端還不存在的文件不傳輸。注意,使用相對路徑時如 果上層目錄不存在也不會傳輸。 --ignore-existing:要求只更新目標(biāo)端不存在的文件。和"--existing"結(jié)合使用有特殊功能,見下文 示例。 --remove-source-files:要求刪除源端已經(jīng)成功傳輸?shù)奈募?范例:兩種格式訪問 rsync daemon 服務(wù)
5.3.2 以獨(dú)立服務(wù)方式運(yùn)行rsync并實現(xiàn)驗證功能
范例:以獨(dú)立服務(wù)方式運(yùn)行 rsync
[root@backup ~]#dnf install -y rsync-daemon #創(chuàng)建rsync服務(wù)器的配置文件 [root@backup ~]#vim /etc/rsyncd.con uid = root #提定以哪個用戶來訪問共享目錄,將之指定為生成的文件所有者,默認(rèn)為nobody gid = root #默認(rèn)為nobody #port = 874 可指定非標(biāo)準(zhǔn)端口,默認(rèn)873/tcp #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 = 10.0.0.0/24 [backup] #每個模塊名對應(yīng)一個不同的path目錄,如果同名后面模塊生效 path = /data/backup/ comment = backup dir read only = no #默認(rèn)是yes,即只讀 auth users = rsyncuser #默認(rèn)anonymous可以訪問rsync服務(wù)器 secrets file = /etc/rsync.pas#服務(wù)器端生成驗證文件 [root@backup ~]#echo "rsyncuser:123456" > /etc/rsync.pas [root@backup ~]#chmod 600 /etc/rsync.pas#服務(wù)器端啟動rsync服務(wù) [root@backup ~]#rsync --daemon #可加入/etc/rc.d/rc.local實現(xiàn) 開機(jī)啟動 [root@backup ~]#systemctl start rsyncd #CentOS 7 以上版本#客戶端配置密碼文件 #也可將密碼賦值給環(huán)境變量RSYNC_PASSWORD變量,但不安全 #export RSYNC_PASSWORD=magedu [root@data-centos8 ~]#echo "123456" > /etc/rsync.pas [root@data-centos8 ~]#chmod 600 /etc/rsync.pas#查看遠(yuǎn)程rsync服務(wù)器的模塊信息 [root@data-server ~]#rsync rsync://rsync服務(wù)器IP backup backup dir#交互式驗證查看具體模塊內(nèi)的文件 [root@data-server ~]#rsync rsync://rsyncuser@rsync服務(wù)器IP/backup Password:#非交互式查看共享目錄 [root@data-server ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@rsync服務(wù)器IP/backup#客戶端測試同步數(shù)據(jù) [root@data-centos8 ~]#rsync -avz --delete --password-file=/etc/rsync.pas /data/wordpress/ rsyncuser@rsync服務(wù)器IP::backup [root@data-centos8 ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@rsync服務(wù)器IP::backup /data/wordpress/5.4 inotify+rsync+shell 腳本實現(xiàn)實時數(shù)據(jù)同步
按 5.3 搭建好 rsyncd的備份服務(wù)器,在數(shù)據(jù)服務(wù)器上創(chuàng)建inotify_rsync.sh腳本
注意: 此腳本執(zhí)行前先確保兩主機(jī)初始數(shù)據(jù)處于同步狀態(tài),此腳本實現(xiàn)后續(xù)的數(shù)據(jù)同步
[root@data-server ]#cat inotify_rsync.sh #!/bin/bash SRC='/data/wordpress/' DEST='rsyncuser@10.0.0.58::backup' rpm -q rsync &> /dev/null || yum -y install rsync inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;doFILEPATH=${DIR}${FILE}rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log done#后臺運(yùn)行腳本,持續(xù)運(yùn)行 [root@data-server ]#nohup bash inotify_rsync.sh &> /dev/null &#查看文件傳輸日志 [root@data-centos8 ~]#tail -f /var/log/changelist.log5.5 sersync 實現(xiàn)實時數(shù)據(jù)同步
5.5.1 sersync 介紹
sersync類似于inotify,同樣用于監(jiān)控,但它克服了inotify的缺點
inotify最大的不足是會產(chǎn)生重復(fù)事件,或者同一個目錄下多個文件的操作會產(chǎn)生多個事件,例如,當(dāng)監(jiān)控目錄中有5個文件時,刪除目錄時會產(chǎn)生6個監(jiān)控事件,從而導(dǎo)致重復(fù)調(diào)用rsync命令。另外比如:vim文件時,inotify會監(jiān)控到臨時文件的事件,但這些事件相對于rsync來說是不應(yīng)該被監(jiān)控的
sersync 優(yōu)點:
- sersync是使用c++編寫,而且對linux系統(tǒng)文件系統(tǒng)產(chǎn)生的臨時文件和重復(fù)的文件操作進(jìn)行過濾,所以在結(jié)合rsync同步的時候,節(jié)省了運(yùn)行時耗和網(wǎng)絡(luò)資源。因此更快。
- sersync配置很簡單,其中提供了靜態(tài)編譯好的二進(jìn)制文件和xml配置文件,直接使用即可
- sersync使用多線程進(jìn)行同步,尤其在同步較大文件時,能夠保證多個服務(wù)器實時保持同步狀態(tài)
- sersync有出錯處理機(jī)制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則按設(shè)定時長對同步失敗的文件重新同步
- sersync不僅可以實現(xiàn)實時同步,另外還自帶crontab功能,只需在xml配置文件中開啟,即也可以按要求隔一段時間整體同步一次,而無需再額外配置crontab功能
- sersync 可以二次開發(fā)
sersync項目地址: https://code.google.com/archive/p/sersync/
sersync下載地址:https://code.google.com/archive/p/sersync/downloads
5.5.2 基于rsync daemon 實現(xiàn) sersync
[root@backup-centos8 ~]#dnf install rsync-daemon #創(chuàng)建rsync服務(wù)器的配置文件 [root@centos8 ~]#vi /etc/rsyncd.conf uid = root #提定以哪個用戶來訪問共享目錄,將之指定為生成的文件所有者,默認(rèn)為nobody gid = root #默認(rèn)為nobody #port = 874 可指定非標(biāo)準(zhǔn)端口,默認(rèn)873/tcp #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 = 10.0.0.0/24 [backup] #每個模塊名對應(yīng)一個不同的path目錄,如果同名后面模塊生效 path = /data/backup/ comment = backup dir read only = no #默認(rèn)是yes,即只讀 auth users = rsyncuser #默認(rèn)anonymous可以訪問rsync服務(wù)器 secrets file = /etc/rsync.pas#服務(wù)器端準(zhǔn)備目錄 [root@backup-centos8 ~]#mkdir -pv /data/backup#服務(wù)器端生成驗證文件 [root@backup-centos8 ~]#echo "rsyncuser:123456" > /etc/rsync.pas [root@backup-centos8 ~]#chmod 600 /etc/rsync.pas#服務(wù)器端啟動rsync服務(wù) [root@backup-centos8 ~]#rsync --daemon #可加入/etc/rc.d/rc.local實現(xiàn) 開機(jī)啟動 [root@backup-centos8 ~]#systemctl start rsyncd #CentOS 7 以上版本#客戶端配置密碼文件 #也可將密碼賦值給環(huán)境變量RSYNC_PASSWORD變量,但不安全 #export RSYNC_PASSWORD=123456 [root@data-centos8 ~]#echo "123456" > /etc/rsync.pas [root@data-centos8 ~]#chmod 600 /etc/rsync.pas #此為必要項,權(quán)限必須修改#交互式驗證查看具體模塊內(nèi)的文件 [root@data-server ~]#rsync rsync://rsync服務(wù)器IP backup backup dir#非交互式查看共享目錄 [root@data-server ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@rsync服務(wù)器IP/backup[root@data-server ~]#wget https://storage.googleapis.com/google-code-archivedownloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz [root@data-server ~]#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local [root@data-server local]#ln -s /usr/local/GNU-Linux-x86/sersync2 /usr/bin#確認(rèn)安裝rsync客戶端工具 [root@data-server ~]#rpm -q rsync &> /dev/null || dnf -y install rsync#修改sersync配置文件 [root@data-server local]#vim /usr/local/GNU-Linux-x86/confxml.xml <?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/> # 是否開啟調(diào)試模式<fileSystem xfs="false"/> <filter start="false"> #不開啟文件過濾功能,當(dāng)為true時,以下類型的文件將不同 步<exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify> # 監(jiān)控事件,默認(rèn)監(jiān)控 delete/close_write/moved_from/moved_to/create folder<delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="true"/> #修改此行為true,文件屬性變化后也會同步<modify start="false"/></inotify><sersync> # rsync命令的配置段<localpath watch="/data/www"> #修改此行,需要同步的源目錄或文件,建議同步 目錄<remote ip="備份服務(wù)器IP" name="backup"/> #修改此行,指定備份服務(wù)器地址和rsync daemon的模塊名,如果下面開啟了ssh start,此時name為遠(yuǎn)程shell方式運(yùn)行時的目標(biāo)目錄<!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync> <commonParams params="-artuz"/> # 指定rsync選項<auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/> #修 改此行為true,指定備份服務(wù)器的rsync配置的用戶和密碼文件<userDefinedPort start="false" port="874"/><!-- port=874 -->#指定rsync的 非標(biāo)準(zhǔn)端口號<timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/> #默認(rèn)使用rsync daemon運(yùn)行rsync命令,true為使用遠(yuǎn)程shell模 式</rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> #錯誤重傳及日志文件路徑<crontab start="false" schedule="600"><!--600mins--> #不開啟crontab功能<crontabfilter start="false"> #不開啟crontab定時傳輸?shù)暮Y選功能<exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync> #####################################以下行不需要修改 ####################################<plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\.php"/><include expression="(.*)\.sh"/></filter></plugin><plugin name="socket"><localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath></plugin><plugin name="refreshCDN"><localpath watch="/data0/htdocs/cms.xoyo.com/site/"><cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/><sendurl base="http://pic.xoyo.com/cms"/><regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0- 9]*).xoyo.com/images"/></localpath></plugin> </head>#查看幫助 [root@data-server ~]#sersync2 -h set the system param execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events parse the command param _______________________________________________________ 參數(shù)-d:啟用守護(hù)進(jìn)程模式 參數(shù)-r:在監(jiān)控前,將監(jiān)控目錄與遠(yuǎn)程主機(jī)用rsync命令推送一遍 c參數(shù)-n: 指定開啟守護(hù)線程的數(shù)量,默認(rèn)為10個 參數(shù)-o:指定配置文件,默認(rèn)使用當(dāng)前工作目錄下的confxml.xml文件 參數(shù)-m:單獨(dú)啟用其他模塊,使用 -m refreshCDN 開啟刷新CDN模塊 參數(shù)-m:單獨(dú)啟用其他模塊,使用 -m socket 開啟socket模塊 參數(shù)-m:單獨(dú)啟用其他模塊,使用 -m http 開啟http模塊 不加-m參數(shù),則默認(rèn)執(zhí)行同步程序#以后臺方式執(zhí)行同步 [root@data-server ~]#sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml5.5.3 基于遠(yuǎn)程shell 實現(xiàn) sersync
#不需要配置rsync daemon,只需要配置基于key驗證的ssh即可 [root@data-server ~]#ssh-keygen [root@data-server ~]#ssh-copy-id backup-server#下載sersync,并拷貝至相應(yīng)的目錄,設(shè)置PATH變量同5.5.2#修改sersync配置文件 <?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="false"/><filter start="false"><exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="true"/> #修改此行為true<modify start="false"/></inotify><sersync><localpath watch="/data/www"> #修改此行,指定源數(shù)據(jù)目錄<remote ip="備份服務(wù)器IP" name="/data/backup"/> #修改此行指定備份服務(wù)器地址和備 份目標(biāo)目錄<!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="false" users="root" passwordfile="/etc/rsync.pas"/> #必須修 改此行,不啟用認(rèn)證<userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="true"/> #修改此行為true,使用遠(yuǎn)程shell方式的rsync連接方式,無需在目標(biāo)主機(jī)上配置啟動rsync daemon服務(wù)#####################################以下行不需要修改 ####################################</rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync> #將中間的行可以刪除 </head>[root@data-server ~]#/usr/bin/sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml5.6 實戰(zhàn)案例:實現(xiàn)基于分布式的LAMP架構(gòu),并將NFS實時同步到備份服務(wù)器
綜合項目:NFS服務(wù)實現(xiàn)基于共享存儲的LAMP架構(gòu)
數(shù)據(jù)庫操作:
[root@mysql ~]#dnf -y install mysql-server [root@mysql ~]#systemctl enable --now mysqld [root@mysql ~]#mysql mysql> create database wordpress; mysql> create user wordpress@'10.0.0.%' identified by '123456'; mysql> grant all on wordpress.* to wordpress@'10.0.0.%';NFS server操作
[root@nfs-server ~]#mkdir /data/wordpress [root@nfs-server ~]#chmod 777 /data/wordpress [root@nfs-server ~]#vim /etc/exports /data/wordpress 10.0.0.0/24(rw,root_squash) [root@nfs-server ~]#systemctl enable --now nfs-server [root@nfs-server ~]#exportfs -r [root@nfs-server ~]#exportfs -v /data/wordpress10.0.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash) /data/wordpressLAP服務(wù)器操作
[root@LAP1 ~]#dnf -y install httpd php-fpm php-mysqlnd php-json nfs-utils[root@LAP1 ~]#systemctl enable --now httpd php-fpm [root@LAP1 ~]#wget https://cn.wordpress.org/latest-zh_CN.zip [root@LAP1 ~]#unzip latest-zh_CN.zip #拷貝wordpress主程序至共享目錄下 [root@LAP1 ~]#mv wordpress/* /var/www/html/ [root@LAP1 ~]#chown -R apache.apache /var/www/html[root@LAP1 ~]#cd /var/www/html/wp-content/ 網(wǎng)站編寫一篇帶圖文章發(fā)布 [root@LAP1 wp-content]#ls index.php languages plugins themes upgrade uploads [root@LAP1 wp-content]#rsync -a /var/www/html/wp-content/uploads/ 10.0.0.38:/data/wordpress/#掛載 [root@LAP1 wp-content]#vim /etc/fstab 10.0.0.38:/data/wordpress /var/www/html/wp-content/uploads/ nfs _netdev 0 0 [root@LAP1 ~]#yum -y install nfs-utils------------------------------------- #拷貝LAP1(38)/var/www/html/下數(shù)據(jù) [root@LAP2 ~]#rsync -a /var/www/html/ 10.0.0.58:/var/www/html/ #刪除上傳的資源(uploads/下數(shù)據(jù)) [root@LAP2 ~]#rm -rf /var/www/html/wp-content/uploads/* #掛載 [root@LAP2 wp-content]#vim /etc/fstab 10.0.0.38:/data/wordpress /var/www/html/wp-content/uploads/ nfs _netdev 0 0 [root@LAP1 ~]#yum -y install nfs-utils [root@LAP1 ~]#mount -a總結(jié)
以上是生活随笔為你收集整理的23.网络文件共享服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MLAT-Autoencoders---
- 下一篇: 华为防火墙SLB