FTP,SAMBA,NFS之間的區別
FTP Windows/linux/unix/macOS等 發布網站,文件共享 Tcp/21
Samba Windows/linux 文件共享(網上鄰居) Tcp/445,tcp/139
NFS Linux/unix 網站發布,文件共享(mount) Tcp/2049
samba
能夠將本地共享的目錄通過文件系統接口方式輸出給客戶端,客戶端可以使用mount命令掛載??蛻舳丝梢允褂冕槍Ρ镜匚募到y命令操作該目錄,比如ls… samba是smb協議的實現。更為通用的叫法是cifs協議的實現。 可以實現windows和Linux之間文件共享和打印服務共享。
smb:Service Message Block;服務信息塊 cifs:Common Internet File System 通用互聯網文件系統
samba:作者-Andrew Tridgell;
功能:
文件系統共享; NetBIOS協議; windows主機在網上鄰居中可以搜索到網絡中主機的主機名;workgroup 使用的就是廣播方式的netbios協議。 要使windows主機能夠找到啟用samba的Linux主機,Linux主機也需要支持NetBIOS協議。 NetBIOS要求主機名不能超過15個字符。 NetBIOS僅是本地網絡使用的網絡協議。 打印服務;基于samba能夠實現打印機共享給基于smb或cifs的所有的客戶端。
samba通信模型:兩種
peer to peer(Work Group模型) 主機對主機 domain devel 域模型 LDAP:Lightweight Directory Access Protocol 輕量級訪問協議 寫入性能不是很好,但是查詢性能非常好 windows將LDAP協議以域的方式實現。 DEC域控制器
samba運行原理
samba可以使用匿名賬號登錄文件系統 samba認證是使用系統用戶的用戶名,不是系統用戶登錄系統的賬號和密碼。 windows上配置文件共享,開啟認證功能,一般是使用主機上用戶名和密碼。
安裝samba:
程序環境: samba集成在centos中默認。分為三類程序
samba.x8664 ##服務端程序 samba-client.x8664 ##客戶端程序
samba-common.x86_64 ##公共組件,客戶端和服務端都依賴此包 samba4-libs.x8664 ##服務端和客戶端都會用到庫文件 samba-common-tools.x8664 ##samba服務端和客戶端工具 需要內核支持SMB/CIFS協議默認一般都是支持的。
samba程序文件介紹
配置文件: /etc/samba/smb.conf 主程序:有兩個 實現samba協議和NetBIOS協議 nmbd:Network Naming Service, NetBIOS 如果僅是在類Unix主機之上實現文件共享,不需要此服務 windows共享需要名稱解析,如果有windows主機使用該服務需要此服務。 smbd:SMB/CIFS Service; Unit File: /usr/lib/systemd/system/nmb.service /usr/lib/systemd/system/smb.service 監聽的端口: 137/udp, 138/udp 139/tcp, 445/tcp 客戶端程序: mount -t cifs = mount.cifs smbclient:交互式命令行客戶端工具;命令行的訪問工具
samba的配置:
主配置文件 由samba-common包提供
/etc/samba/smb.conf [root@centos7 ~]# grep -i -E "^#+[[:space:]]*(-|=)+.*" /etc/samba/smb.conf #======================= Global Settings ===================================== ### 全局配置段 # ----------------------- Network-Related Options ------------------------- ### 網絡相關配置 # --------------------------- Logging Options ----------------------------- ### 日志選項 # ----------------------- Standalone Server Options ------------------------ ### 獨立服務選項 # ----------------------- Domain Members Options ------------------------ ### 域成員配置 # ----------------------- Domain Controller Options ------------------------ ### 域控制配置 # ----------------------- Browser Control Options ---------------------------- ### 瀏覽者控制選項 #----------------------------- Name Resolution ------------------------------- ### 名稱解析 # --------------------------- Printing Options ----------------------------- ### 打印相關選項 # --------------------------- File System Options --------------------------- ### 文件系統相關 #============================ Share Definitions ============================== ### 共享定義配置段
兩類配置段:
全局配置段
網絡相關配置選項 workgroup = MYGROUP 工作組模型中的工作組名稱。windows一般用的是workgroup server string = Samba Server Version %v 鼠標懸停到網絡主機上顯示提示信息 interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 指明要監聽的地址或網絡接口; hosts allow = 127. 192.168.12. 192.168.13. 運行訪問的主機網段 127網段192.168.12網段可以訪問 netbios name = MYSERVER 當前主機被網絡其他電腦使用netbios解析到主機名 注意:samba一般是內部服務用所以interface一般只是監聽在本地某個接口或地址上,一般不指定某個網段,很少進行夸網段共享。 日志相關選項 log file = /var/log/samba/log.%m 日志文件路徑%m代表一個客戶端的ip地址 max log size = 50 日志大小 獨立服務選項 security = user ###定義全級別 share (depricated)廢棄選項 server (depricated)廢棄選項 user 用戶登錄必須使用賬號和密碼登錄 passdb backend = tdbsam ###定義密碼到一個tdb方式編碼的庫。 打印選項 load printers = yes ###開啟打印服務 cups options = raw
共享文件系統配置段
每一個共享都要使用一個獨立的配置段 [shared_ID]:定義共享名稱,在網絡上鄰居中顯示的資源名稱。 配置段選項有三類: [homes]:每個samba用戶是否能夠通過samba服務訪問自己的家目錄; 不是所有系統用戶都是samba用戶,只有有了samba賬號密碼的系統用戶才是 [printers]:打印服務; [shared_FS]:用戶自定義的共享目錄; home和shared配置中常用指令: comment:注釋信息; path:本地文件系統路徑;類似url映射本地文件系統該路徑。 browseable: 是否可瀏覽,是否為用戶可見;是否允許屬組合主用戶瀏覽samba服器上的共享資源名稱。 guest ok:是否允許來賓賬號訪問; public:是否公開給所有來賓; writable:是否可寫;需要雙授權,文件系統可寫,服務可寫 read only = no write list:擁有寫權限的用戶或組列表; 用戶名 @組名, +組名
samba用戶管理:
smbpasswd, pdbedit smbpasswd [OPTIONS] USERNAME ###username必須問系統用戶 -a:添加 -x:刪除 -d:禁用 -e:啟用 pdbedit: -L:列出samba服務中的所有用戶; -a:添加用戶為samba用戶; -u USERNAME: -x:刪除 -t:從標準輸出接收密碼;
訪問服務:
啟動服務 服務端啟動服務:systemctl status nmb smb 創建系統用戶centos 為用戶創建用密碼pdbedit -au centos
(1) smbclient交互式客戶端程序: (1) 查看目標服務上的共享,自己有權查看的共享。 smbclient -L SMB_SERVER [-U USERNAME] ##-U大寫的 [root@centos6 ~]# smbclient -L 192.168.197.129 -U centos ###centos用戶使用密碼查看 Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] Sharename Type Comment ###共享資源名稱信息 --------- ---- ------- IPC$ IPC IPC Service (Samba Server Version 4.2.3) centos Disk Home Directories ###共享的目錄 Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] Server Comment ###服務器信息 --------- ------- CENTOS7 Samba Server Version 4.2.3 LOCALHOST Samba Server Version 4.2.3 Workgroup Master --------- ------- MYGROUP LOCALHOST [root@centos6 ~]# smbclient -L 192.168.197.129 使用匿名用戶查看 Enter root's password: ###不需輸入任何密碼 Anonymous login successful (2) 訪問共享服務 smbclient //SMB_SERVER[/SHARE_NAME] [-U USERNAME] ##-U大寫的 [root@centos6 ~]# smbclient //192.168.197.129/home -U centos Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] tree connect failed: NT_STATUS_BAD_NETWORK_NAME [root@centos6 ~]# smbclient //192.168.197.129/homes -U centos Enter centos's password: Domain=[MYGROUP] OS=[Windows 6.1] Server=[Samba 4.2.3] smb: \> ls . D 0 Tue Oct 18 16:12:19 2016 .. D 0 Tue Oct 18 16:12:19 2016 .mozilla DH 0 Fri Oct 14 21:35:44 2016 .bash_logout H 18 Fri Nov 20 13:02:30 2015 .bash_profile H 193 Fri Nov 20 13:02:30 2015 .bashrc H 231 Fri Nov 20 13:02:30 2015 61410 blocks of size 524288. 61345 blocks available smb: \> help ? allinfo altname archive blocksize cancel case_sensitive cd chmod chown close del dir du echo exit get getfacl geteas hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink print prompt put pwd q queue quit readlink rd recurse reget rename reput rm rmdir showacls setea setmode stat symlink tar tarmode timeout translate unlock volume vuid wdel logon listconnect showconnect .. ! 常用命令 put mget ls cd mkdir pwd del ... lcd 切換本地工作目錄 (2)mount.cifs mount -t cifs //SMB_SERVER/SHARED_ID /MOUNT_POINT -o username=USER,password=PASS 注意:掛載操作中的用戶,與-o選項中指定的用戶直接產生映射關系;訪問掛載,是以-o選項指定的用戶身份運行,與本地用戶以ID產生映射; /SHARED_ID 可以不輸入 SHARED_ID就是配置段中共享文件系統設置中的[SHARED_ID]
[root@centos6 ~]# mount -t cifs //192.168.197.129/homes /mnt -o user=centos,password=yang [root@centos6 ~]# mount //192.168.197.129/homes on /mnt type cifs (rw)
自定義共享的方式:
修改主配置文件,、/etc/samba/smb.cof,在共享文件系統配置段加入下面的配置即可定義自定義共享
[shared_ID] ###共享資源名和本地文件系統路徑名可以不一致。隨便起 comment = ###注釋信息 path = ###文件系統路徑 guest ok = ###是否允許其來賓用戶訪問 read only = ###是否只讀,不是只讀就是可讀寫 public = ###是否為所有人可見,來賓,匿名用戶。 browseable = ###瀏覽控制,非屬組合屬主用戶是否可見資源。 write list = ###有寫權限的用戶,相當于黑名單。 注意:writable = yes 不能與write list共存。否則用戶還是有寫權限。 write list可以使用組來定義一個組內的用戶都是否擁有寫權限。 write list = +GROUPNAME ##注意要有個加號。 注意:只要用戶擁有服務的寫權限,就能刪除文件,哪怕屬主不是他。 注意:定義所用戶在服務級的寫權限write = yes (read only = no)不建議與write list同時使用;
檢查配置文件是否有語法錯誤:testparm命令
查詢samba服務器狀態
smbstatus命令: 顯示samba服務的相關共享的訪問狀態信息; -b:顯示簡要格式信息; -v:顯示詳細格式信息; Samba version 4.2.3 PID Username Group Machine Protocol Version ------------------------------------------------------------------------------ 40302 nobody nobody 192.168.197.128 (ipv4:192.168.197.128:43946) NT1 Service pid machine Connected at ------------------------------------------------------- public 40302 192.168.197.128 Tue Oct 18 05:21:50 2016 No locked files
總結:
C/S架構。用戶以系統用戶身份登錄指定的共享資源。沒有默認登錄根目錄。
samba的用戶必須為系統用戶,但是密碼是單獨設置的??梢允褂胹mbpasswd, pdbedit為用戶設置密碼。用戶登錄samba服務后都是以系統用戶身份登錄。共享資源要給予相應授權才能讀寫查看。
samba的工作模型,工作組模型,域控制器模型。一般文件共享工作組模型就可以了。
設置共享目錄。要修改主配置文件/etc/samba/smb.conf文件。在共享文件系統配置段,定義該目錄的共享。定義好后需要使用testparm命令測試語法。
samba有匿名用戶,guest來賓用戶。匿名用戶使用nobody這個系統用戶登錄。共享文件系統配置中控制目錄是否可讀寫。是否可瀏覽到
登錄samba服務器必須制定要訪問資源名稱shared_id否則不能的登錄,需要事先查詢都有哪些資源。或用戶自己就知道資源。
samba可使用udp協議也可以使用tcp協議。根據客戶端與服務端的協商。
udp137,138 tcp139,445
samba提供的共享資源是可以掛在到其他主機上的。
mount -t cifs或使用mount.cifs
注意:掛載點無論是什么權限,只要掛載了cifs共享目錄,該目錄就是服務端遠程主機的上共享目錄的權限,屬主和屬組。
這掛在點就是samba服務器上共享目錄的映射(權限,uid,gid),呈現在客戶端。客戶端的用戶操作該掛載點,就想操作本地文件系統一樣。只要本機有與之對應的uid或gid的用戶就能擁有該目錄的權限。但是客戶端主機對掛載點的操作,是根據服務器授權的。
客戶端主機對共享資源的掛在點權限是登錄賬號(服務端的系統用戶)在服務端主機服務和文件系統的授權的交集,并且客戶端主機有gid或uid與服務端共享目錄的uid和gid相同,才會有屬主和數組權限。
最重要的:權限的最終權限決定于本地文件系統授權和服務授權的交集,其次才是客戶端是否有與之對應uid或gid的用戶,否者就只能是其他人身份(但是其他人身份,guest用戶或匿名用戶的授權又取決于服務授權)。
實現了類似UIDmap功能。只要uid本機中有,就認為是本地主機上的文件。并擁有響應權限。服務端說這個文件是誰的就是誰的。inux只認uid和gid,拿著自己家的鑰匙打開任意一家的門,而且還是主人身份。
服務端共享目錄的權限及屬主屬組
[root@centos7 ~]# ll -d /home/samba/ drwxrwxr-x. 3 centos centos 27 Oct 18 07:58 /home/samba/ [root@centos7 ~]# id centos uid=1001(centos) gid=1001(centos) groups=1001(centos)
客戶端掛在后,掛載點權限屬主和屬組的變化
[root@centos6 ~]# ll -d /mydata/ drwxr-xr-x. 3 root root 4096 Oct 15 05:41 /mydata/ [root@centos6 ~]# mount -t cifs //192.168.197.129/public/ /mydata/ -o username=centos,password=yang [root@centos6 ~]# ll -d /mydata/ drwxrwxr-x. 3 yang yang 0 Oct 18 19:52 /mydata/
客戶端只要有與之對應的uid或gid就擁有相應權限,否則就只能是其他人的權限。
[root@centos6 ~]# id yang uid=1001(yang) gid=1001(yang) groups=1001(yang)
下面的練習暫不使用samba,會有很多問題。但是要使用nfs測試下述實驗。
練習:
(1) 創建一個共享mydata,路徑為/mysql/data,客戶端1掛載至/mydata;而后客戶端1主機安裝mysql或mariadb,將數據目錄設定為/mydata,要確保mysql服務能正常 運行,但數據目錄位于samba server上; mysql更換數據位置要初始化數據庫。
(2) 客戶端2主機使用類似客戶端1主機的方式掛載mydata共享至本地的/mydata目錄,而后,直接安裝mysql或mariadb server,設定其數據目錄為/mydata;測試
(a) 客戶端1 mysql服務運行時,客戶端2的mysql服務能否啟動?
(b) 客戶端1 mysql服務停止時,客戶端2的mysql服務能否啟動?
練習目的:
部署samba服務,熟悉權限設定
該項目測試兩臺mysql公用一個使用samba共享的目錄為數據位置,測試能否同時使用。
應該會出現很多問題,但是生產環境中使用該模式,是當一臺mysql出現問題,立即啟用第二臺服務器。
練習:
創建一個共享ftp,路徑為/var/ftp/pub;要求僅centos和gentoo用戶能上傳;此路徑對其它用戶不可見;
練習:
(1) samba sever共享/data/application/web,在目錄中提供wordpress;
(2) 部署兩臺amp服務器,均掛載此共享作為某主機的文檔映射路徑;
(3) 驗正兩臺主機上的wordpress是否可被同時訪問;
(a) 發一個文件,驗正圖片上傳等功能; (b) 在任一客戶端上訪問此應用,多次刷新,確認下所有資源訪問是否正常 ;
練習目的:
兩臺web前端服務器使用同一個存儲,該存儲上部署samba服務提供共享存儲,部署mysql。
測試是兩臺服務器是否能夠同時響應用戶的請求對數據庫進行讀寫。
部署dns實現一個FQDN兩條A記錄。實現負載均衡。其中一臺web前端出現故障,刪除該web前端的
A記錄。實現切換,將緩存時間調短一些,盡量少的影響客戶訪問(客戶端有dns緩存)。
兩個實驗寫好文檔和測試文檔。下周一,上交,pdf文檔。
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56562