日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/14 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 网络文件共享服务详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 網絡文件共享介紹

  • 一.常見的存儲類型
    • 1.1 DAS 類型的存儲
    • 1.2 NAS 類型的存儲
    • 1.3 SAN 類型的存儲
    • 1.4 三種存儲類型的比較
  • 二.文件傳輸協議 FTP
    • 2.1 FTP 工作原理
    • 2.2 常見的 FTP 軟件
    • 2.2.1 vsftpd 軟件
      • 2.2.2 vsftpd 服務常見配置
        • 2.2.2.1 命令端口配置
        • 2.2.2.2 主動模式端口
        • 2.2.2.3 被動模式端口范圍
        • 2.2.2.4 使用當地時間
        • 2.2.2.5 使用匿名用戶登錄
        • 2.2.2.6 允許匿名上傳文件
        • 2.2.2.7 指定匿名用戶的上傳文件的默認的所有者和權限
        • 2.2.2.8 Linux 系統用戶
        • 2.2.2.9 將系統用戶映射為指定的 guest 用戶
        • 2.2.2.10 限定系統用戶在指定目錄
        • 2.2.2.11 啟用日志
        • 2.2.2.12 啟用提示信息
        • 2.2.2.13 PAM 模塊實現用戶訪問控制
        • 2.2.2.14 是否啟用控制用戶登錄的列表文件
        • 2.2.2.15 vsftpd 服務指定用戶身份運行
        • 2.2.2.16 連接數限制
        • 2.2.2.17 傳輸速率,字節/秒
        • 2.2.2.18 連接時間:秒為單位
        • 2.2.2.19 優先以文本方式傳輸
        • 2.2.2.20 實現基于 SSL 的 FTPS
      • 2.2.3 vsftpd 虛擬用戶概念
      • 2.2.4 基于文件驗證的虛擬用戶
        • 2.2.4.1 創建用戶數據文件
        • 2.2.4.2 創建用戶訪問 FTP 共享文件目錄
        • 2.2.4.3 創建 pam 配置文件
        • 2.2.4.4 指定 pam 配置文件
        • 2.2.4.4 每個虛擬用戶建立獨立的配置文件
      • 2.2.5 基于 mysql 驗證的虛擬用戶
        • 2.2.5.1 環境準備
        • 2.2.5.2 在數據庫服務器上安裝 mysql 數據庫
        • 2.2.5.3 在數據庫服務上配置數據庫支持 vsftpd 服務
        • 2.2.5.4 在 FTP 服務器上安裝 vsftpd 和 pam_mysql 包
        • 2.2.5.5 在 FTP 服務器上建立 pam 認證所需文件
        • 2.2.5.6 建立相應用戶和修改 vsftpd 配置文件
        • 2.2.5.7 在 FTP 服務器上配置虛擬用戶具有不同的訪問權限
  • 三.文件共享服務
    • 3.1 NFS 分布式文件系統協議
    • 3.2 NFS 工作原理
    • 3.3 NFS 軟件
    • 3.4 NFS 配置
    • 3.5 NFS 相關工具
      • 3.5.1 rpcinfo
      • 3.5.2 exports
      • 3.5.3 showmount
      • 3.5.4 mount.nfs
    • 3.6 自動掛載文件系統
      • 3.6.1 相關文件
      • 3.6.2 配置文件格式
    • 3.7 案例
      • 3.7.1 目標
      • 3.7.2 環境準備
      • 3.7.3 步驟
  • 四.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.6 案例
      • 4.6.1 利用 SAMBA 實現指定目錄共享
      • 4.6.2 實現不同 samba 用戶訪問相同的 samba 共享,實現不同的配置
  • 五.數據同步 rsync
    • 5.1 數據實時同步技術
    • 5.2 notify
      • 5.2.1 notify 需要內核支持
      • 5.2.2 inotify-tools 工具
    • 5.3 rsync
      • 5.3.1 rsync 命令
      • 5.3.2 以獨立服務方式運行 rsync
    • 5.4 同步腳本示例
  • 六.案例

一.常見的存儲類型

目前常見的存儲類型有 DAS,NAS,SAN 等,最主要的區別是硬盤存儲媒介是如何
于處理器連接的,以及處理器使用何種方式來訪問磁盤,以及訪問磁盤使用
的協議(網絡協議、I/O 協議)。

三種存儲類型如下
直連式存儲:Direct-Attached Storage,簡稱 DAS
網絡附加存儲:Network-Attached Storage,簡稱 NAS
存儲區域網絡:Storage Area Network,簡稱 SAN

1.1 DAS 類型的存儲

  • DAS 存儲是最常見的一種存儲方式,尤其是在中小企業應用中。PC 中的硬盤或只
    有一個外部 SCSI 接口的 JBOD 都屬于 DAS 架構。DAS 是指存儲設備直接連接到
    服務器總線上,存儲設備只與一臺獨立的主機連接,其他主機不能使用這個存儲
    設備。DAS 存儲設備與服務器主機之間的連接通道通常采用 SCSI 連接,DAS 存儲
    設備主要是磁盤陣列(RAID: Redundant Arrays of Independent Disks)、磁盤簇
    (JBOD:Just a Bunch Of Disks)等。

1.2 NAS 類型的存儲

  • NAS 存儲就是存儲設備通過標準的網絡拓撲結構(比如以太網)添加到一群計算
    機上。與 DAS 以及 SAN 不同,NAS 是文件級的存儲方法。采用 NAS 較多的
    功能是用來進行文件共享。
  • NAS 存儲也通常被稱為附加存儲,顧名思義,就是存儲設備通過標準的網絡拓
    撲結構(例如以太網)添加到一群計算機上。NAS 是文件級的存儲方法,它的重
    點在于幫助工作組和部門級機構解決迅速增加存儲容量的需求。如今更多的人
    們采用 NAS 較多的功能是用來文檔共享、圖片共享、電影共享等等,而且隨著
    云計算的發展,一些 NAS 廠商也推出了云存儲功能,大大方便了企業和人們等
    個人用戶的使用。
  • NAS 產品是真正即插即用的產品。NAS 設備一般支持多計算機平臺,用戶通過
    網絡支持協議可進入相同的文檔,因而 NAS 設備無需改造即可用于混合
    Unix/Windows NT 局域網內,同時 NAS 的應用非常靈活。但 NAS 有一個關
    鍵性問題,即備份過程中的帶寬消耗。與將備份數據流從 LAN 中轉移出去的
    存儲區域網(SAN)不同,NAS 仍使用網絡進行備份和恢復。NAS 的一個缺點
    是它將存儲事務由并行 SCSI 連接轉移到了網絡上。這就是說 LAN 除了必須
    處理正常的最終用戶傳輸流外,還必須處理包括備份操作的存儲磁盤請求。

