28 网络文件共享服务
文章目錄
- 網絡文件共享服務
- 本章內容
- 存儲類型
- FTP服務
- NFS服務
- SAMBA服務
- 網絡數據同步
- 1 存儲類型
- 存儲類型分為三種
- 1.1 DAS存儲
- 1.2 NAS存儲
- 但NAS有一個關鍵性問題,即備份過程中的帶寬消耗。與將備份數據流從LAN中轉移出去的存儲區域網(SAN)不同,NAS仍使用網絡進行備份和恢復。NAS 的一個缺點是它將存儲事務由并行SCSI連接轉移到了網絡上。這就是說LAN除了必須處理正常的最終用戶傳輸流外,還必須處理包括備份操作的存儲磁盤請求。
- 1.3 SAN存儲
- SAN的優勢:
- 1.4 三種存儲比較
- SAN與NAS的主要-別體現在文件系統所在的位置
- 三種存儲架構的應用場景
- 2 文件傳輸協議FTP
- 2.1 FTP工作原理介紹
- 兩種模式:從服務器角度
- 命令(控制):客戶端:隨機port ---> 服務器:21/tcp
- 數據:客戶端:隨機port <---服務器:20/tcp
- 命令(控制):客戶端:隨機port ---> 服務器:21/tcp
- 數據:客戶端:隨機port ---> 服務器:隨機port /tcp
- 范例:服務器被動模式數據端口
- FTP服務狀態碼:
- 用戶認證:
- 2.2 常見 FTP 相關軟件
- FTP服務器端軟件
- 客戶端軟件:
- 2.3 vsftpd 軟件介紹
- 由 vsftpd 包提供,不再由xinetd管理
- 用戶認證配置文件:/etc/pam.d/vsftpd
- 啟動服務相關文件:
- 配置文件:
- 配置文件格式:
- 用戶和其共享目錄
- 2.4 vsftpd服務常見配置
- 2.4.1 命令端口
- listen_port=21
- 2.4.2 主動模式端口
- connect_from_port_20=YES 主動模式端口為20
- ftp_data_port=20 (默認) 指定主動模式的端口
- 2.4.3 被動模式端口范圍
- linux 客戶端默認使用被動模式
- windows 客戶端默認使用主動模式
- pasv_min_port=6000 0為隨機分配
- pasv_max_port=6010
- 2.4.4 使用當地時間
- use_localtime=YES 使用當地時間(默認為NO,使用GMT)
- 2.4.5 匿名用戶登錄
- anonymous_enable=YES 支持匿名用戶
- no_anon_password=YES 匿名用戶略過口令檢查 , 默認NO
- 2.4.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.4.7 指定匿名用戶的上傳文件的默認的所有者和權限
- chown_uploads=YES 默認NO
- chown_username=wang
- chown_upload_mode=0644
- 2.4.8 Linux系統用戶
- local_enable=YES 是否允許linux用戶登錄
- write_enable=YES 允許linux用戶上傳文件
- local_umask=022 指定系統用戶上傳文件的默認權限
- 2.4.9 將系統用戶映射為指定的guest用戶
- guest_enable=YES 所有系統用戶都映射成guest用戶
- guest_username=ftp 配合上面選項才生效,指定guest用戶
- local_root=/ftproot guest用戶登錄所在目錄
- 2.4.10 禁錮系統用戶
- 禁錮所有系統在家目錄中
- 禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反
- 2.4.11 日志
- wu-ftp日志:默認啟用
- vsftpd日志:默認不啟用
- 2.4.12 提示信息
- 登錄提示信息
- 目錄訪問提示信息
- 2.4.13 PAM模塊實現用戶訪問控制
- pam_service_name=vsftpd
- pam配置文件:/etc/pam.d/vsftpd
- /etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄
- 2.4.14 是否啟用控制用戶登錄的列表文件
- userlist_enable=YES 此為默認值
- userlist_deny=YES(默認值) 黑名單,不提示口令,NO為白名單
- userlist_file=/etc/vsftpd/users_list 此為默認值
- 2.4.15 連接數限制
- max_clients=0 最大并發連接數
- max_per_ip=0 每個IP同時發起的最大連接數
- 2.4.16 傳輸速率,字節/秒
- anon_max_rate=0 匿名用戶的最大傳輸速率
- local_max_rate=0 本地用戶的最大傳輸速率
- 2.4.17 連接時間:秒為單位
- connect_timeout=60 主動模式數據連接超時時長
- accept_timeout=60 被動模式數據連接超時時長
- data_connection_timeout=300 數據連接無數據輸超時時長
- idle_session_timeout=60 無命令操作超時時長
- 2.4.18 優先以文本方式傳輸
- scii_upload_enable=YES
- ascii_download_enable=YES
- 2.4.19 實現基于SSL的FTPS
- 查看是否支持SSL
- 范例:
- 配置vsftpd服務支持SSL:
- 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虛擬用戶
- 環境準備
- 本實驗在兩臺CentOS主機上實現, CentOS 7 一臺做為FTP服務器,一臺做數據庫服務器
- 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
- 對于 centos 6:pam_mysql由EPEL的源中提供
- 對于 centos7 和 8:無對應rpm包,需手動編譯安裝
- 2.5.2.5 在FTP服務器上建立pam認證所需文件
- 注意:以上參考 README文檔
- crypt 加密方式:
- 配置字段說明
- 2.5.2.6 建立相應用戶和修改vsftpd配置文件
- 2.5.2.7 在FTP服務器上配置虛擬用戶具有不同的訪問權限
- 3 NFS服務
- 3.1 NFS工作原理
- 3.2 NFS軟件介紹
- 軟件包:nfs-utils
- 相關軟件包:rpcbind(必須),tcp_wrappers
- Kernel支持:nfs.ko
- 端口:2049(nfsd), 其它端口由portmap(111)分配
- NFS服務主要進程:
- 日志:/var/lib/nfs/
- NFS配置文件:
- /etc/exports
- /etc/exports.d/*.exports
- 3.3 NFS共享配置文件格式
- 格式說明:
- \#開始為注釋
- 主機格式:
- 每個條目指定目錄導出到的哪些主機,及相關的權限和選項
- 范例:NFS配置示例
- 3.4 NFS工具
- 3.4.1 rpcinfo
- rpcinfo 工具可以查看RPC相關信息
- 查看注冊在指定主機的RPC程序
- 查看RPC注冊程序
- 范例:rpcinfo
- 3.4.2 exportfs
- exportfs:可用于管理NFS導出的文件系統
- 常見選項:
- 3.4.3 showmount
- 常見用法:
- 3.4.4 mount.nfs
- 客戶端NFS掛載
- NFS相關的掛載選項:man 5 nfs
- 提示:基于安全考慮,建議使用nosuid,nodev,noexec掛載選項_
- 范例:臨時掛載NFS共享
- 范例:開機掛載
- 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共享
- 自動掛載資源有兩種格式:
- 相對路徑法:
- /etc/auto.master 格式
- 指定目錄的配置文件格式
- 范例:相對路徑法
- 范例:相對路徑法為支持通配符
- 絕對路徑法
- /etc/auto.master 格式
- 指定配置文件格式
- 范例:絕對路徑法
- 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 步驟
- 4 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
- 范例:
- 4.3 SAMBA客戶端工具
- UNC路徑: Universal Naming Convention,通用命名規范,格式如下
- 4.3.1 使用smbclient 訪問SAMBA服務器
- 4.3.2 掛載CIFS文件系統
- 范例:手動掛載
- 范例:開機自動掛載
- 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用戶:
- 修改用戶密碼:
- 刪除用戶和密碼:
- 查看samba用戶列表:
- 范例:
- 查看samba服務器狀態:
- 范例:
- 4.5 SAMBA服務器配置
- samba 配置文件 /etc/smb.conf 格式 ,使用.ini文件的格式
- 用 [ ] 分分成以下幾部分
- 全局設置:
- 特定共享設置:
- samba配置中的宏定義:
- 4.5.1 SAMBA服務器全局配置
- workgroup 指定工作組名稱
- server string 主機注釋信息
- netbios name 指定NetBIOS名,注意:netbios name需要啟動nmb服務
- 范例:
- interfaces 指定服務偵聽接口和IP
- hosts allow 可用逗號,空格,或tab分隔,默認允許所有主機訪問,也可在每個共享獨立配置,如在[global]設置,將應用并覆蓋所有共享設置,可以是以下格式:
- 范例:
- hosts deny 拒絕指定主機訪問,格式和hosts allow 相同
- config file=/etc/samba/conf.d/%U 用戶獨立的配置文件
- Log file=/var/log/samba/log.%I 不同客戶機采用不同日志
- log level = 2 日志級別,默認為0,不記錄日志
- 范例:
- max log size=50 日志文件達到50K,將輪循rotate,單位KB
- Security三種認證方式:
- passdb backend = tdbsam 密碼數據庫格式
- 4.5.2 配置特定目錄共享
- 每個共享目錄應該有獨立的[ ]部分
- [共享名稱] 遠程網絡看到的共享名稱
- 范例:基于特定用戶和組的共享
- 4.6 實戰案例
- 4.6.1 實戰案例:利用SAMBA實現指定目錄共享
- 4.6.2 實戰案例2:實現不同samba用戶訪問相同的samba共享,實現不同的配置
- 5 數據的實時同步
- 在生產環境,有時會需要兩臺主機的特定目錄實現實時同步。比如,將NFS共享目錄的數據文件,自動實時同步到備份的服務器特定目錄中
- 5.1 實時同步技術介紹
- 實現實時同步的方法
- 工作原理:
- inotify:
- 實現inotify軟件:
- inotify+rsync使用方式
- 5.2 實現inotify
- 5.2.1 內核支持
- 內核是否支持inotify
- inotify內核參數說明:
- 范例:
- 5.2.2 inotify-tools工具
- inotify-tools參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
- 安裝inotify-tools:基于epel源
- inotify-tools包主要工具:
- inotifywait 命令常見選項
- inotifywait 的--timefmt 時間格式
- 參考 man 3 strftime
- inotifywait 的 --format 格式定義
- 范例:
- inotifywait -e 選項指定的事件類型
- 范例:
- 范例:使用inotifywait
- 5.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 格式
- rsync有三種工作方式:
- 前兩者的本質是通過本地或遠程shell,而第3種方式則是讓遠程主機上運行rsyncd服務,使其監聽在一個端口上,等待客戶端的連接。
- 常見選項:
- 5.3.2 以獨立服務方式運行rsync
- 范例:以獨立服務方式運行 rsync
- 5.4 創建inotify_rsync.sh腳本
- 5.5 實戰案例:實現基于分布式的LAMP架構,并將NFS實時同步到備份服務器
網絡文件共享服務
本章內容
-
存儲類型
-
FTP服務
-
NFS服務
-
SAMBA服務
-
網絡數據同步
1 存儲類型
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-O4DEQz7f-1577107595321)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130012238.png)]
-
存儲類型分為三種
- 直連式存儲:Direct-Attached Storage,簡稱DAS
- 網絡附加存儲:Network-Attached Storage,簡稱NAS
- 存儲區域網絡:Storage Area Network,簡稱SAN
1.1 DAS存儲
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZYsNkfkb-1577107595323)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130159383.png)]
- DAS存儲是最常見的一種存儲方式,尤其是在中小企業應用中。PC中的硬盤或只有一個外部SCSI接口的JBOD都屬于DAS架構。DAS是指存儲設備直接連接到服務器總線上,存儲設備只與一臺獨立的主機連接,其他主機不能使用這個存儲設備。DAS存儲設備與服務器主機之間的連接通道通常采用SCSI連接,DAS存儲設備主要是磁盤陣列(RAID: Redundant Arrays of Independent Disks)、磁盤簇(JBOD:Just a Bunch Of Disks)等。
1.2 NAS存儲
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7xIrosEs-1577107595324)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130252166.png)]
- 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存儲
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-q6aQvGTQ-1577107595324)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223130455456.png)]
-
存儲區域網絡(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的主要-別體現在文件系統所在的位置
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YrtchMJr-1577107595325)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223131404546.png)]
-
三種存儲架構的應用場景
- 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
-
- 主動(PORT style):服務器主動連接
-
范例:服務器被動模式數據端口
- 227 Entering Passive Mode (172,16,0,1,224,59)
- 服務器數據端口為:224*256+59
-
FTP服務狀態碼:
-
1XX:信息 125:數據連接打開
-
2XX:成功類狀態 200:命令OK 230:登錄成功
-
3XX:補充類 331:用戶名OK
-
4XX:客戶端錯誤 425:不能打開數據連接
-
5XX:服務器錯誤 530:不能登錄
-
-
用戶認證:
- 匿名用戶:ftp,anonymous,對應Linux用戶ftp
- 系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
- 虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
2.2 常見 FTP 相關軟件
-
FTP服務器端軟件
- Wu-ftpd
- Proftpd
- Pureftpd
- Filezilla Server
- Serv-U
- Wing FTP Server
- IIS
-
vsftpd:Very Secure FTP Daemon,CentOS 默認FTP服務器;
- 高速,穩定,下載速度是WU-FTP的兩倍
- ftp.redhat.com數據:單機最多可支持15000個并發
-
客戶端軟件:
-
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)
-
filezilla,FTP Rush,CuteFtp,FlashFXP,LeapFtp
-
IE ftp://username:password@ftpserver
2.3 vsftpd 軟件介紹
-
由 vsftpd 包提供,不再由xinetd管理
-
用戶認證配置文件:/etc/pam.d/vsftpd
-
啟動服務相關文件:
- /usr/lib/systemd/system/vsftpd.service
- /etc/rc.d/init.d/vsftpd
-
配置文件:
- /etc/vsftpd/vsftpd.conf
- 幫助:man 5 vsftpd.conf
-
配置文件格式:
- option=value
- 注意:= 前后不要有空格
-
用戶和其共享目錄
- 匿名用戶(映射為系統用戶ftp )共享文件位置:/var/ftp
- 系統用戶共享文件位置:用戶家目錄
- 虛擬用戶共享文件位置:為其映射的系統用戶的家目錄
2.4 vsftpd服務常見配置
2.4.1 命令端口
-
listen_port=21
2.4.2 主動模式端口
-
connect_from_port_20=YES 主動模式端口為20
-
ftp_data_port=20 (默認) 指定主動模式的端口
2.4.3 被動模式端口范圍
-
linux 客戶端默認使用被動模式
-
windows 客戶端默認使用主動模式
-
pasv_min_port=6000 0為隨機分配
-
pasv_max_port=6010
2.4.4 使用當地時間
-
use_localtime=YES 使用當地時間(默認為NO,使用GMT)
2.4.5 匿名用戶登錄
-
anonymous_enable=YES 支持匿名用戶
-
no_anon_password=YES 匿名用戶略過口令檢查 , 默認NO
2.4.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.4.7 指定匿名用戶的上傳文件的默認的所有者和權限
-
chown_uploads=YES 默認NO
-
chown_username=wang
-
chown_upload_mode=0644
2.4.8 Linux系統用戶
-
local_enable=YES 是否允許linux用戶登錄
-
write_enable=YES 允許linux用戶上傳文件
-
local_umask=022 指定系統用戶上傳文件的默認權限
2.4.9 將系統用戶映射為指定的guest用戶
-
guest_enable=YES 所有系統用戶都映射成guest用戶
-
guest_username=ftp 配合上面選項才生效,指定guest用戶
-
local_root=/ftproot guest用戶登錄所在目錄
2.4.10 禁錮系統用戶
-
禁錮所有系統在家目錄中
- chroot_local_user=YES 禁錮系統用戶,默認NO,即不禁錮
-
禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
- 當chroot_local_user=YES時,則chroot_list中用戶不禁錮
- 當chroot_local_user=NO時,則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 ,此為默認值
2.4.13 PAM模塊實現用戶訪問控制
-
pam_service_name=vsftpd
-
pam配置文件:/etc/pam.d/vsftpd
-
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄
2.4.14 是否啟用控制用戶登錄的列表文件
-
userlist_enable=YES 此為默認值
-
userlist_deny=YES(默認值) 黑名單,不提示口令,NO為白名單
-
userlist_file=/etc/vsftpd/users_list 此為默認值
2.4.15 連接數限制
-
max_clients=0 最大并發連接數
-
max_per_ip=0 每個IP同時發起的最大連接數
2.4.16 傳輸速率,字節/秒
-
anon_max_rate=0 匿名用戶的最大傳輸速率
-
local_max_rate=0 本地用戶的最大傳輸速率
2.4.17 連接時間:秒為單位
-
connect_timeout=60 主動模式數據連接超時時長
-
accept_timeout=60 被動模式數據連接超時時長
-
data_connection_timeout=300 數據連接無數據輸超時時長
-
idle_session_timeout=60 無命令操作超時時長
2.4.18 優先以文本方式傳輸
-
scii_upload_enable=YES
-
ascii_download_enable=YES
2.4.19 實現基于SSL的FTPS
-
查看是否支持SSL
ldd `which vsftpd` #查看到libssl.so -
范例:
[root@centos8 ~]#ldd which vsftpd|grep libssl
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f8878e2c000)
-
配置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等工具測試[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oh2mAChc-1577107595326)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223141639196.png)]
2.5 vsftpd 虛擬用戶
-
虛擬用戶:
- 所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號的家目錄
- 各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
-
虛擬用戶帳號的存儲方式:
-
文件:編輯文本文件,此文件需要被編碼為hash格式
-
奇數行為用戶名
-
偶數行為密碼
db_load -T -t hash -f vusers.txt vusers.db
-
-
關系型數據庫中的表中:實時查詢數據庫完成用戶認證
-
vsftpd 支持mysql庫:pam要依賴于pam-mysql
- /lib64/security/pam_mysql.so
- /usr/share/doc/pam_mysql-0.7/README
-
2.5.1 實現基于文件驗證的vsftpd虛擬用戶
2.5.1.1 創建用戶數據庫文件
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.db2.5.1.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.5.1.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/vusers2.5.1.4 指定pam配置文件
vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vuser pam_service_name=vsftpd.db2.5.1.5 虛擬用戶建立獨立的配置文件
#指定各個用戶配置文件存放的路徑 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/ftproot22.5.2 實現基于MYSQL驗證的vsftpd虛擬用戶
-
環境準備
-
本實驗在兩臺CentOS主機上實現, CentOS 7 一臺做為FTP服務器,一臺做數據庫服務器
-
2.5.2.1 在數據庫服務器上安裝mysql數據庫
yum –y install mariadb-server systemctl enable --now mariadb.service2.5.2.2 在數據庫服務上配置數據庫支持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.5.2.3 在FTP服務器上安裝vsftpd 和 pam_mysql包
yum install vsftpd -y2.5.2.4 在FTP服務器上安裝 pam_mysql
-
對于 centos 6:pam_mysql由EPEL的源中提供
yum install pam_mysql -y -
對于 centos7 和 8:無對應rpm包,需手動編譯安裝
#安裝相關包 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.gz tar 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.5.2.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.5.2.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 vsftpd2.5.2.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 NFS服務
3.1 NFS工作原理
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cXrrJn5e-1577107595326)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223142809038.png)]
-
NFS:Network File System 網絡文件系統,基于內核的文件系統。Sun公司開發,通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,基于RPC(Remote Procedure Call Protocol 遠程過程調用)實現
-
RPC采用C/S模式,客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-K8R5ZtLR-1577107595327)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223142925620.png)]
-
NFS優勢:節省本地存儲空間,將常用的數據,如:/home目錄,存放在NFS服務器上且可以通過網絡訪問,本地終端將可減少自身存儲空間的使用
3.2 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.3 NFS共享配置文件格式
/dir 主機1(opt1,opt2) 主機2(opt1,opt2)...-
格式說明:
-
#開始為注釋
-
主機格式:
單個主機:ipv4,ipv6,FQDN IP networks:兩種掩碼格式均支持172.18.0.0/255.255.0.0172.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使用
-
-
范例:NFS配置示例
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.4 NFS工具
3.4.1 rpcinfo
-
rpcinfo 工具可以查看RPC相關信息
-
查看注冊在指定主機的RPC程序
rpcinfo -p hostname -
查看RPC注冊程序
rpcinfo –s hostname -
范例:rpcinfo
[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.4.2 exportfs
-
exportfs:可用于管理NFS導出的文件系統
-
常見選項:
- –v 查看本機所有NFS共享
- –r 重讀配置文件,并共享目錄
- –a 輸出本機所有共享
- –au 停止本機所有共享
3.4.3 showmount
-
常見用法:
showmount -e hostname
3.4.4 mount.nfs
-
客戶端NFS掛載
-
NFS相關的掛載選項:man 5 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.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共享
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.directvim /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/wang4 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 nmb
4.3 SAMBA客戶端工具
-
UNC路徑: Universal Naming Convention,通用命名規范,格式如下
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 file24.3.2 掛載CIFS文件系統
-
范例:手動掛載
-
范例:開機自動掛載
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 --------------- -
查看samba服務器狀態:
smbstatus -
范例:
[root@centos8 ~]#smbstatus Samba version 4.9.1 PID Username Group Machine Protocol Version Encryption Signing -------------------------------------------------------------------------------- -------------------------------------------------------- 45299 smb1 smb1 1 92.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服務器配置
-
samba 配置文件 /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 = @adminssystemctl 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.txt4.6.2 實戰案例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 #說明:默認為744Vim /etc/samba/conf.d/smb2 [share] path=/data/dir2systemctl restart smb nmb#用戶smb1,smb2,smb3訪問share共享目錄,看到目錄是不同目錄 smbclient //sambaserver/share -U smb1%magedu smbclient //sambaserver/share -U smb2%magedu smbclient //sambaserver/share -U smb3%magedu5 數據的實時同步
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-95ARsVUk-1577107595328)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223151647197.png)]
-
在生產環境,有時會需要兩臺主機的特定目錄實現實時同步。比如,將NFS共享目錄的數據文件,自動實時同步到備份的服務器特定目錄中
5.1 實時同步技術介紹
-
實現實時同步的方法
- 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
-
-
實現inotify軟件:
- inotify-tools
- sersync
- lrsyncd
-
inotify+rsync使用方式
- inotify 對同步數據目錄信息的監控
- rsync 完成對數據的同步
- 利用腳本進行結合
5.2 實現inotify
5.2.1 內核支持
-
內核是否支持inotify
-
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,可以實現觸發式的實時數據同步
-
官方網站: 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]/DEST -
rsync有三種工作方式:
- 本地文件系統上實現同步。命令行語法格式為上述"Local"段的格式。
- 本地主機使用遠程shell和遠程主機通信。命令行語法格式為上述"Access via remote shell"段的格式。
- 本地主機通過網絡套接字連接遠程主機上的rsync daemon。命令行語法格式為上述"Access via rsync daemon"段的格式。
-
前兩者的本質是通過本地或遠程shell,而第3種方式則是讓遠程主機上運行rsyncd服務,使其監聽在一個端口上,等待客戶端的連接。
-
常見選項:
-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傳輸的最大文件大小??梢允褂脝挝缓缶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:要求刪除源端已經成功傳輸的文件
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 創建inotify_rsync.sh腳本
#!/bin/bash SRC='/data/' DEST='rsyncuser@rsync服務器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 done5.5 實戰案例:實現基于分布式的LAMP架構,并將NFS實時同步到備份服務器
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MjCRZZLo-1577107595329)(%E6%88%AA%E5%9B%BE/2019%E5%B9%B411%E6%9C%8821%E6%97%A5/image-20191223153905577.png)]
總結
以上是生活随笔為你收集整理的28 网络文件共享服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于今天参加学校ACM比赛的感想
- 下一篇: 小程序--获取手机型号