23.网络文件共享服务
文章目錄
- 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 vsftpd服務常見配置
- 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.14 vsftpd服務指定用戶身份運行
- 2.4.15 連接數限制
- 2.4.16 傳輸速率,單位:字節/秒
- 2.4.17 連接時間:秒為單位
- 2.4.18 以文本方式傳輸
- 2.5 vsftpd 虛擬用戶
- 2.5.1 實現基于文件驗證的vsftpd虛擬用戶
- 2.5.1.1 創建用戶數據庫文件
- 2.5.1.2 創建用戶和訪問FTP目錄
- 2.5.1.3 創建pam配置文件
- 2.5.1.4 指定pam配置文件
- 2.5.1.5 虛擬用戶建立獨立的配置文件
- 2.5.2 實現基于MYSQL驗證的vsftpd虛擬用戶
- 2.5.2.1 在數據庫服務器上安裝mysql數據庫
- 2.5.2.2 在數據庫服務上配置數據庫支持vsftpd服務
- 2.5.2.3 在FTP服務器上安裝vsftpd 和 pam_mysql包
- 2.5.2.4 在FTP服務器上安裝 pam_mysql
- 2.5.2.5 在FTP服務器上建立pam認證所需文件
- 2.5.2.6 建立相應用戶和修改vsftpd配置文件
- 2.5.2.7 在FTP服務器上配置虛擬用戶具有不同的訪問權限
- 3 NFS 服務
- 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 相關包和文件
- 3.5.2 配置文件格式
- 3.5.2.1 相對路徑法
- 3.5.2.2 絕對路徑法
- 3.7 實戰案例
- 3.7.1 目標
- 3.7.2 環境準備
- 3.7.3 步驟
- 4 SAMBA 服務
- 4.1 SAMBA 服務簡介
- 4.2 SAMBA 軟件介紹
- 4.3 SAMBA客戶端工具
- 4.3.1 使用smbclient 訪問SAMBA服務器
- 4.3.2 掛載CIFS文件系統
- 4.4 管理SAMBA用戶
- 4.4.1 實現samba用戶說明
- 4.4.2 管理用戶命令添加
- 4.5 SAMBA服務器配置
- 4.5.1 SAMBA服務器全局配置
- 4.5.2 配置特定目錄共享
- 4.6 實戰案例
- 4.6.1 實戰案例:利用SAMBA實現指定目錄共享
- 4.6.2 實戰案例2:實現不同samba用戶訪問相同的samba共享,實現不同的配置
- 5 數據的實時同步
- 5.1 實時同步技術介紹
- 5.2 實現 inotify
- 5.2.1 內核支持
- 5.2.2 inotify-tools工具
- 5.3 rsync
- 5.3.1 rsync命令
- 5.3.2 以獨立服務方式運行rsync并實現驗證功能
- 5.4 inotify+rsync+shell 腳本實現實時數據同步
- 5.5 sersync 實現實時數據同步
- 5.5.1 sersync 介紹
- 5.5.2 基于rsync daemon 實現 sersync
- 5.5.3 基于遠程shell 實現 sersync
- 5.6 實戰案例:實現基于分布式的LAMP架構,并將NFS實時同步到備份服務器
- 在這里插入圖片描述
1 存儲類型
存儲類型分為三種
- 直連式存儲:Direct-Attached Storage,簡稱DAS
- 存儲區域網絡:Storage Area Network,簡稱SAN
- 網絡附加存儲:Network-Attached Storage,簡稱NAS
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則適用于大型應用或數據庫系統,缺點是成本高、較為復雜
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
虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
修改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#恢復 [root@centos8 ~]#usermod -d /var/ftp ftp2.2 常見 FTP 相關軟件
FTP服務器端軟件
Wu-ftpd,Proftpd,Pureftpd,Filezilla Server,Serv-U,Wing FTP Server,IIS
vsftpd:Very Secure FTP Daemon,CentOS 默認FTP服務器
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 vsftpd服務常見配置
listen_port=2121 默認值為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 (默認) 指定主動模式的端口2.4.3 被動模式端口范圍
linux ftp 客戶端默認使用被動模式 windows ftp 客戶端默認使用主動模式 pasv_min_port=6000 0為隨機分配,端口范圍會影響客戶端的并發數 pasv_max_port=60102.4.4 使用當地時間
use_localtime=YES 使用當地時間(默認為NO,使用GMT)2.4.5 匿名用戶登錄
anonymous_enable=YES #支持匿名用戶,CentOS8 默認不允許匿名 no_anon_password=YES #匿名用戶略過口令檢查 , 默認NO2.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 可刪除和修改上傳的文件,默認NO2.4.7 指定匿名用戶的上傳文件的默認的所有者和權限
chown_uploads=YES #默認NO chown_username=wang chown_upload_mode=06442.4.8 Linux系統用戶
local_enable=YES 是否允許linux用戶登錄 write_enable=YES 允許linux用戶上傳文件 local_umask=022 指定系統用戶上傳文件的默認權限對應umask2.4.9 將所有系統用戶映射為指定的guest用戶
guest_enable=YES 所有系統用戶都映射成guest用戶 guest_username=ftp 配合上面選項才生效,指定guest用戶 local_root=/ftproot 指定guest用戶登錄所在目錄,但不影響匿名用戶的登錄目錄 user_config_dir=/etc/vsftpd/conf.d/ 每個用戶獨立的配置文件目錄范例: 讓所有的系統用戶映射指定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/ #每個用戶獨立的配置文件目錄[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 禁錮系統用戶
禁錮所有系統用戶在家目錄中
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 tools]#pwd /var/ftp/tools [root@centos8 ftp]#cd tools/ [root@centos8 tools]#vi .message代碼中中的 ^[ 是在vim插入規模下按 crtl+v esc [root@centos8 tools]#vi .message ^[[1;32m software dir^[[0m2.4.13 PAM模塊實現用戶訪問控制
pam_service_name=vsftpd#pam配置文件:/etc/pam.d/vsftpd /etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄,默認是黑名單,但也可以是白名單范例:
#修改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 此為默認值 userlist_deny=YES(默認值) 黑名單,不提示口令,NO為白名單 userlist_file=/etc/vsftpd/user_list 此為默認值范例: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服務指定用戶身份運行
nopriv_user=nobody 此為默認值2.4.15 連接數限制
max_clients=0 #最大并發連接數范例:設置連接數
[root@centos8 vsftpd]#vim vsftpd.conf max_clients=1 [root@centos8 vsftpd]#systemctl restart vsftpd如果超出連接,會報如下提示
2.4.16 傳輸速率,單位:字節/秒
anon_max_rate=0 匿名用戶的最大傳輸速率,以字節為單位,比如: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 主動模式數據連接超時時長 accept_timeout=60 被動模式數據連接超時時長 data_connection_timeout=300 數據連接無數據輸超時時長 idle_session_timeout=60 無命令操作超時時長2.4.18 以文本方式傳輸
以文本方式傳輸文件時,會自動對文件進行格式轉換,比如轉換成windows的文本格式
#啟用此選項可使服務器在ASCII模式下實際對文件進行ASCII處理。 #默認是禁用,禁用后,服務器將假裝允許ASCII模式,但實際上會忽略激活它的請求 ascii_upload_enable=YES ascii_download_enable=YES說明:不建議使用文本方式,因為可能導致二進制文件內容被破壞
2.5 vsftpd 虛擬用戶
虛擬用戶:給特定服務使用的用戶帳號
- 所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號的家目錄
- 各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
虛擬用戶帳號的存儲方式:
- 文件:創建文本文件,奇數行為用戶名,偶數行為密碼,再被編碼為hash 格式Berkeley DB
database文件
- 關系型數據庫中的表中:實時查詢數據庫完成用戶認
vsftpd 支持mysql庫:pam要依賴于pam-mysql
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 ~]#yum -y install libdb-utils-5.3.28-37.el8.x86_64 [root@centos8 ~]#vim /etc/vsftpd/vusers.txt ftpuser1 111111 ftpuser2 123456#將生成的txt文件轉換成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 創建用戶和訪問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 創建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 虛擬用戶建立獨立的配置文件
#指定各個用戶配置文件存放的路徑 [root@centos8 ~]#vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/conf.d/#創建各個用戶配置文件存放的路徑 [root@centos8 ~]#mkdir /etc/vsftpd/conf.d/#創建各用戶自已的配置文件,允許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#創建各用戶自已的配置文件 [root@centos8 ~]#vim /etc/vsftpd/conf.d/ftpuser2 #登錄目錄改變至指定的目錄 local_root=/data/ftproot2 #針對各個用戶建立對應的數據目錄 [root@centos8 ~]#mkdir /data/ftproot1/ [root@centos8 ~]#mkdir /data/ftproot2/2.5.2 實現基于MYSQL驗證的vsftpd虛擬用戶
利用 pam_mysql 模塊可以實現基于MySQL的FTP虛擬用戶功能
項目網站:
http://pam-mysql.sourceforge.net/ https://sourceforge.net/projects/pam-mysql/ http://sf.net/projects/pam-mysql注意:因為此項目年代久遠不再更新,當前只支持CentOS 6,7,不支持CentOS 8
環境準備
2.5.2.1 在數據庫服務器上安裝mysql數據庫
#注意:MySQL8.0由于取消了PASSWORD()函數不支持,因此選擇Mariadb [root@centos8 ~]#yum -y install mariadb-server [root@centos8 ~]#systemctl enable --now mariadb.service2.5.2.2 在數據庫服務上配置數據庫支持vsftpd服務
[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 );#添加虛擬用戶,為了安全應該使用PASSWORD函數加密其密碼后存儲 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)#創建連接的數據庫用戶 MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '111111';2.5.2.3 在FTP服務器上安裝vsftpd 和 pam_mysql包
[root@centos7 ~]#yum -y install vsftpd2.5.2.4 在FTP服務器上安裝 pam_mysql
對于 centos 6:pam_mysql由EPEL的源中提供
[root@centos6 ~]#yum install pam_mysql對于 centos7 和 8:無對應rpm包,需手動編譯安裝
注意: 當前版本的源碼不支持 CentOS 8,使用中會提示下面錯誤
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_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服務器上建立pam認證所需文件
[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()函數加密
- 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 #添加下面兩項 guest_enable=YES guest_username=vuser#修改下面一項,原系統用戶無法登錄 pam_service_name=vsftpd.mysql啟動vsftpd服務 [root@centos7 ~]#systemctl enable --now vsftpd2.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/ftpuser1文件,在里面添加如下選項并設置為YES即可,只讀則設為NO#注意:需確保對應的映射用戶對于文件系統有寫權限,允許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#針對各個用戶建立對應的數據目錄 [root@centos8 ~]#mkdir /data/ftproot1/ [root@centos8 ~]#mkdir /data/ftproot2/3 NFS 服務
NFS工作原理
NFS:Network File System 網絡文件系統,基于內核的文件系統。Sun 公司開發,通過使用 NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,基于RPC(Remote Procedure Call Protocol 遠程過程調用)實現
RPC采用C/S模式,客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行
NFS優勢:節省本地存儲空間,將常用的數據,如:/home目錄,存放在NFS服務器上且可以通過網絡訪問,本地終端將可減少自身存儲空間的使用
3.2 NFS軟件介紹
軟件包:nfs-utils(包括服務器和客戶端相關工具,CentOS8 最小化安裝時默認沒有安裝)
相關軟件包:rpcbind(必須),tcp_wrappers
Kernel支持:nfs.ko
端口:2049(nfsd), 其它端口由portmap(111)分配
NFS服務主要進程:
- rpc.nfsd 最主要的NFS進程,管理客戶端是否可登錄
- rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
- rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
- rpc.statd 非必要,檢查文件一致性,可修復文
說明:CentOS 6 開始portmap進程由rpcbind代替
日志:/var/lib/nfs/
NFS配置文件:
/etc/exports /etc/exports.d/*.exports3.3 NFS共享配置文件格
/dir 主機1(opt1,opt2) 主機2(opt1,opt2)...格式說明:
- 以#開始的行為注釋
- 主機格式:
- 每個條目指定目錄導出到的哪些主機,及相關的權限和選項
范例:指明匿名用戶映射為特定用戶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相關信息
查看注冊在指定主機的RPC程序
rpcinfo -p hostname查看RPC注冊程序
rpcinfo -s 10.0.0.283.4.2 exportfs
exportfs:可用于管理NFS導出的文件系統
常見選項:
-v #查看本機所有NFS共享 -r #重讀配置文件,并共享目錄 -a #輸出本機所有共享 -au #停止本機所有共享3.4.3 showmount
常見用法:
#查看遠程主機的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相關的掛載選項:man 5 nfs
fg #(默認)前臺掛載 bg #后臺掛載 hard #(默認)持續請求 soft #非持續請求 intr #和hard配合,請求可中斷 rsize #和wsize 一次讀和寫數據最大字節數,rsize=32768 _netdev #無網絡連接不掛載 vers #指定版本,客戶端centos8默認4.2 ,centos7默認4.1 centos6默認4.0提示:基于安全考慮,建議使用 nosuid,_netdev,noexec 掛載選項
3.5 自動掛載
可使用 autofs 服務按需要掛載外圍設備,NFS共享等,并在空閑5分鐘后后自動卸載
3.5.1 相關包和文件
軟件包:autofs
服務文件:/usr/lib/systemd/system/autofs.service
配置文件:/etc/auto.master
3.5.2 配置文件格式
參看幫助:man 5 autofs
所有導出到網絡中的NFS啟用特殊匹配 -host 至“browse”
范例:/net目錄可以自動掛載NFS共享
root@centos7 ~]#cd /net [root@centos7 net]#cd 10.0.0.28自動掛載資源有兩種格式:
- 相對路徑法:將mount point 路徑分成 dirname 和 basename 分別配置,可能會影響現有的目錄結構
- 絕對路徑法:直接匹配全部的絕對路徑名稱,都寫入到指定的配置文件里,不會影響本地目錄結構
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 實戰案例
范例:實現家目錄的漫游(數據的自動同步)
1.前期操作:
三臺機器全部安裝nfs yum -y install nfs-utils2.NFS server設置/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#檢查是否創建成功共享 [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機器上的/home下數據到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服務器
#創建的數據表面看起來在/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 目標
將NFS的共享目錄,通過autofs 發布出來,做為遠程主機用戶的家目錄
3.7.2 環境準備
共三臺主機 一臺主機 nfs server IP:10.0.0.27 另兩臺當 nfs client IP:10.0.0.38 IP:10.0.0.483.7.3 步驟
#在27機器上設置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 服務
4.1 SAMBA 服務簡介
SMB:Server Message Block 服務器消息塊,IBM發布,最早是DOS網絡文件共享協議,是私有協議
CIFS:common internet file system,微軟基于SMB發布
SAMBA:1991年Andrew Tridgell,實現 windows和UNIX相通
官方網站:http://www.samba.org/
SAMBA的功能:
- 共享文件和打印,實現在線編輯
- 實現登錄SAMBA用戶的身份認證
- 可以進行NetBIOS名稱解析
- 外圍設備共享
Windows計算機網絡管理模式:
- 工作組WORKGROUP:計算機對等關系,帳號信息各自管理
- 域DOMAIN:C/S結構,帳號信息集中管理,DC,AD
4.2 SAMBA 軟件介紹
相關包:
- samba 提供smb服務器端
- samba-client 客戶端軟件
- samba-common 通用軟件
- cifs-utils smb客戶端工具
- samba-winbind 和AD相關
相關服務進程:
- smbd 提供smb(cifs)服務 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,通用命名規范,格式如下
\\sambaserver\sharename4.3.1 使用smbclient 訪問SAMBA服務器
smbclient -L instructor.example.com smbclient -L instructor.example.com -U smb用戶%password #可以使用-U選項來指定用戶%密碼,或通過設置和導出USER和PASSWD環境變量來指定 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文件系統
范例:手動掛載
mount -o user=subuser1,password=123456 //server//shared /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#此方法需要安裝cifs-utils包4.4 管理SAMBA用戶
4.4.1 實現samba用戶說明
- 包:samba-common-tools
- 工具:smbpasswd pdbedit
- 用戶數據庫:/var/lib/samba/private/passdb.tdb
說明:samba家目錄默認共享,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范例: 創建samba用戶
#創建操作系統賬號 [root@mysql ~]#useradd smbuser1 [root@mysql ~]#useradd smbuser2 [root@mysql ~]#useradd smbuser3#將系統賬號加入smb數據庫中,使之稱為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 會記錄新的網絡連接。狀態 本地 遠程 網絡------------------------------------------------------------------------------- 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$ 已經刪除。查看samba服務器狀態:
smbstatus4.5 SAMBA服務器配置
samba 配置文件 /etc/samba/smb.conf 格式 ,使用.ini文件的格式
幫助:man smb.conf
用 [ ] 分成以下幾部分
- 全局設置:
- 特定共享設置:
samba配置中的宏定義:
%m 客戶端主機的NetBIOS名 %M 客戶端主機的FQDN %H 當前用戶家目錄路徑 %U 當前用戶的用戶名 %g 當前用戶所屬組 %h samba服務器的主機名 %L samba服務器的NetBIOS名 %I 客戶端主機的IP,是i的大寫字母 %T 當前日期和時間 %S 可登錄的用戶名4.5.1 SAMBA服務器全局配置
- workgroup 指定工作組名稱
- server string 主機注釋信息
- netbios name 指定NetBIOS名,可以被SAMBA客戶端使用,但不支持ping
注意:netbios name需要啟動nmb服務
[global] workgroup = workgroup netbios name = smbserver #此設置需要啟動nmb服務才可能生效- interfaces 指定服務偵聽接口和IP
- hosts allow 可用逗號,空格,或tab分隔,默認允許所有主機訪問,也可在每個共享獨立配置,如在[global]設置,將應用并覆蓋所有共享設置,可以是以下格式:
范例:
hosts allow = 172.16. .example.com- hosts deny 拒絕指定主機訪問,格式和hosts allow 相同
- config file=/etc/samba/conf.d/%U 用戶獨立的配置文件
- Log file=/var/log/samba/log.%I 不同客戶機采用不同日志
- log level = 2 日志級別,默認為0,不記錄日志
范例:
[global] Log file=/var/log/samba/log.%I log level = 2- max log size=50 日志文件達到50K,將輪循rotate,單位KB
- Security三種認證方式:
user:samba用戶(采有linux用戶,samba的獨立口令)
share:匿名(CentOS7不再支持),已不建議使用
server:已不建議使用 - passdb backend = tdbsam 密碼數據庫格式
4.5.2 配置特定目錄共享
每個共享目錄應該有獨立的[ ]部分
[共享名稱] #遠程網絡看到的共享名稱 comment #注釋信息 path #所共享的目錄路徑 public #能否被guest訪問的共享,默認no,和guest=ok 類似 browsable #是否允許所有用戶瀏覽此共享,默認為yes,no為隱藏 writable=yes #可以被所有用戶讀寫,默認為no read only=no #和writable=yes等價,如與以上設置沖突,放在后面的設置生效,默認只讀 write list #用戶,@組名,+組名 之間用逗號分隔,如:writable=no,列表中用戶或組可讀寫,不在列表中用戶只讀 valid users #特定用戶才能訪問該共享,如為空,將允許所有用戶,用戶名之間用空格分隔范例:基于特定用戶和組的共享
vim /etc/samba/smb.conf [share] path = /data/dir valid users=wang,@admins writeable = no browseable = no4.6 實戰案例
4.6.1 實戰案例:利用SAMBA實現指定目錄共享
范例:利用samba實現特定目錄(/data/smbshare)的共享
#在samba服務器上安裝samba包 [root@centos8 ~]#yum -y install samba#在samba服務器上創建操作系統賬號 [root@mysql ~]#useradd smbuser1 [root@mysql ~]#useradd smbuser2 [root@mysql ~]#useradd smbuser3#將系統賬號加入smb數據庫中,使之稱為smb賬號 [root@mysql ~]#smbpasswd -a smbuser1 [root@mysql ~]#smbpasswd -a smbuser2 [root@mysql ~]#smbpasswd -a smbuser3#samba服務器配置 [root@centos8 ~]#vim /etc/samba/smb.conf [share] #共享名 path=/data/smbshare #真實路徑 write list=smbuser1,smbuser2 #設置smbuser1,2可寫權限#給文件夾設置權限 [root@centos8 ~]#chmod 777 /data/smbshare/ [root@centos8 ~]#systemctl restart smb#前提:client機器安裝 yum -y install samba-client yum -y install cifs-utils#在client機器上測試smbuser3,發現無法上傳文件 [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上實現映射,在client機器上進行 #臨時掛載 [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創建文件 [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 實戰案例2:實現不同samba用戶訪問相同的samba共享,實現不同的配置
在4.6.1的基礎上進行補充操作
#修改samba配置文件 [root@centos8 ~]#vim /etc/samba/smb.conf #在global下加一行 [global] config file= /etc/samba/conf.d/%U#針對smb1用戶創建單獨的配置文件 vim /etc/samba/conf.d/smbuser1 [share] path=/opt/smbshare1#重啟服務 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 數據的實時同步
在生產環境,有時會需要兩臺主機的特定目錄實現實時同步。比如,將NFS共享目錄的數據文件,自動實時同步到備份服務器特定目錄中
5.1 實時同步技術介紹
實現實時同步的方法
- inotify + rsync 方式實現數據同步
- sersync :前金山公司周洋(花椒直播)在 inotify 軟件基礎上進行開發的,功能更加強大
工作原理:
- 要利用監控服務(inotify),監控同步數據服務器目錄中信息的變化
- 發現目錄中數據產生變化,就利用rsync服務推送到備份服務器上
inotify:
異步的文件系統事件監控機制,利用事件驅動機制,而無須通過諸如cron等的輪詢機制來獲取事件,linux內核從2.6.13起支持 inotify,通過inotify可以監控文件系統中添加、刪除,修改、移動等各種事件
實現inotify軟件:
- inotify-tools
- sersync
- lrsyncd
inotify+rsync使用方式
- inotify 對同步數據目錄信息的監控
- rsync 完成對數據的同步
- 利用腳本進行結合
范例:實現數據的備份
目標:實現10.0.0.58與10.0.0.38/data/wordpress數據同步 #備份服務器操作 [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 實現 inotify
5.2.1 內核支持
內核是否支持inotify
Linux支持inotify的內核最小版本為 2.6.13,參看man 7 inotify
#列出下面的文件,說明服務器內核支持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內核參數說明:
- max_queued_events:inotify 事件隊列最大長度,如值太小會出現 Event Queue Overflow 錯誤,默認值:16384, 生產環境建議調大,比如:327679
- max_user_instances:每個用戶創建inotify實例最大值,默認值:128
- max_user_watches:可以監視的文件的總數量(inotifywait 單進程),默認值:8192,建議調大
范例:
[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源,安裝在數據服務器上
yum -y install inotify-toolsinotify-tools包主要工具:
- inotifywait: 在被監控的文件或目錄上等待特定文件系統事件(open ,close,delete等)發生,常用于實時同步的目錄監控
- inotifywatch:收集被監控的文件系統使用的統計數據,指文件系統事件發生的次數統計
inotifywait 命令
格式:
常用選項:
-m, --monitor 始終保持事件監聽 -d, --daemon 以守護進程方式執行,和-m相似,配合-o使用 -r, --recursive 遞歸監控目錄數據信息變化 -q, --quiet 輸出少量事件信息 --exclude <pattern> 指定排除文件或目錄,使用擴展的正則表達式匹配的模式實現 --excludei <pattern> 和exclude相似,不區分大小寫 -o, --outfile <file> 打印事件到文件中,相當于標準正確輸出,注意:使用絕對路徑 -s, --syslogOutput 發送錯誤到syslog相當于標準錯誤輸出 --timefmt <fmt> 指定時間輸出格式 --format <fmt> 指定的輸出格式;即實際監控輸出內容 -e 指定監聽指定的事件,如果省略,表示所有事件都進行監聽inotifywait 的–timefmt 時間格式
參考 man 3 strftim
范例:
--timefmt "%Y-%m-%d %H:%M:%S"inotifywait 的 --format 格式定義
%T #輸出時間格式中定義的時間格式信息,通過 --timefmt option 語法格式指定時間信息 %w #事件出現時,監控文件或目錄的名稱信息,相當于dirname %f #事件出現時,將顯示監控目錄下觸發事件的文件或目錄信息,否則為空,相當于basename %e #顯示發生的事件信息,不同的事件默認用逗號分隔 %Xe #顯示發生的事件信息,不同的事件指定用X進行分隔范例:
--format "%T %w%f event: %;e" --format '%T %w %f'inotifywait -e 選項指定的事件類型
create #文件或目錄創建 delete #文件或目錄被刪除 modify #文件或目錄內容被寫入 attrib #文件或目錄屬性改變 close_write #文件或目錄關閉,在寫入模式打開之后關閉的 close_nowrite #文件或目錄關閉,在只讀模式打開之后關閉的 close #文件或目錄關閉,不管讀或是寫模式 open #文件或目錄被打開 lsdir #瀏覽目錄內容 moved_to #文件或目錄被移動到監控的目錄中 moved_from #文件或目錄從監控的目錄中被移動 move #文件或目錄不管移動到或是移出監控目錄都觸發事件 access #文件或目錄內容被讀取 delete_self #文件或目錄被刪除,目錄本身被刪除 unmount #取消掛載范例:
-e create,delete,moved_to,close_write,attrib范例:使用inotifywait
#監控一次性事件 inotifywait /data/www Setting up watches. Watches established. /data/www/ CREATE f1.txt#持續前臺監控 inotifywait -mrq /data/www --exclude=".*\.swx|\.swp" /data/www/ OPEN f1.txt /data/www/ ACCESS f1.txt /data/www/ CLOSE_NOWRITE,CLOSE f1.txt#持續后臺監控,并記錄日志 inotifywait -o /root/inotify.log -drq /data/wordpress --timefmt "%Y-%m-%d %H:%M:%S" --format "%T %w%f event: %e"#持續前臺監控特定事件 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系統下的數據鏡像備份工具,實現遠程同步,支持本地復制,或者與其他SSH、rsync主機同步數據,支持增量備份,配合任務計劃,rsync能實現定時或間隔同步,配合inotify或sersync,可以實現觸發式的實時數據同步
官方網站: http://rsync.samba.org/
軟件包:rsync,rsync-daemon(CentOS 8)
服務文件:/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有三種工作方式:
前兩者的本質是通過本地或遠程shell,而第3種方式則是讓遠程主機上運行rsyncd服務,使其監聽在一個端口上,等待客戶端的連接。
常見選項:
-v:顯示rsync過程中詳細信息??梢允褂?span id="ozvdkddzhkzd" class="token string">"-vvvv"獲取更詳細信息。 -P:顯示文件傳輸的進度信息。(實際上"-P"="--partial --progress",其中的"--progress"才是顯 示進度信息的)。 -n --dry-run :僅測試傳輸,而不實際傳輸。常和"-vvvv"配合使用來查看rsync是如何工作的。 -a --archive :歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。 -r --recursive:遞歸到目錄中去。 -t --times:保持mtime屬性。強烈建議任何時候都加上"-t",否則目標文件mtime會設置為系統時間, 導致下次更新:檢查出mtime不同從而導致增量傳輸無效。 -o --owner:保持owner屬性(屬主)。 -g --group:保持group屬性(屬組)。 -p --perms:保持perms屬性(權限,不包括特殊權限)。 -D :是"--device --specials"選項的組合,即也拷貝設備文件和特殊文件。 -l --links:如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對象 -z :傳輸時進行壓縮提高效率 -R --relative:使用相對路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發送給服務端, 包括它們的屬性。用法見下文示例。 --size-only :默認算法是檢查文件大小和mtime不同的文件,使用此選項將只檢查文件大小。 -u --update :僅在源mtime比目標已存在文件的mtime新時才拷貝。注意,該選項是接收端判斷的,不會 影響刪除行為。 -d --dirs :以不遞歸的方式拷貝目錄本身。默認遞歸時,如果源為"dir1/file1",則不會拷貝dir1 目錄,使用該選項將拷貝dir1但不拷貝file1。 --max-size :限制rsync傳輸的最大文件大小??梢允褂脝挝缓缶Y,還可以是一個小數值(例如:"-- max-size=1.5m") --min-size :限制rsync傳輸的最小文件大小。這可以用于禁止傳輸小文件或那些垃圾文件。 --exclude :指定排除規則來排除不需要傳輸的文件。 --delete :以SRC為主,對DEST進行同步。多則刪之,少則補之。注意"--delete"是在接收端執行 的,所以它是在:exclude/include規則生效之后才執行的。 -b --backup :對目標上已存在的文件做一個備份,備份的文件名后默認使用"~"做后綴。 --backup-dir:指定備份文件的保存路徑。不指定時默認和待備份文件保存在同一目錄下。 -e :指定所要使用的遠程shell程序,默認為ssh。 --port :連接daemon時使用的端口號,默認為873端口。 --password-file:daemon模式時的密碼文件,可以從中讀取密碼實現非交互式。注意,這不是遠程 shell認證的密碼,而是rsync模塊認證的密碼。 -W --whole-file:rsync將不再使用增量傳輸,而是全量傳輸。在網絡帶寬高于磁盤帶寬時,該選項比增 量傳輸更高效。 --existing :要求只更新目標端已存在的文件,目標端還不存在的文件不傳輸。注意,使用相對路徑時如 果上層目錄不存在也不會傳輸。 --ignore-existing:要求只更新目標端不存在的文件。和"--existing"結合使用有特殊功能,見下文 示例。 --remove-source-files:要求刪除源端已經成功傳輸的文件范例:兩種格式訪問 rsync daemon 服務
5.3.2 以獨立服務方式運行rsync并實現驗證功能
范例:以獨立服務方式運行 rsync
[root@backup ~]#dnf install -y rsync-daemon #創建rsync服務器的配置文件 [root@backup ~]#vim /etc/rsyncd.con uid = root #提定以哪個用戶來訪問共享目錄,將之指定為生成的文件所有者,默認為nobody gid = root #默認為nobody #port = 874 可指定非標準端口,默認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] #每個模塊名對應一個不同的path目錄,如果同名后面模塊生效 path = /data/backup/ comment = backup dir read only = no #默認是yes,即只讀 auth users = rsyncuser #默認anonymous可以訪問rsync服務器 secrets file = /etc/rsync.pas#服務器端生成驗證文件 [root@backup ~]#echo "rsyncuser:123456" > /etc/rsync.pas [root@backup ~]#chmod 600 /etc/rsync.pas#服務器端啟動rsync服務 [root@backup ~]#rsync --daemon #可加入/etc/rc.d/rc.local實現 開機啟動 [root@backup ~]#systemctl start rsyncd #CentOS 7 以上版本#客戶端配置密碼文件 #也可將密碼賦值給環境變量RSYNC_PASSWORD變量,但不安全 #export RSYNC_PASSWORD=magedu [root@data-centos8 ~]#echo "123456" > /etc/rsync.pas [root@data-centos8 ~]#chmod 600 /etc/rsync.pas#查看遠程rsync服務器的模塊信息 [root@data-server ~]#rsync rsync://rsync服務器IP backup backup dir#交互式驗證查看具體模塊內的文件 [root@data-server ~]#rsync rsync://rsyncuser@rsync服務器IP/backup Password:#非交互式查看共享目錄 [root@data-server ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@rsync服務器IP/backup#客戶端測試同步數據 [root@data-centos8 ~]#rsync -avz --delete --password-file=/etc/rsync.pas /data/wordpress/ rsyncuser@rsync服務器IP::backup [root@data-centos8 ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@rsync服務器IP::backup /data/wordpress/5.4 inotify+rsync+shell 腳本實現實時數據同步
按 5.3 搭建好 rsyncd的備份服務器,在數據服務器上創建inotify_rsync.sh腳本
注意: 此腳本執行前先確保兩主機初始數據處于同步狀態,此腳本實現后續的數據同步
[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#后臺運行腳本,持續運行 [root@data-server ]#nohup bash inotify_rsync.sh &> /dev/null &#查看文件傳輸日志 [root@data-centos8 ~]#tail -f /var/log/changelist.log5.5 sersync 實現實時數據同步
5.5.1 sersync 介紹
sersync類似于inotify,同樣用于監控,但它克服了inotify的缺點
inotify最大的不足是會產生重復事件,或者同一個目錄下多個文件的操作會產生多個事件,例如,當監控目錄中有5個文件時,刪除目錄時會產生6個監控事件,從而導致重復調用rsync命令。另外比如:vim文件時,inotify會監控到臨時文件的事件,但這些事件相對于rsync來說是不應該被監控的
sersync 優點:
- sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重復的文件操作進行過濾,所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。
- sersync配置很簡單,其中提供了靜態編譯好的二進制文件和xml配置文件,直接使用即可
- sersync使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器實時保持同步狀態
- sersync有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則按設定時長對同步失敗的文件重新同步
- sersync不僅可以實現實時同步,另外還自帶crontab功能,只需在xml配置文件中開啟,即也可以按要求隔一段時間整體同步一次,而無需再額外配置crontab功能
- sersync 可以二次開發
sersync項目地址: https://code.google.com/archive/p/sersync/
sersync下載地址:https://code.google.com/archive/p/sersync/downloads
5.5.2 基于rsync daemon 實現 sersync
[root@backup-centos8 ~]#dnf install rsync-daemon #創建rsync服務器的配置文件 [root@centos8 ~]#vi /etc/rsyncd.conf uid = root #提定以哪個用戶來訪問共享目錄,將之指定為生成的文件所有者,默認為nobody gid = root #默認為nobody #port = 874 可指定非標準端口,默認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] #每個模塊名對應一個不同的path目錄,如果同名后面模塊生效 path = /data/backup/ comment = backup dir read only = no #默認是yes,即只讀 auth users = rsyncuser #默認anonymous可以訪問rsync服務器 secrets file = /etc/rsync.pas#服務器端準備目錄 [root@backup-centos8 ~]#mkdir -pv /data/backup#服務器端生成驗證文件 [root@backup-centos8 ~]#echo "rsyncuser:123456" > /etc/rsync.pas [root@backup-centos8 ~]#chmod 600 /etc/rsync.pas#服務器端啟動rsync服務 [root@backup-centos8 ~]#rsync --daemon #可加入/etc/rc.d/rc.local實現 開機啟動 [root@backup-centos8 ~]#systemctl start rsyncd #CentOS 7 以上版本#客戶端配置密碼文件 #也可將密碼賦值給環境變量RSYNC_PASSWORD變量,但不安全 #export RSYNC_PASSWORD=123456 [root@data-centos8 ~]#echo "123456" > /etc/rsync.pas [root@data-centos8 ~]#chmod 600 /etc/rsync.pas #此為必要項,權限必須修改#交互式驗證查看具體模塊內的文件 [root@data-server ~]#rsync rsync://rsync服務器IP backup backup dir#非交互式查看共享目錄 [root@data-server ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@rsync服務器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#確認安裝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"/> # 是否開啟調試模式<fileSystem xfs="false"/> <filter start="false"> #不開啟文件過濾功能,當為true時,以下類型的文件將不同 步<exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify> # 監控事件,默認監控 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="備份服務器IP" name="backup"/> #修改此行,指定備份服務器地址和rsync daemon的模塊名,如果下面開啟了ssh start,此時name為遠程shell方式運行時的目標目錄<!--<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,指定備份服務器的rsync配置的用戶和密碼文件<userDefinedPort start="false" port="874"/><!-- port=874 -->#指定rsync的 非標準端口號<timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/> #默認使用rsync daemon運行rsync命令,true為使用遠程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定時傳輸的篩選功能<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 _______________________________________________________ 參數-d:啟用守護進程模式 參數-r:在監控前,將監控目錄與遠程主機用rsync命令推送一遍 c參數-n: 指定開啟守護線程的數量,默認為10個 參數-o:指定配置文件,默認使用當前工作目錄下的confxml.xml文件 參數-m:單獨啟用其他模塊,使用 -m refreshCDN 開啟刷新CDN模塊 參數-m:單獨啟用其他模塊,使用 -m socket 開啟socket模塊 參數-m:單獨啟用其他模塊,使用 -m http 開啟http模塊 不加-m參數,則默認執行同步程序#以后臺方式執行同步 [root@data-server ~]#sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml5.5.3 基于遠程shell 實現 sersync
#不需要配置rsync daemon,只需要配置基于key驗證的ssh即可 [root@data-server ~]#ssh-keygen [root@data-server ~]#ssh-copy-id backup-server#下載sersync,并拷貝至相應的目錄,設置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"> #修改此行,指定源數據目錄<remote ip="備份服務器IP" name="/data/backup"/> #修改此行指定備份服務器地址和備 份目標目錄<!--<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"/> #必須修 改此行,不啟用認證<userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="true"/> #修改此行為true,使用遠程shell方式的rsync連接方式,無需在目標主機上配置啟動rsync daemon服務#####################################以下行不需要修改 ####################################</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 實戰案例:實現基于分布式的LAMP架構,并將NFS實時同步到備份服務器
綜合項目:NFS服務實現基于共享存儲的LAMP架構
數據庫操作:
[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服務器操作
[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/ 網站編寫一篇帶圖文章發布 [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/下數據 [root@LAP2 ~]#rsync -a /var/www/html/ 10.0.0.58:/var/www/html/ #刪除上傳的資源(uploads/下數據) [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總結
以上是生活随笔為你收集整理的23.网络文件共享服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MLAT-Autoencoders---
- 下一篇: 华为防火墙SLB