1.3 SAN 類型的存儲

  • 存儲區域網絡,這個是通過光纖通道或以太網交換機連接存儲陣列和服務器主機,
    最后成為一個專用的存儲網絡。SAN 經過十多年歷史的發展,已經相當成熟,成
    為業界的事實標準(但各個廠商的光纖交換技術不完全相同,其服務器和 SAN
    存儲有兼容性的要求)。
  • SAN 提供了一種與現有 LAN 連接的簡易方法,并且通過同一物理通道支持廣
    泛使用的 SCSI 和 IP 協議。SAN 不受現今主流的、基于 SCSI 存儲結構的
    布局限制。特別重要的是,隨著存儲容量的爆炸性增長,SAN 允許企業獨立地增
    加它們的存儲容量。SAN 的結構允許任何服務器連接到任何存儲陣列,這樣不管
    數據置放在那里,服務器都可直接存取所需的數據。因為采用了光纖接口,SAN
    還具有更高的帶寬。
  • 如今的 SAN 解決方案通常會采取以下兩種形式:光纖信道以及 iSCSI 或者基于
    IP 的 SAN,也就是 FC SAN 和 IP SAN。光纖信道是 SAN 解決方案中大家最熟
    悉的類型,但是,最近一段時間以來,基于 iSCSI 的 SAN 解決方案開始大量出
    現在市場上,與光纖通道技術相比較而言,這種技術具有良好的性能,而且價格低
    廉。
SAN 的優勢:
隨著存儲容量的增長,SAN 允許企業獨立地增加他們的存儲容量。SAN 允許任
何服務器連接到任何存儲陣列(好處是:不管數據放在哪里,服務器都可以直接
存取所需的數據)
由于使用光纖接口,SAN 具有更高的帶寬。除了 FC 連接,SAN 連接還有
ISCSI(SCSI over IP)以及 SAS(Serial Attached SCSI)接口。
光纖接口可以提供 10 公里那么長那么遠的連接長度,非常容易實現物理分離的存儲

1.4 三種存儲類型的比較

  • 技術上
處理器----存儲 連接類型有無網絡媒介I/O 協議帶寬是否容量共享是否數據共享
DASNO使用并行 SCSI,光纖通道SCSI40MBps-160MBps,取決于媒介手動配置,默認不共享NO
SNAYES最常用光纖網絡,后來也可基于以太網SCSI100MBps or 200MBpsYES數據共享需要特定軟件配合,如 SANergy
NASYES以太網NFS,CIFS10Mbps–1GbpsYESYES
  • 優缺點和使用場景
三種存儲架構的應用場景
DAS 雖然比較古老了,但是還是很適用于那些數據量不大,對磁盤訪問速度要求
較高的中小企業
NAS 多適用于文件服務器,用來存儲非結構化數據,雖然受限于以太網的速度,
但是部署靈活,成本低
SAN 則適用于大型應用或數據庫系統,缺點是成本高、較為復雜
  • 應用和磁盤的交互

二.文件傳輸協議 FTP

2.1 FTP 工作原理

File Transfer Protocol(FTP):文件傳輸協議,是用于在計算機網絡上的客戶機和服務器
之間傳輸文件的標準應用層協議。FTP 是基于客戶端/服務器模型(C/S),并且使用不同的連
接來工作,將控制和數據傳輸分開,控制通道使用 TCP/21 端口,數據通道端口視情況而定。

FTP 用戶可以使用明文登錄協議進行身份驗證,通常是用戶名和密碼的形式,但如果服務器配
置允許,則可以匿名連接(此時連接的用戶名為 ftp 或者 anonymous)。對于保護用戶名和密
碼并對內容進行加密的安全傳輸,FTP 通常使用 SSL/TLS (FTPS)或 SSH 文件傳輸協議
(SFTP)進行保護。

第一個 FTP 客戶端應用程序是在操作系統具有圖形用戶界面之前開發的命令行程序,并且到
目前仍然隨大多數 Windows、Unix 和 Linux 操作系統一起提供。此后,許多 FTP 客戶端
和自動化實用程序被開發用于桌面、服務器和移動設備。

FTP 工作時使用兩種模式:從服務器角度來說
主動模式(PORT style): 服務器主動連接客戶端
控制通道:客戶端:隨機 port —> 服務器:21/tcp
數據通道:客戶端:隨機 port <—服務器:20/tcp
被動模式(PASV style): 客戶端主動連接服務器
控制通道:客戶端:隨機 port —> 服務器:21/tcp
數據通道:客戶端:隨機 port —> 服務器:隨機 port /tcp

例如:服務器被動模式數據端口
227 Entering Passive Mode (172,16,0,1,224,59)客服端主動連接服務器
可以在客戶端看到該消息,服務器數據端口計算:224*256+59

FTP 服務狀態碼
1XX:信息 125:數據連接打開
2XX:成功類狀態 200:命令 OK 230:登錄成功
3XX:補充類 331:用戶名 OK
4XX:客戶端錯誤 425:不能打開數據連接
5XX:服務器錯誤 530:不能登錄
用戶認證:
匿名用戶:ftp,anonymous,對應 Linux 用戶 ftp
系統用戶:Linux 用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件

2.2 常見的 FTP 軟件

