伺服器建置實務上課補充教材
- 最新消息:
- 授課教材:鳥哥的 Linux 私房菜-伺服器架設篇第三版
- 每週都有可能會有上機實作,要等老師檢查完畢才能夠下課!否則就不算有來上課!
- 回首頁
- 舊版教材簡易介紹
unit 08:網路芳鄰伺服器 (SMB server)
- 常見的檔案伺服器
- 非同步的檔案伺服器 (在 Server/client 各保留一份)
- 同步的檔案伺服器 (只保留在 Server 端,但用戶端看起來就跟本機的檔案系統沒兩樣)
- NFS (Linux <--> Linux)
- CIFS (Common Internet Filesystem)(Windows <--> Windows)
- SMB (Server Message Block):事實上就是 CIFS 囉!透過逆向工程解析出來的一個通訊協定
- Samba ? SMB ? NetBIOS
- CIFS 最早的前身為使用 NetBIOS 這個辦公室內的通訊協定
- 區域網路裡面透過 NetBIOS 的名稱解析功能,可以取得每一部網路主機的 NetBIOS 名稱 (就是 windows 上設定的名稱)
- 每一個具有 NetBIOS 主機名稱的網路主機,就可以直接透過 NetBIOS 進行檔案的傳輸
- 但是 NetBIOS 不能跨路由器 (不可在不同的網段間溝通)
- 早期的 PC 不需要 IP 也能夠進行網芳溝通,就是透過這個機制!
- NetBIOS over TCP/IP
- 後來因為 TCP/IP 的熱門,每一部主機上面都會有 IP,因此開發出讓 NetBIOS 跑在 TCP/IP 上面的通訊協定,就稱為 NetBIOS over TCP/IP
- 因為這個協定開發出來的關係,所以網芳就能夠跨路由了!
- SMB ? Samba
- Andrew Tridgell 在念博士班時,為了要解決 DOS, 與兩部 Unix 之間檔案傳輸的問題,考慮使用 CIFS 這個協定
- 直接透過逆向工程,取得封包的資訊後,重新撰寫一個新的相容於 CIFS 的通訊協定,就稱為 Server Message Block (SMB)
- 想要去註冊,但是被註冊局說 SMB 沒意義!不可以~所以就翻出字典,找到 SaMBa 這個字~
- 於是,Samba 是註冊商標、是軟體名稱,但是通訊協定為 SMB,其實就是相容於 CIFS 的另一個通訊協定!
- 開始前測試 Windows 的網芳 (共享) 功能
- 通常的設定方式:
- 打開檔案總管,移動到你想要分享的目錄上
- 按下右鍵,選擇『共用對象』,選擇『特定人員』
- 選擇『Everyone』定為讀取
- 最終按下『共用』後,螢幕就會出現你的資料夾共用名稱
- 資料夾名稱與共用名稱 (dir_name 與 share_name)
- 資料夾共用名稱通常為『 \\netbios_name\share_name 』
- 一般來說,預設 dir_name 會相等於 share_name
- 若需要設定不同的 share_name ,就得要修改囉!也就是說,目錄名稱與共用名稱可以不同!
- 常用的,取得 server 的可用目錄共享名稱 (share_name) 的方式:
- 請在檔案總管的網址列輸入 \\127.0.0.1,看看你的資料出現什麼?
經過上面的測試,我們可以知道要設定『共用』功能時,可能得要
- 建置某些帳號,讓該帳號可以使用『共用』功能 (所以可以針對某些人給予登入,而不是 everyone)
- 放行某個特定的目錄,並設定好分享的名稱,同時設定好權限 (唯讀或可寫入)
- 對方要使用你的『共用目錄』時,得要知道你這部 windows 分享時設定的帳號/密碼才能登入!
另外, Windows 的共用,在不修改防火牆的情況下,只能提供給同一個區域網路的人使用而已。且最好用戶 windows 主機也有一個跟你這部 windows 一模一樣的帳號與密碼,
這樣登入時才方便!
- Samba 所需要的服務
- smb:
- 就是 Samba 的主要服務,管理分享的目錄、傳輸檔案與身份驗證等等重要功能 (只要這個即可)
- 因為涉及檔案傳輸,需要 TCP 封包,主要埠口為 port 139, 445
- nmb:
- 相容於 NetBIOS,會去搜尋區網內的各個 NetBIOS name 來進行網路主機名稱的列表等。
- 透過 UDP 封包的 port 137, 138 來進行 NetBIOS name 的網路主機名稱搜尋~
- Samba 所需要的軟體與相關的設定檔
- 所需要的軟體:
- samba:主要的 smb, nmb 等服務以及文件檔與開機設定檔等
- samba-client:提供 Samba 用戶端掛載相關的功能,包括查詢 server 分享的資料等指令
- samba-common:提供 server/client 都會使用到的資料,包括設定檔與語法檢驗指令等
- 設定檔與基本語法:
- 練習:
- 安裝並檢查 samba 相關的軟體與軟體所含的檔名資料
- 查看 smb.conf 設定檔的基礎內容
- 基礎的 samba 設定項目
- 針對整個 samba 的伺服器設定主要的項目有底下這些:
- workgroup = 工作群組名稱
- netbios name = 現在預設為主機名稱喔!
- server string = 主機的簡易說明
- display charset = 自己伺服器上面的顯示編碼
- unix charset = 在 Linux 伺服器上面所使用的編碼
- dos charset = 就是 Windows 用戶端的編碼
- security = user 透過 samba 伺服器本身的帳號密碼資料庫
- 針對一般用戶家目錄的分享大致是這樣的
[homes]
comment = Home Directories
browseable = no
writable = yes
; valid users = %S
; valid users = MYDOMAIN\%S
除非已經登入 (login 到 Samba 的使用權當中),否則由於 browseable 設定為 no,你的家目錄並不會被查看到!
- 讓一般用戶可以開始使用 Samba
- 完成底下的練習
Server 端
- 假設工作群組為 DIC,主機名稱為 stationXX,主機說明寫你的學號,其他保留預設值
- 使用 testparm 檢測一下是否設定語法有問題
- 啟動 smb 服務,且開機自動啟動喔!
- 建立一個名為 teacher 的用戶,這個用戶可以使用 Samba ,且密碼為 mypass
- 使用 teacher 的身份瀏覽本機的可用資源為何?
- 請確認用戶端可使用本機網芳的防火牆規則是否放行
練習 (client 端)
- 使用 teacher 查詢 server 網芳所分享的資源
- 掛載來自 server 的資源到本機的 /home/samba/teacher 目錄中
- 若此目錄需要開機即掛載,該如何處理?
- 若 client 為 windows 時,又該如何處理掛載的事宜
- Linux 實體帳號的建立與觀察
- Linux 的實體帳號:
- 其實所有的作業系統認的帳號都是認使用者識別碼與群組識別碼 (UID/GID) 等數字,但人類對數字的記憶力不佳,因此使用帳號名稱/群組名稱來取代。
其實這就跟台灣戶政系統一樣,戶政其實是認你的『身份證』,但是人們記得的則是你的『名字』。
- 每一個帳號預設會加入一個原生群組 (通常與自己帳號同名)
- 每一個帳號都可以加入其他次要群組的支援 (參加其他社團的感覺)
- 要查看某個帳號支援的群組有哪些,可以使用『 id 帳號名稱 』 來查看。
- Linux 實體帳號的建立
- 帳號建立使用: useradd [-G 次要群組支援] 帳號名稱
- 帳號建立密碼: passwd 帳號名稱
- 新群組建立: groupadd 群組名稱
- 已存在帳號加入其他次要群組支援:『 usermod -a -G 其他群組名稱 帳號名稱』
- 完成底下的練習:
- 建立名為 testing1 的用戶名稱,且密碼為 mypass
- 觀察 testing1 的 UID 與 GID 等資料
- 使用 grep users /etc/group 觀察系統是否具有 users 這個群組
- 請將 testing1 這個帳號加入 users 的群組支援。
- 再次觀察 testing1 的所有帳號相關資料,是否確定加入了 users 的群組支援?
- 增加名為 sambashare 群組
- 再將 testing1 加入 sambashare 群組的支援!
- Linux 帳號的權限
- 在 Linux 底下,每個檔名會有三種預設身份的存取權,主要身份為:
- 擁有者:檔名擁有者 (owner 或 user)
- 群組:檔名的所屬群組 (group 或可以稱為社團)
- 其他人:不是檔名擁有者也沒有加入檔名所屬群組 (例如不在你 FB 社團名單內的其他帳號)
- 承上,這三種身份,每種身份的用戶都可能會具有底下的三種權限
- r :read, 可讀取
- w :write, 可寫入
- x :eXecute, 可執行
- 在 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
權限 帳號 群組 容量 時間 檔名
- 修改上述資料可使用底下的指令:
- 權限: chmod 分數 檔名
- 帳號: chown 帳號 檔名
- 群組: chgrp 群組 檔名
- 檔名: mv 舊檔名 新檔名
- 修改權限時,每種身份會有一個分數,計算分數的方法為:
- r: 出現時有 4 分,不出現 0 分
- w: 出現時有 2 分,不出現 0 分
- x: 出現時有 1 分,不出現 0 分
- 練習:
請確認使用 root 的身份執行底下的任務
- 前往 /dev/shm 這個目錄
- 將 /etc/hosts 複製到當前目錄下
- 讓 hosts 變成是 testing1 所有,同時屬於 sambashare 群組
- testing1 對 hosts 來說,可讀可寫,sambashare 的群組成員對 hosts 也是可讀可寫,但其他人僅唯讀
- 觀察 student 的帳號資料,說明 student 對 hosts 具有什麼權限?
- 建立 mydir 目錄
- mydir 目錄可以讓 sambashare 群組的成員具有完整的使用權限 (可讀可寫可執行),但是其他人則沒有任何權限。
- 但注意,通常共享的權限會在傳統三個身份前面再加一個 2 分的 s 權限。
- 額外資源的設定
- 假如要分享的目錄為 /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 哪個帳號或群組的用戶可以寫入
但最終能否寫入還是與目錄的權限有關喔!
- 完成底下的練習:
練習:嘗試分享 /srv/share 給 teacher 群組使用,假設分享的資源名稱為 for_teacher
- 先建立 /srv/share 目錄,且注意該目錄必須要能夠讓 teacher 群組的所有用戶共用 (應該是需要 SGID 才對喔!)
- 修改 smb.conf 的內容,比較需要注意的是中括號 [] 內的名稱與路徑 (path) 喔!
- 設定完成依舊使用 testparm 檢查語法,若無問題請重新啟動 smb 服務。
- 再次以 smbclient -L //your.host.ip -U teacher 檢查看看可用的資源
- 若有個名為 teachertwo 用戶也想要使用這個目錄,該如何設定?
練習:嘗試掛載來自 server 的 for_teacher 資源到 /home/samba/forteacher 目錄喔!
- 使用 teacher 查詢 server 網芳所分享的資源
- 掛載來自 server 的資源到本機的 /home/samba/forteacher 目錄中
- 若此目錄需要開機即掛載,該如何處理?
- 完成底下的練習:
Server 的設定項目:
- Linux帳號處理:建立名為 smb1, smb2, smb3 三個用戶,且這三個用戶加入一個名為 smbgroup 的群組
- Samba帳號處理:讓 smb1, smb2, smb3 三個用戶都可以使用 Samba,且密碼均為 passokok
- Linux檔案系統權限處理:讓加入 smbgroup 的用戶,都可以使用 /srv/smbgroup 目錄,且不加入 smbgroup 的其他用戶,都沒有任何權限 (注意本章節提到的,
共享目錄的權限最前面要加上 2 分!)
- Samba 設定:讓 /srv/smbgroup 透過 samba 分享,分享的名稱為 smbgroup,加入 smbgroup 的群組可以使用這個分享的目錄,
分享的權限為可寫入。
Client 的設定項目:
- 掛載來自 Server 端的 smb1 家目錄到 /mnt/smb1
- 掛矮來自 Server 端的 smbgroup 到 /mnt/smbgroup