伺服器建置實務上課補充教材


unit 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. 開始前測試 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,看看你的資料出現什麼?
    經過上面的測試,我們可以知道要設定『共用』功能時,可能得要
    • 建置某些帳號,讓該帳號可以使用『共用』功能 (所以可以針對某些人給予登入,而不是 everyone)
    • 放行某個特定的目錄,並設定好分享的名稱,同時設定好權限 (唯讀或可寫入)
    • 對方要使用你的『共用目錄』時,得要知道你這部 windows 分享時設定的帳號/密碼才能登入!
    另外, Windows 的共用,在不修改防火牆的情況下,只能提供給同一個區域網路的人使用而已。且最好用戶 windows 主機也有一個跟你這部 windows 一模一樣的帳號與密碼, 這樣登入時才方便!
  4. Samba 所需要的服務
    1. smb:
      • 就是 Samba 的主要服務,管理分享的目錄、傳輸檔案與身份驗證等等重要功能 (只要這個即可)
      • 因為涉及檔案傳輸,需要 TCP 封包,主要埠口為 port 139, 445
    2. nmb:
      • 相容於 NetBIOS,會去搜尋區網內的各個 NetBIOS name 來進行網路主機名稱的列表等。
      • 透過 UDP 封包的 port 137, 138 來進行 NetBIOS name 的網路主機名稱搜尋~
  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,主機說明寫你的學號,其他保留預設值
      • 使用 testparm 檢測一下是否設定語法有問題
      • 啟動 smb 服務,且開機自動啟動喔!
      • 建立一個名為 teacher 的用戶,這個用戶可以使用 Samba ,且密碼為 mypass
      • 使用 teacher 的身份瀏覽本機的可用資源為何?
      • 請確認用戶端可使用本機網芳的防火牆規則是否放行
      練習 (client 端)
      • 使用 teacher 查詢 server 網芳所分享的資源
      • 掛載來自 server 的資源到本機的 /home/samba/teacher 目錄中
      • 若此目錄需要開機即掛載,該如何處理?
      • 若 client 為 windows 時,又該如何處理掛載的事宜
  7. Linux 實體帳號的建立與觀察
    1. Linux 的實體帳號:
      1. 其實所有的作業系統認的帳號都是認使用者識別碼與群組識別碼 (UID/GID) 等數字,但人類對數字的記憶力不佳,因此使用帳號名稱/群組名稱來取代。 其實這就跟台灣戶政系統一樣,戶政其實是認你的『身份證』,但是人們記得的則是你的『名字』。
      2. 每一個帳號預設會加入一個原生群組 (通常與自己帳號同名)
      3. 每一個帳號都可以加入其他次要群組的支援 (參加其他社團的感覺)
      4. 要查看某個帳號支援的群組有哪些,可以使用『 id 帳號名稱 』 來查看。
    2. Linux 實體帳號的建立
      1. 帳號建立使用: useradd [-G 次要群組支援] 帳號名稱
      2. 帳號建立密碼: passwd 帳號名稱
      3. 新群組建立: groupadd 群組名稱
      4. 已存在帳號加入其他次要群組支援:『 usermod -a -G 其他群組名稱 帳號名稱』
    3. 完成底下的練習:
      1. 建立名為 testing1 的用戶名稱,且密碼為 mypass
      2. 觀察 testing1 的 UID 與 GID 等資料
      3. 使用 grep users /etc/group 觀察系統是否具有 users 這個群組
      4. 請將 testing1 這個帳號加入 users 的群組支援。
      5. 再次觀察 testing1 的所有帳號相關資料,是否確定加入了 users 的群組支援?
      6. 增加名為 sambashare 群組
      7. 再將 testing1 加入 sambashare 群組的支援!
  8. Linux 帳號的權限
    1. 在 Linux 底下,每個檔名會有三種預設身份的存取權,主要身份為:
      1. 擁有者:檔名擁有者 (owner 或 user)
      2. 群組:檔名的所屬群組 (group 或可以稱為社團)
      3. 其他人:不是檔名擁有者也沒有加入檔名所屬群組 (例如不在你 FB 社團名單內的其他帳號)
    2. 承上,這三種身份,每種身份的用戶都可能會具有底下的三種權限
      1. r :read, 可讀取
      2. w :write, 可寫入
      3. x :eXecute, 可執行
    3. 在 Linux 底下,觀察檔名的權限可以使用 ll 或 ls -l 這個指令來查看。例如使用底下的方式來觀察:
      # ll /etc/hosts /etc/chrony.keys
      -rw-r-----. 1 root chrony   9   11月 24  2015 /etc/chrony.keys
      -rw-r--r--. 1 root root   158    6月  7  2013 /etc/hosts
      權限          帳號 群組   容量  時間          檔名 
    4. 修改上述資料可使用底下的指令:
      • 權限: chmod 分數 檔名
      • 帳號: chown 帳號 檔名
      • 群組: chgrp 群組 檔名
      • 檔名: mv 舊檔名 新檔名
    5. 修改權限時,每種身份會有一個分數,計算分數的方法為:
      • r: 出現時有 4 分,不出現 0 分
      • w: 出現時有 2 分,不出現 0 分
      • x: 出現時有 1 分,不出現 0 分
    6. 練習:
      請確認使用 root 的身份執行底下的任務
      1. 前往 /dev/shm 這個目錄
      2. 將 /etc/hosts 複製到當前目錄下
      3. 讓 hosts 變成是 testing1 所有,同時屬於 sambashare 群組
      4. testing1 對 hosts 來說,可讀可寫,sambashare 的群組成員對 hosts 也是可讀可寫,但其他人僅唯讀
      5. 觀察 student 的帳號資料,說明 student 對 hosts 具有什麼權限?
      6. 建立 mydir 目錄
      7. mydir 目錄可以讓 sambashare 群組的成員具有完整的使用權限 (可讀可寫可執行),但是其他人則沒有任何權限。
      8. 但注意,通常共享的權限會在傳統三個身份前面再加一個 2 分的 s 權限。
  9. 額外資源的設定
    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 的內容,比較需要注意的是中括號 [] 內的名稱與路徑 (path) 喔!
      3. 設定完成依舊使用 testparm 檢查語法,若無問題請重新啟動 smb 服務。
      4. 再次以 smbclient -L //your.host.ip -U teacher 檢查看看可用的資源
      5. 若有個名為 teachertwo 用戶也想要使用這個目錄,該如何設定?
      練習:嘗試掛載來自 server 的 for_teacher 資源到 /home/samba/forteacher 目錄喔!
      1. 使用 teacher 查詢 server 網芳所分享的資源
      2. 掛載來自 server 的資源到本機的 /home/samba/forteacher 目錄中
      3. 若此目錄需要開機即掛載,該如何處理?
  10. 完成底下的練習:
    Server 的設定項目:
    1. Linux帳號處理:建立名為 smb1, smb2, smb3 三個用戶,且這三個用戶加入一個名為 smbgroup 的群組
    2. Samba帳號處理:讓 smb1, smb2, smb3 三個用戶都可以使用 Samba,且密碼均為 passokok
    3. Linux檔案系統權限處理:讓加入 smbgroup 的用戶,都可以使用 /srv/smbgroup 目錄,且不加入 smbgroup 的其他用戶,都沒有任何權限 (注意本章節提到的, 共享目錄的權限最前面要加上 2 分!)
    4. Samba 設定:讓 /srv/smbgroup 透過 samba 分享,分享的名稱為 smbgroup,加入 smbgroup 的群組可以使用這個分享的目錄, 分享的權限為可寫入。
    Client 的設定項目:
    1. 掛載來自 Server 端的 smb1 家目錄到 /mnt/smb1
    2. 掛矮來自 Server 端的 smbgroup 到 /mnt/smbgroup
Top
HOME