常見的 FTP 服務端軟件
Wu-ftpd,Proftpd,Pureftpd
Filezilla Server,Serv-U,Wing FTP Server,IIS
vsftpd:Very Secure FTP Daemon,CentOS 默認 FTP 服務器高速,穩定,下載速度是
WU-FTP 的兩倍,據 ftp.redhat.com 提供的數據:FTP 單機最多可支持 15000 個并發連接。
常見的 FTP 客戶端軟件
ftp
ftp -A ftpserver port -A 主動模式 –p 被動模式
lftp
lftp –u username ftpserver
lftp username@ftpserver
lftpget
lftpget ftp://ftpserver/pub/file
gftp:GUI centos5 最新版 2.0.19 (11/30/2008)
wget
curl
filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp

2.2.1 vsftpd 軟件

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.2.2 vsftpd 服務常見配置

2.2.2.1 命令端口配置

listen_port=21

2.2.2.2 主動模式端口

connect_from_port_20=YES 主動模式端口為20ftp_data_port=20 (默認) 指定主動模式的端口

2.2.2.3 被動模式端口范圍

linux 客戶端默認使用被動模式
windows 客戶端默認使用主動模式

pasv_min_port=6000 0為隨機分配 pasv_max_port=6010

2.2.2.4 使用當地時間

use_localtime=YES 默認為NOGMT時區

2.2.2.5 使用匿名用戶登錄

anonymous_enable=YES 支持匿名用戶 no_anon_password=YES 匿名用戶略過口令檢查 , 默認NO

2.2.2.6 允許匿名上傳文件

anon_upload_enable=YES 匿名上傳,注意:文件系統權限 anon_mkdir_write_enable=YES 匿名建目錄 anon_world_readable_only 只能下載全部讀的文件, 默認YES anon_umask=0333 指定匿名上傳文件的umask,默認077 anon_other_write_enable=YES 可刪除和修改上傳的文件, ,默認NO

2.2.2.7 指定匿名用戶的上傳文件的默認的所有者和權限

chown_uploads=YES 默認NO chown_username=wang chown_upload_mode=0644

2.2.2.8 Linux 系統用戶

local_enable=YES 是否允許 linux 用戶登錄 write_enable=YES 允許 linux 用戶上傳文件 local_umask=022 指定系統用戶上傳文件的默認權限

2.2.2.9 將系統用戶映射為指定的 guest 用戶

guest_enable=YES 所有系統用戶都映射成 guest 用戶 guest_username=ftp 配合上面選項才生效,指定 guest 用戶 local_root=/ftproot guest 用戶登錄所在目錄

2.2.2.10 限定系統用戶在指定目錄

  • 禁錮所有系統在家目錄中
chroot_local_user=YES 禁錮系統用戶,默認NO,即不禁錮
  • 禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list

當 chroot_local_user=YES 時,則 chroot_list 中用戶不禁錮
當 chroot_local_user=NO 時,則 chroot_list 中用戶禁錮

2.2.2.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.2.2.12 啟用提示信息

  • 登錄提示信息
ftpd_banner="welcome to mage ftp server" banner_file=/etc/vsftpd/ftpbanner.txt
  • 目錄訪問提示信息
dirmessage_enable=YES 此為默認值 message_file=.message 信息存放在指定目錄下.message ,此為默認值

2.2.2.13 PAM 模塊實現用戶訪問控制

pam_service_name=vsftpd pam配置文件:/etc/pam.d/vsftpd /etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄

2.2.2.14 是否啟用控制用戶登錄的列表文件

userlist_enable=YES 此為默認值 userlist_deny=YES(默認值) 黑名單,不提示口令,NO為白名單 userlist_file=/etc/vsftpd/users_list 此為默認值

2.2.2.15 vsftpd 服務指定用戶身份運行

nopriv_user=nobody 此為默認值

2.2.2.16 連接數限制

max_clients=0 最大并發連接數 max_per_ip=0 每個 IP 同時發起的最大連接數

2.2.2.17 傳輸速率,字節/秒

anon_max_rate=0 匿名用戶的最大傳輸速率 local_max_rate=0 本地用戶的最大傳輸速率

2.2.2.18 連接時間:秒為單位

connect_timeout=60 主動模式數據連接超時時長 accept_timeout=60 被動模式數據連接超時時長 data_connection_timeout=300 數據連接無數據輸超時時長 idle_session_timeout=60 無命令操作超時時長

2.2.2.19 優先以文本方式傳輸

ascii_upload_enable=YES ascii_download_enable=YES

