網站伺服器建置與管理上課補充教材


Chapter 08:網路芳鄰伺服器 (SMB server)
  1. 常見的檔案伺服器
    1. 非同步的檔案伺服器 (在 Server/client 各保留一份)
      • FTP
      • HTTP
    2. 同步的檔案伺服器 (只保留在 Server 端,但用戶端看起來就跟本機的檔案系統沒兩樣)
      • NFS (Linux <--> Linux)
      • CIFS (Common Internet Filesystem)(Windows <--> Windows)
      • SMB (Server Message Block):事實上就是 CIFS 囉!透過逆向工程解析出來的一個通訊協定
  2. Samba ? SMB ? NetBIOS
    1. CIFS 最早的前身為使用 NetBIOS 這個辦公室內的通訊協定
      • 區域網路裡面透過 NetBIOS 的名稱解析功能,可以取得每一部網路主機的 NetBIOS 名稱 (就是 windows 上設定的名稱)
      • 每一個具有 NetBIOS 主機名稱的網路主機,就可以直接透過 NetBIOS 進行檔案的傳輸
      • 但是 NetBIOS 不能跨路由器 (不可在不同的網段間溝通)
      • 早期的 PC 不需要 IP 也能夠進行網芳溝通,就是透過這個機制!
    2. NetBIOS over TCP/IP
      • 後來因為 TCP/IP 的熱門,每一部主機上面都會有 IP,因此開發出讓 NetBIOS 跑在 TCP/IP 上面的通訊協定,就稱為 NetBIOS over TCP/IP
      • 因為這個協定開發出來的關係,所以網芳就能夠跨路由了!
    3. SMB ? Samba
      • Andrew Tridgell 在念博士班時,為了要解決 DOS, 與兩部 Unix 之間檔案傳輸的問題,考慮使用 CIFS 這個協定
      • 直接透過逆向工程,取得封包的資訊後,重新撰寫一個新的相容於 CIFS 的通訊協定,就稱為 Server Message Block (SMB)
      • 想要去註冊,但是被註冊局說 SMB 沒意義!不可以~所以就翻出字典,找到 SaMBa 這個字~
      • 於是,Samba 是註冊商標、是軟體名稱,但是通訊協定為 SMB,其實就是相容於 CIFS 的另一個通訊協定!
  3. Samba 所需要的服務
    1. smb:
      • 就是 Samba 的主要服務,管理分享的目錄、傳輸檔案與身份驗證等等重要功能 (只要這個即可)
      • 因為涉及檔案傳輸,需要 TCP 封包,主要埠口為 port 139, 445
    2. nmb:
      • 相容於 NetBIOS,會去搜尋區網內的各個 NetBIOS name 來進行網路主機名稱的列表等。
      • 透過 UDP 封包的 port 137, 138 來進行 NetBIOS name 的網路主機名稱搜尋~
  4. 開始前測試 Windows 的網芳 (共享) 功能
    1. 通常的設定方式:
      • 打開檔案總管,移動到你想要分享的目錄上
      • 按下右鍵,選擇『共用對象』,選擇『特定人員』
      • 選擇『Everyone』定為讀取
      • 最終按下『共用』後,螢幕就會出現你的資料夾共用名稱
    2. 資料夾名稱與共用名稱 (dir_name 與 share_name)
      • 資料夾共用名稱通常為『 \\netbios_name\share_name 』
      • 一般來說,預設 dir_name 會相等於 share_name
      • 若需要設定不同的 share_name ,就得要修改囉!也就是說,目錄名稱與共用名稱可以不同!
    3. 常用的,取得 server 的可用目錄共享名稱 (share_name) 的方式:
      • 請在檔案總管的網址列輸入 \\127.0.0.1,看看你的資料出現什麼?
  5. Samba 所需要的軟體與相關的設定檔
    1. 所需要的軟體:
      • samba:主要的 smb, nmb 等服務以及文件檔與開機設定檔等
      • samba-client:提供 Samba 用戶端掛載相關的功能,包括查詢 server 分享的資料等指令
      • samba-common:提供 server/client 都會使用到的資料,包括設定檔與語法檢驗指令等
    2. 設定檔與基本語法:
      • 設定檔位於 /etc/samba/smb.conf
      • 該檔案的主要語法是:
        # vim /etc/samba/smb.conf
        [global]
           參數項目 = 設定內容
           ....
        
        [分享資源名稱]
           參數項目 = 設定內容
           ....
    3. 練習:
      • 安裝並檢查 samba 相關的軟體與軟體所含的檔名資料
      • 查看 smb.conf 設定檔的基礎內容
  6. 基礎的 samba 設定項目
    1. 針對整個 samba 的伺服器設定主要的項目有底下這些:
      • workgroup = 工作群組名稱
      • netbios name = 現在預設為主機名稱喔!
      • server string = 主機的簡易說明
      • display charset = 自己伺服器上面的顯示編碼
      • unix charset = 在 Linux 伺服器上面所使用的編碼
      • dos charset = 就是 Windows 用戶端的編碼
      • security = user 透過 samba 伺服器本身的帳號密碼資料庫
    2. 針對一般用戶家目錄的分享大致是這樣的
      [homes]
           comment = Home Directories
           browseable = no
           writable = yes
      ;    valid users = %S
      ;    valid users = MYDOMAIN\%S
      除非已經登入 (login 到 Samba 的使用權當中),否則由於 browseable 設定為 no,你的家目錄並不會被查看到!
    3. 讓一般用戶可以開始使用 Samba
      • 由於牽涉到系統的檔案與權限,因此 Samba 的用戶必須是系統的實體用戶
      • 但是 Linux 實體用戶與 Samba 的用戶『密碼資料庫並不相同』,因此 Samba 必須要額外製作使用密碼
      • 建置用戶 Samba 密碼的方式為:
        # pdbedit -a -u username                    (建立 Samba 用戶)
        # pdbedit -L                                (列出 Samba 用戶)
        # pdbedit -x -u username                    (刪除 Samba 用戶)
        # smbclient -L //your.samba.ip -U username  (查詢 server 可用的資源)
        # mount -t cifs //server.ip/share_name /MP  (掛載 server 可用的資源)
        
    4. 練習 (Server 端)
      • 假設工作群組為 DIC,主機名稱為 stationXX,主機說明寫你的學號,所有顯示的編碼為 utf8,其他保留預設值
      • 觀察設定檔的前幾行關於 SELinux 的問題,請放行 Samba 的家目錄使用權限!
      • 使用 testparm 檢測一下是否設定語法有問題
      • 啟動 smb 服務,且開機自動啟動喔!
      • 建立一個名為 teacher 的用戶,這個用戶可以使用 Samba ,且密碼為 mypass
      • 使用 teacher 的身份瀏覽本機的可用資源為何?
      • 請確認用戶端可使用本機網芳的防火牆規則是否放行
    5. 練習 (client 端)
      • 使用 teacher 查詢 server 網芳所分享的資源
      • 掛載來自 server 的資源到本機的 /home/samba/teacher 目錄中
      • 若此目錄需要開機即掛載,該如何處理?
      • 若 client 為 windows 時,又該如何處理掛載的事宜
  7. 額外資源的設定
    1. 假如要分享的目錄為 /srv/share 而分享的名稱為 myshare,則通常設定的項目有:
      [myshare]                                      資源名稱
              comment = Just share my directory      一些簡易說明
              path = /srv/share                      實際放行的目錄
              public = no                            要不要開放訪客進入 (當然不要)
              browseable = yes                       要不要能夠被瀏覽到名稱 (不是查看內容)
              writable = yes                         能否寫入 (smb 控制的)
              create mode = 0664                     建立檔案的預設權限
              directory mode = 0775                  建立目錄的預設權限
              write list = teacher, @teacher         哪個帳號或群組的用戶可以寫入
      但最終能否寫入還是與目錄的權限有關喔!
    2. 練習:嘗試分享 /srv/share 給 teacher 群組使用,假設分享的資源名稱為 for_teacher
      1. 先建立 /srv/share 目錄,且注意該目錄必須要能夠讓 teacher 群組的所有用戶共用 (應該是需要 SGID 才對喔!)
      2. 同時需要參考 smb.conf 內關於 SELinux 的說明,請設定好 SELinux 的 type 喔!
      3. 修改 smb.conf 的內容,比較需要注意的是中括號 [] 內的名稱與路徑 (path) 喔!
      4. 設定完成依舊使用 testparm 檢查語法,若無問題請重新啟動 smb 服務。
      5. 再次以 smbclient -L //your.host.ip -U teacher 檢查看看可用的資源
      6. 若有個名為 teachertwo 用戶也想要使用這個目錄,該如何設定?
    3. 練習:嘗試掛載來自 server 的 for_teacher 資源到 /home/samba/forteacher 目錄喔!
      1. 使用 teacher 查詢 server 網芳所分享的資源
      2. 掛載來自 server 的資源到本機的 /home/samba/forteacher 目錄中
      3. 若此目錄需要開機即掛載,該如何處理?
  8. 簡易防火牆控制
    1. 最簡單的方式為透過 iptables 控制 port 139 與 port 445 是否放行即可。
    2. 另外, smb.conf 裡面也提供了『 hosts allow 』這個設定項目來給予處理。亦即你可以針對內網開放 iptables, 但可以透過 hosts allow 來指定某個 IP 或某段 IP 的設定喔!
Top
HOME