2.2.2.20 實現基于 SSL 的 FTPS

  • 查看是否支持 SSL
  • [root@centos8 ~]#ldd `which vsftpd`|grep libssl libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f8878e2c000)
  • 創建自簽名證書
  • # CentOS 7 上可以實現 cd /etc/pki/tls/certs/ make vsftpd.pem openssl x509 -in vsftpd.pem -noout –text # 或者分別生成一個證書和私鑰文件 mkdir /etc/vsftpd/ssl cd /etc/vsftpd/ssl openssl req -x509 -nodes -keyout vsftpd.key -out vsftpd.crt -days 365 -newkey rsa:2048
  • 配置 vsftpd 服務支持 SSL
  • [root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf ssl_enable=YES #啟用SSL allow_anon_ssl=NO #匿名不支持SSL force_local_logins_ssl=YES #本地用戶登錄加密 force_local_data_ssl=YES #本地用戶數據傳輸加密 rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem #rsa_private_key_file /path/file #此項如果沒有指定,私鑰也在證書文件中 #ssl_tlsv1=YES #ssl_sslv2=NO #ssl_sslv3=NO #require_ssl_reuse=NO #ssl_ciphers=HIGH[root@centos7 ~]#systemctl restart vsftpd [root@centos7 ~]#ftp 192.168.100.7 Connected to 192.168.100.7 (192.168.100.7). 220-welcome to magedu 220 Name (192.168.100.8:root): wang 530 Non-anonymous sessions must use encryption. Login failed. 421 Service not available, remote server has closed connection# 用filezilla等工具測試

    2.2.3 vsftpd 虛擬用戶概念

    vsftpd 的虛擬用戶:

    • 所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號的家目錄
    • 各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定

    虛擬用戶帳號的存儲方式:

    • 存儲于文件:編輯文本文件,此文件需要被編碼為 hash 格式。奇數行為用戶名,偶數行為密碼
      使用命令db_load -T -t hash -f vusers.txt vusers.db生成 vsftpd 可識別的.db格式
    • 存儲于關系型數據庫中的表中:實時查詢數據庫完成用戶認證
      vsftpd 支持 mysql 庫:pam 要依賴于 pam-mysql
      /lib64/security/pam_mysql.so
      /usr/share/doc/pam_mysql-0.7/README

    2.2.4 基于文件驗證的虛擬用戶

    2.2.4.1 創建用戶數據文件

    vim /etc/vsftpd/vusers.txt wang wangpass mage magepass cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db chmod 600 vusers.db

    2.2.4.2 創建用戶訪問 FTP 共享文件目錄

    useradd -d /data/ftproot -s /sbin/nologin -r vuser mkdir -pv /data/ftproot/upload setfacl -m u:vuser:rwx /data/ftproot/upload #chmod a=rx /data/ftproot/ 如果自動創建家目錄,需修改權限

    2.2.4.3 創建 pam 配置文件

    vim /etc/pam.d/vsftpd.db auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers

    2.2.4.4 指定 pam 配置文件

    vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vuser pam_service_name=vsftpd.db

    2.2.4.4 每個虛擬用戶建立獨立的配置文件

    # 指定各個用戶配置文件存放的路徑 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/# 創建各個用戶配置文件存放的路徑 mkdir /etc/vsftpd/vusers.d/ cd /etc/vsftpd/vusers.d/# 創建各用戶自已的配置文件,允許wang用戶可讀寫,其它用戶只讀 vim wang anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES# 創建各用戶自已的配置文件 vim mage # 登錄目錄改變至指定的目錄 local_root=/data/ftproot2

    2.2.5 基于 mysql 驗證的虛擬用戶

    2.2.5.1 環境準備

    本實驗在兩臺 CentOS 主機上實現, CentOS 7 一臺做為 FTP 服務器,一臺做數據庫服務器

    2.2.5.2 在數據庫服務器上安裝 mysql 數據庫

    yum –y install mariadb-server systemctl enable --now mariadb.service

    2.2.5.3 在數據庫服務上配置數據庫支持 vsftpd 服務

    # 建立存儲虛擬用戶數據庫和表 mysql> CREATE DATABASE vsftpd; mysql> USE vsftpd; mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); # 添加虛擬用戶,為了安全應該使用PASSWORD函數加密其密碼后存儲 mysql> INSERT INTO users(name,password) values('wang',password('magedu')); mysql> INSERT INTO users(name,password) values('mage',password('magedu')); # 創建連接的數據庫用戶 mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.0.%' IDENTIFIED BY 'magedu'; mysql> FLUSH PRIVILEGES;

    2.2.5.4 在 FTP 服務器上安裝 vsftpd 和 pam_mysql 包

    yum install vsftpd -y yum install pam_mysql -y
    • 對于 centos 6:pam_mysql 由 EPEL 的源中提供
    • 對于 centos7 和 8:無對應 rpm 包,需手動編譯安裝
    • pam-mysql 源碼進行編譯
    # 安裝相關包 yum install vsftpd gcc gcc-c++ make mariadb-devel pam-devel# 下載pam-mysql源碼進行編譯 wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz # https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gztar xvf pam_mysql-0.7RC1.tar.gz cd 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.make && make install [root@vsftpd ~]#ll /lib64/security/pam_mysql* -rwxr-xr-x 1 root root 882 Dec 17 14:34 /lib64/security/pam_mysql.la -rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so

    2.2.5.5 在 FTP 服務器上建立 pam 認證所需文件

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

    參考 README 可知

    • crypt 加密方式:
      0 表示不加密
      1 表示 crypt(3)加密
      2 表示使用 mysql password()函數加密
      3 表示 md5 加密
      4 表示 sha1 加密
    • 配置字段說明
      auth 表示認證
      account 驗證賬號密碼正常使用
      required 表示認證要通過
      pam_mysql.so 模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕對路徑;后
      面為給此模塊傳遞的參數
      user=vsftpd 為登錄 mysql 的用戶
      passwd=magedu 登錄 mysql 的的密碼
      host=mysqlserver mysql 服務器的主機名或 ip 地址
      db=vsftpd 指定連接 msyql 的數據庫名稱
      table=users 指定連接數據庫中的表名
      usercolumn=name 當做用戶名的字段
      passwdcolumn=password 當做用戶名字段的密碼
      crypt=2 密碼的加密方式為 mysql password()函數加密

    2.2.5.6 建立相應用戶和修改 vsftpd 配置文件

    # 建立虛擬用戶映射的系統用戶及對應的目錄 useradd -s /sbin/nologin -d /data/ftproot -r vuser # centos7 需除去ftp根目錄的寫權限 chmod 555 /data/ftproot mkdir -pv /data/ftproot/{upload,pub} setfacl –m u:vuser:rwx /data/ftproot/upload # 確保/etc/vsftpd.conf中已經啟用了以下選項 anonymous_enable=YES # 添加下面兩項 guest_enable=YES guest_username=vuser # 修改下面一項,原系統用戶無法登錄 pam_service_name=vsftpd.mysql# 啟動vsftpd服務 systemctl enable --now vsftpd

    2.2.5.7 在 FTP 服務器上配置虛擬用戶具有不同的訪問權限

    vsftpd 可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其 ftp 服務訪問權限,
    每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,
    只需要在 vsftpd.conf 指定其路徑及名稱即可

    # 配置vsftpd為虛擬用戶使用配置文件目錄 vim /etc/vsftpd/vsftpd.conf # 添加如下選項 user_config_dir=/etc/vsftpd/vusers.d/ # 創建所需要目錄,并為虛擬用戶提供配置文件 mkdir /etc/vsftpd/vusers.d/ cd /etc/vsftpd/vusers.d/ touch wang mage # 配置虛擬用戶的訪問權限 # 虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。如要讓用戶wang具有上傳文件的權 限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下選項并設置為YES即可,只讀則設為NO # 注意:需確保對應的映射用戶對于文件系統有寫權限 anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO} # 登錄目錄改變至指定的目錄 local_root=/data/ftproot2

    三.文件共享服務

    3.1 NFS 分布式文件系統協議

    Network File System(NFS):網絡文件系統,是一個分布式文件系統協議,最初由
    Sun Microsystems(SUN)在 1984 年開發,其允許用戶在客服端通過計算機網絡
    訪問服務器的文件,就如同在客戶端本地訪問一樣。和其他協議一樣,NFS 基于
    Open Network Computing Remote Procedure Call(ONC RPC)遠程過程調用
    系統。NFS 是一個開放的標準,定義于一個 RFC 中,允許任何人實現該協議。

    3.2 NFS 工作原理

    RPC 采用 C/S 模式,客戶機請求程序調用進程發送一個有進程參數的調用信息到服務
    進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。
    當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待
    下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用
    執行繼續進行。

    NFS 優勢:節省本地存儲空間,將常用的數據,如:/home 目錄,存放在 NFS 服務
    器上且可以通過網絡訪問,本地終端將可減少自身存儲空間的使用

    3.3 NFS 軟件

    軟件包:nfs-utils
    相關軟件包:rpcbind(必須),tcp_wrappers
    Kernel 支持:nfs.ko
    端口:2049(nfsd), 其它端口由 portmap(111)分配

    • 說明:CentOS 6 開始 portmap 進程由 rpcbind 代替
    NFS 服務主要進程:
    rpc.nfsd 最主要的 NFS 進程,管理客戶端是否可登錄
    rpc.mountd 掛載和卸載 NFS 文件系統,包括權限管理
    rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
    rpc.statd 非必要,檢查文件一致性,可修復文件

    日志位置:/var/lib/nfs/
    NFS 配置文件:
    /etc/exports
    /etc/exports.d/\*.exports

    3.4 NFS 配置

    /dir 主機1(opt1,opt2) 主機2(opt1,opt2)...

    格式

    • #號開始為注釋
    • 主機格式單個主機:ipv4,ipv6,FQDN IP networks:兩種掩碼格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16 wildcards:主機名通配,例如*.magedu.com,IP不可以 netgroups:NIS域的主機組,@group_name anonymous:表示使用*通配所有客戶端
    • 每個條目指定目錄導出到的哪些主機,及相關的權限和選項
    默認選項:(ro,sync,root_squash,no_all_squash) ro,rw 只讀和讀寫 async 異步,數據變化后不立即寫磁盤,性能高 sync (1.0.0后為默認)同步,數據在請求時立即寫入共享存儲磁盤 root_squash (默認)遠程root映射為nfsnobody,UID為65534,CentOS8 為nobody,早期版本是4294967294 (nfsnobody) no_root_squash 遠程root映射成root用戶 all_squash 所有遠程用戶(包括root)都變成nfsnobody,CentOS8 為nobody no_all_squash (默認)保留共享文件的UID和GID anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用
    • 配置示例
    vim /etc/exports /myshare server.example.com /myshare *.example.com /myshare server?.example.com /myshare server[0-20].example.com /myshare 172.25.11.10 /myshare 172.25.0.0/16 /myshare 2000:472:18:b51:c32:a21 /myshare 2000:472:18:b51::/64 /myshare *.example.com 172.25.0.0/16 /myshare desktop.example.com(ro) /myshare desktop.example.com(ro) server[0-20].example.com(rw) /myshare diskless.example.com(rw,no_root_squash)

    3.5 NFS 相關工具

    3.5.1 rpcinfo

    rpcinfo 工具可以查看 RPC 相關信息,查看注冊在指定主機的 RPC 程序
    rpcinfo -p hostname
    查看 RPC 注冊程序
    rpcinfo -s hostname
    例子

    [root@centos8 ~]#rpcinfo -pprogram vers proto port service100000 4 tcp 111 portmapper100000 3 tcp 111 portmapper100000 2 tcp 111 portmapper100000 4 udp 111 portmapper100000 3 udp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 36310 status100024 1 tcp 45265 status [root@centos8 ~]#rpcinfo -sprogram version(s) netid(s) service owner100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser100024 1 tcp6,udp6,tcp,udp status 29

    3.5.2 exports

    exportfs:可用于在 NFS 服務器管理 NFS 導出的文件系統
    常用選項:

    • –v 查看本機所有 NFS 共享
    • –r 重讀配置文件,并共享目錄
    • –a 輸出本機所有共享
    • –au 停止本機所有共享

    3.5.3 showmount

    showmount 用來查詢遠程服務器上的 NFS 服務信息。
    showmount -e hostname

    3.5.4 mount.nfs

    mount.nfs工具用于在客戶端掛載網絡文件系統
    掛載 NFS 時,選項參數說明

    • fg(默認)前臺掛載
    • bg 后臺掛載
    • hard(默認)持續請求
    • soft 非持續請求
    • intr 和 hard 配合,請求可中斷
    • rsize 和 wsize 一次讀和寫數據最大字節數,rsize=32768
    • netdev 無網絡不掛載

    提示:基于安全考慮,建議使用 nosuid,nodev,noexec 掛載選項_

    范例:臨時掛載 NFS 共享
    mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
    范例:開機掛載

    vim /etc/fstab 172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0

    3.6 自動掛載文件系統

    可使用 autofs 服務按需要掛載外圍設備,NFS 共享等,并在空閑 5 分鐘后后自動卸載

    3.6.1 相關文件

    軟件包: autofs
    服務文件:/usr/lib/systemd/system/autofs.service
    配置文件:/etc/auto.master

    3.6.2 配置文件格式

    參看幫助:man 5 autofs
    所有導出到網絡中的 NFS 啟用特殊匹配 -host 至“browse”
    范例:/net 目錄可以自動掛載 NFS 共享

    cat /etc/auto.master /net -hosts cd /net/192.168.8.100/ 自動掛載資源有兩種格式:
    相對路徑法:將 mount point 路徑分成 dirname 和 basename 分別配置,
    可能會影響現有的目錄結構
    絕對路徑法:直接匹配全部絕對路徑名稱,不會影響本地目錄結構

    相對路徑法:

  • /etc/auto.master 格式
  • 掛載點的dirname 指定目錄的配置文件路徑
  • 指定目錄的配置文件格式
  • 掛載點的basename 掛載選項 選項設備

    相對路徑例子

    [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/&

    絕對路徑法

  • /etc/auto.master 格式
  • /- 指定配置文件路徑
  • 指定配置文件格式
  • 絕對路徑 掛載選項 選項設備

    絕對路徑例子

    vim /etc/auto.master: /- /etc/auto.direct vim /etc/auto.direct: /foo -fstype=nfs server1:/export/foo /user/local/ -fstype=nfs,vers=3 server1:/usr/local /mnt/cdrom -fstype=iso9660 :/dev/cdrom

    3.7 案例

    3.7.1 目標

    將 NFS 的共享目錄,通過 autofs 發布出來,做為遠程主機用戶的家目錄

    3.7.2 環境準備

    三臺主機
    一臺主機 nfs server,IP:192.168.8.100
    另兩臺當 nfs client,IP:192.168.8.101 和 192.168.8.102

    3.7.3 步驟

    # NFS服務器創建用戶和相應的家目錄,將用戶wang的家目錄共享 useradd -d /data/wang wang Vim /etc/exports.d/test.exports /data/wang *(rw,anonuid=1000,anongid=1000,all_sqush) # 在第一臺NFS客戶端主機192.168.8.101上實現相對路徑法的autofs vim /etc/auto.master /home /etc/homeauto vim /etc/homeauto * -fstype=nfs,vers=3 192.168.8.100:/data/wang/& # 注意:home目錄下其它用戶家目錄無法訪問 # 在第二臺NFS客戶端主機192.168.8.102上實現絕對路徑法的autofs vim /etc/auto.master /- /etc/homeauto vim e/etc/homeauto /home/wang -fstype=nfs,vers=3 nfsserver:/data/wang

    四.SAMBA 服務

    Samba 是基于SMB網絡協議實現的自由軟件,最初由Andrew Tridgell。Samba 為各種
    Microsoft Windows 客戶端提供文件和打印服務,可以作為域控制器(DC)或域成員與
    Microsoft Windows 服務域集成。從版本 4 開始,它支持活動目錄(Active Directory)
    和 Microsoft Windows NT 域。

    另外,Samba 也是巴西的一種最受歡迎的音樂和舞蹈形式。每年狂歡節的主角都是 Samba 舞。

    4.1 SAMBA 服務介紹

    SMB:Server Message Block 服務器消息塊,IBM 發布,最早是 DOS 網絡文件共享協議
    CIFS:common internet file system,微軟于 1996 年將 SMB 改名并加入很多特性的協議
    SAMBA:1991 年 Andrew Tridgell,實現 windows 和 UNIX 相通

    CIFS/SMB 和網絡文件系統(NFS) 是目前在 network-attached(NAS)存儲系統使用最為廣泛的協議。

    SAMBA 官網

    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

    • 安裝和啟動服務
    yum/dnf install samba systemctl start smb systemctl start nmb

    4.3 SAMBA 客戶端工具

    訪問 SAMBA 服務器時使用 UNC 命名規范
    UNC 路徑: Universal Naming Convention 通用命名規范,格式如下

    \\sambaserver\sharename

    4.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 wang >cd directory >get file1 >put file2

    4.3.2 掛載 CIFS 文件系統

    范例:手動掛載

    mount -o user=wang,password=magedu //server//shared /mnt/smb

    范例:開機自動掛載

    cat /etc/fstab # 可以用文件代替用戶名和密碼的輸入 //server/homes /mnt cifs credentials或cred=/etc/smb.txt 0 0cat /etc/smb.txt username=wang #或 user=wang password=password #或 pass=password chmod 600 /etc/smb.txt

    4.4 管理 SAMBA 用戶

    4.4.1 samba 用戶

    相關包:samba-common-tools
    相關工具:smbpasswd pdbedit
    用戶數據庫:/var/lib/samba/private/passdb.tdb
    說明: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

    [root@centos8 ~]#pdbedit -L No builtin backend found, trying to load plugin smb1:1002: smb2:1003: smb3:1004: [root@centos8 ~]#pdbedit -L -v No builtin backend found, trying to load plugin --------------- Unix username: smb1 NT username: Account Flags: [U ] User SID: S-1-5-21-1476810783-3936299954-1329646792-1000 Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513 Full Name: Home Directory: \\linux39\smb1 HomeDir Drive: Logon Script: Profile Path: \\linux39\smb1\profile Domain: CENTOS8 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, 19 Dec 2019 10:02:31 CST Password can change: Thu, 19 Dec 2019 10:02:31 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF --------------- Unix username: smb2 NT username: Account Flags: [U ] User SID: S-1-5-21-1476810783-3936299954-1329646792-1001 Primary Group SID: S-1-5-21-1476810783-3936299954-1329646792-513 Full Name: Home Directory: \\linux39\smb2 HomeDir Drive: Logon Script: Profile Path: \\linux39\smb2\profile Domain: CENTOS8 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, 19 Dec 2019 09:57:36 CST Password can change: Thu, 19 Dec 2019 09:57:36 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ---------------

    查看服務器狀態–smbstatus

    [root@centos8 ~]#smbstatus Samba version 4.9.1 PID Username Group Machine Protocol Version Encryption Signing 45299 smb1 smb1 192.168.39.6 (ipv4:192.168.39.6:55898) NT1 - - Service pid Machine Connected at Encryption Signing smb1 45299 192.168.39.6 Thu Dec 19 10:30:24 AM 2019 CST - - No locked files

    4.5 SAMBA 服務器配置

    amba 配置文件 /etc/smb.conf 格式 ,使用.ini 文件的格式

    全局設置:

    • [global] 服務器通用或全局設置的部分

    特定共享設置:

    • [homes] 用戶的家目錄共享
    • [printers] 定義打印機資源和服務
    • [sharename] 自定義的共享目錄配置
    • 其中:#和;開頭的語句為注釋,大小寫不敏感

    samba 配置中的宏定義:

    • %m 客戶端主機的 NetBIOS 名
    • %M 客戶端主機的 FQDN
    • %H 當前用戶家目錄路徑
    • %U 當前用戶的用戶名
    • %g 當前用戶所屬組
    • %h samba 服務器的主機名
    • %L samba 服務器的 NetBIOS 名
    • %I 客戶端主機的 IP
    • %T 當前日期和時間
    • %S 可登錄的用戶名

    4.5.1 SAMBA 服務器全局配置

    workgroup 指定工作組名稱
    server string 主機注釋信息
    netbios name 指定 NetBIOS 名,注意:netbios name 需要啟動 nmb 服務
    范例:

    [global]workgroup = workgroupnetbios name = linux39

    interfaces 指定服務偵聽接口和 IP
    hosts allow 可用逗號,空格,或 tab 分隔,默認允許所有主機訪問,也可在每個共享獨立
    配置,如:在[global]設置,將應用并覆蓋所有共享設置,可以是以下格式:

    IPv4 network/prefix: 172.16.0.0/24 IPv4 前綴: 172.16.0. IPv4 network/netmask: 172.16.0.0/255.255.255.0 主機名: desktop.example.com 以example.com后綴的主機名: .example.com

    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.%Ilog 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 = /app/dir valid users=wang,@admins writeable = no browseable = no

    4.6 案例

    4.6.1 利用 SAMBA 實現指定目錄共享

    # 在samba服務器上安裝samba包 yum -y install samba # 創建samba用戶和組 groupadd -r admins useradd -s /sbin/nologin -G admins wang smbpasswd -a wang useradd -s /sbin/nologin mage smbpasswd -a mage # 創建samba共享目錄,并設置SElinux mkdir /testdir/smbshare chgrp admins /testdir/smbshare chmod 2775 /testdir/smbshare # samba服務器配置 vim /etc/samba/smb.conf ...省略... [share] path = /testdir/smbshare write list = @admins systemctl enable --now smb nmb # samba客戶端訪問 yum -y install cifs-utils # 用wang用戶掛載smb共享并訪問 mkdir /mnt/wang mount -o username=wang //smbserver/share /mnt/wang echo "Hello wang" >/mnt/wang/wangfile.txt # 用mage用戶掛載smb共享并訪問 mkdir /mnt/mage mount -o username=mage //smbserver/share /mnt/mage touch /mnt/mage/magefile.txt

    4.6.2 實現不同 samba 用戶訪問相同的 samba 共享,實現不同的配置

    # 創建三個samba用戶,并指定密碼為magedu useradd -s /sbin/nologin -r smb1 useradd -s /sbin/nologin -r smb2 useradd -s /sbin/nologin -r smb3 smbpasswd –a smb1 smbpasswd –a smb2 smbpasswd –a smb3 # 修改samba配置文件 Vim /etc/samba/smb.conf # 在workgroup下加一行 config file= /etc/samba/conf.d/%U 說明:%U表示用戶名 [share] Path=/data/dir Read only= NO Guest ok = yes write list=@wheel # 針對smb1和smb2用戶創建單獨的配置文件 Vim /etc/samba/conf.d/smb1 [share] Path=/data/dir1 Read only= NO 等價于writable = yes Create mask=0644 # 說明:默認為744 Vim /etc/samba/conf.d/smb2 [share] path=/data/dir2 systemctl restart smb nmb # 用戶smb1,smb2,smb3訪問share共享目錄,看到目錄是不同目錄 smbclient //sambaserver/share -U smb1%magedu smbclient //sambaserver/share -U smb2%magedu smbclient //sambaserver/share -U smb3%magedu

    五.數據同步 rsync


    在生產環境,有時會需要兩臺主機的特定目錄實現實時同步。比如,將 NFS 共享目錄的
    數據文件,自動實時同步到備份的服務器特定目錄中,這時就會用到 rsync
    rsync 是一款輕量級的備份和遠程拷貝軟件,其通過比較文件的修改時間和大小,在計算機
    和外部硬盤驅動器之間以及在聯網的計算機之間有效地傳輸和同步文件。它通常出現在類
    unix 操作系統上。Rsync 是用 C 編寫的單線程應用程序。rsync 使用的算法是一種增量編碼,
    適用于用于最小化網絡使用。Zlib 可以用于額外的數據壓縮,也可以使用 SSH 或 stunnel
    進行安全加密。

    5.1 數據實時同步技術

    一般企業在使用 rsync 時會配合 inotify 使用,使用 inotify 監聽文件修改情況,一旦文件某些
    屬性改變,就通知 rsync 進行備份

    • inotify + rsync 方式實現數據同步
    • sersync :金山公司周洋在 inotify 軟件基礎上進行開發的,功能更加強大
    工作原理:
    要利用監控服務(inotify),監控同步數據服務器目錄中信息的變化
    發現目錄中數據產生變化,就利用 rsync 服務推送到備份服務器上
    inotify:
    異步的文件系統事件監控機制,利用事件驅動機制,而無須通過諸如 cron 等的輪詢機制來獲取事件,
    linux 內核從 2.6.13 起支持 inotify,通過 inotify 可以監控文件系統中添加、刪除,修改、移動等各種事件
    [root@centos8 ~]#grep -i inotify /boot/config-4.18.0-80.el8.x86_64 CONFIG_INOTIFY_USER=y

    5.2 notify

    5.2.1 notify 需要內核支持

    Linux 支持 inotify 的內核最小版本為 2.6.13,參看 man 7 inotify

    ls -l /proc/sys/fs/inotify #列出下面的文件,說明服務器內核支持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

    inotify 內核參數說明:

    max_queued_events:inotify事件隊列最大長度,如值太小會出現 Event Queue Overflow 誤,默認值:16384 max_user_instances:每個用戶創建inotify實例最大值,默認值:128 max_user_watches:可以監視的文件數量(單進程),默認值:8192 [root@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 100000

    5.2.2 inotify-tools 工具

    inotify-tools 參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
    安裝 inotify-tools:基于 epel 源
    yum install inotify-tools

    inotify-tools 包主要工具:

    • inotifywait: 在被監控的文件或目錄上等待特定文件系統事件(open ,close,delete 等)
      發生,常用于實時同步的目錄監控
    • inotifywatch:收集被監控的文件系統使用的統計數據,指文件系統事件發生的次數統計

    inotifywait 命令常見選項

    • -m, --monitor 始終保持事件監聽
    • -d, --daemon 以守護進程方式執行,和-m 相似,配合-o 使用
    • -r, --recursive 遞歸監控目錄數據信息變化
    • -q, --quiet 輸出少量事件信息
    • –exclude 指定排除文件或目錄,使用擴展的正則表達式匹配的模式實現
    • –excludei 和 exclude 相似,不區分大小寫
    • -o, --outfile 打印事件到文件中,相當于標準正確輸出,注意:使用絕對路徑
    • -s, --syslogOutput 發送錯誤到 syslog 相當于標準錯誤輸出
    • –timefmt 指定時間輸出格式
    • –format 指定的輸出格式;即實際監控輸出內容
    • -e 指定監聽指定的事件,如果省略,表示所有事件都進行監聽

    inotifywait 的–timefmt 時間格式
    參考 man 3 strftime

    • %Y 年份信息,包含世紀信息
    • %y 年份信息,不包括世紀信息
    • %m 顯示月份,范圍 01-12
    • %d 每月的第幾天,范圍是 01-31
    • %H 小時信息,使用 24 小時制,范圍 00-23
    • %M 分鐘,范圍 00-59


    --timefmt "%Y-%m-%d %H:%M"

    inotifywait 的 --format 格式定義

    • %T 輸出時間格式中定義的時間格式信息,通過 --timefmt option 語法格式指定時間信息
    • %w 事件出現時,監控文件或目錄的名稱信息
    • %f 事件出現時,將顯示監控目錄下觸發事件的文件或目錄信息,否則為空
    • %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 文件或目錄被打開
    • moved_to 文件或目錄被移動到監控的目錄中
    • moved_from 文件或目錄從監控的目錄中被移動
    • move 文件或目錄不管移動到或是移出監控目錄都觸發事件
    • access 文件或目錄內容被讀取
    • delete_self 文件或目錄被刪除,目錄本身被刪除
    • unmount 取消掛載

    inotifywait -e create,delete,moved_to,close_write, attrib

    例:使用 inotifywait

    #監控一次性事件 inotifywait /data #持續前臺監控 inotifywait -mrq /data #持續后臺監控,并記錄日志 inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e" #持續前臺監控特定事件 inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib

    5.3 rsync

    rsync 常用于做為 linux 系統下的數據鏡像備份工具,實現實現遠程同步,支持本地復制,
    或者與其他 SSH、rsync 主機同步數據,支持增量備份,配合任務計劃,rsync 能實現定時或
    間隔同步,配合 inotify 或 sersync,可以實現觸發式的實時數據同步。

    官方網站

    軟件包:rsync,rsync-daemon(CentOS 8)
    服務文件:/usr/lib/systemd/system/rsyncd.service
    配置文件:/etc/rsyncd.conf
    端口:873/tcp

    5.3.1 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]/DEST

    rsync 有三種工作方式:

  • 本地文件系統上實現同步。命令行語法格式為上述"Local"段的格式。
  • 本地主機使用遠程 shell 和遠程主機通信。命令行語法格式為上述"Access via
    remote shell"段的格式。
  • 本地主機通過網絡套接字連接遠程主機上的 rsync daemon。命令行語法格式為上述
    "Access viarsync daemon"段的格式。
  • 前兩者的本質是通過本地或遠程 shell,而第 3 種方式則是讓遠程主機上運行 rsyncd
    服務,使其監聽在一個端口上,等待客戶端的連接

    rsync 常見選項

    -v:顯示rsync過程中詳細信息。可以使用"-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傳輸的最大文件大小。可以使用單位后綴,還可以是一個小數值(例如:"-- 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:要求刪除源端已經成功傳輸的文件

    5.3.2 以獨立服務方式運行 rsync

    范例:以獨立服務方式運行 rsync,該服務在備份服務器上運行

    #創建rsync服務器的配置文件 vi /etc/rsyncd.conf uid = root gid = root use chroot = no max connections = 0 ignore errors exclude = lost+found/ log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock reverse lookup = no hosts allow = 192.168.8.0/24 [backup] path = /backup/ comment = backup read only = no auth users = rsyncuser secrets file = /etc/rsync.pass # 服務器端準備目錄 mkdir /backup # 服務器端生成驗證文件 echo "rsyncuser:magedu" > /etc/rsync.pass chmod 600 /etc/rsync.pass # 服務器端啟動rsync服務 rsync --daemon #可加入/etc/rc.d/rc.local實現開機啟動 systemctl start rsyncd #CentOS 7 以上版本 # 客戶端配置密碼文件 echo "magedu" > /etc/rsync.pass chmod 600 /etc/rsync.pass #此為必要項 # 客戶端測試同步數據 rsync -avz --delete --password-file=/etc/rsync.pass /data/ \ rsyncuser@rsync服務器IP::backup

    5.4 同步腳本示例

    • 該同步腳本在需要備份的主機上(客戶端)運行
    #!/bin/bash SRC='/data/htdocs/pics' DEST='rsyncuser@rsync-setver-IP::backup' inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;doFILEPATH=${DIR}${FILE}rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log done

    六.案例

    實現基于分布式的 LAMP 架構,并將 NFS 實時同步到備份服務器

    見此文章----實現 LAMP_數據庫主從_NFS 備份_日志存儲

    總結

    以上是生活随笔為你收集整理的Linux 网络文件共享服务详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。