第 8 堂課 - 網路芳鄰伺服器 (SMB Server)
上次更新日期 2017/11/21
- 8.1: 檔案伺服器之網路芳鄰 (windows 網路磁碟機)
- 8.2: Samba 檔案伺服器基礎設定
- 8.3: 共享資源之設定
- 8.4: 其他議題:同一掛載點不同權限與防火牆
- 8.5: 課後練習
8.1: 檔案伺服器之網路芳鄰 (windows 網路磁碟機)
大家應該經常聽到『檔案伺服器』,這個玩意兒可以提供用戶端取得檔案來源。那麼有哪些檔案伺服器呢?前一堂課我們聽過了 NFS 了!那接下來還有哪些呢? 其實經常使用到的檔案伺服器有這些喔:
- 常見的檔案伺服器分類:
- 非同步的檔案伺服器 (在 Server/client 各保留一份)
- FTP
- HTTP
- 同步的檔案伺服器 (只保留在 Server 端,但用戶端看起來就跟本機的檔案系統沒兩樣)
- NFS (Linux <--> Linux)
- CIFS (Common Internet Filesystem)(Windows <--> Windows)
- SMB (Server Message Block):事實上就是 CIFS 囉!透過逆向工程解析出來的一個通訊協定
一般來說,由企業主動提供給其他消費者的,大多使用 FTP 或 HTTP 之類的類型來提供。如果是一般企業內部員工共用的環境,那當然就得要使用同步的檔案伺服器, 這樣檔案才不會有新舊版本造成的困擾。同時檔案集中在 Server 上面,對於企業內部的資安維護來說,也會比較有保障。 同時,我們只要管理好這部 file server 的話,基本上,你的文件資料就有一定程度的保障囉!
- 什麼是網芳與 NetBIOS ?
早期的企業辦公室內部就有檔案分享的問題存在,那時還沒有很方便的隨身硬碟 (USB) 或快閃硬碟,資料的複製常常需要經過軟碟來傳輸, 軟碟傳輸的速度慢,而且軟碟的資料保證很糟糕 (軟碟真的很容易損壞)。因此,許多的 IT 公司都發展了企業辦公室檔案共享的機制。 其中一個使用很廣泛的,就是 Windows 採用的 NetBIOS 這個辦公室內不能跨網域的檔案分享通訊協定。
基本上,NetBIOS 的檔案分享機制是這樣的:
- 區域網路 (LAN) 裡面透過 NetBIOS 的名稱解析功能,任何一部加入 NetBIOS 網域的主機,可以取得每一部網路主機的 NetBIOS 名稱 (就是 windows 上設定的名稱),當然,自己的名稱也會被他人取得。
- 每一個具有 NetBIOS 主機名稱的網路主機,就可以直接透過 NetBIOS 進行檔案的傳輸
- 但是 NetBIOS 不能跨路由器 (不可在不同的網段間溝通)
- 早期的 windows (windows 98 以前) 不需要設定 IP 位址也能夠進行網芳溝通,就是透過這個機制!
也就是說,你的 windows 電腦只要啟動了 NetBIOS 協定,並且設定好一個不會與其他人重複的主機名稱,那麼區網內的其他電腦, 就可以透過你的 NetBIOS 分享的目錄,直接掛載使用你的 windows 磁碟機內的資料了。所以, windows 電腦的主機名稱是真的有意義的!
後來微軟將自己開發修改過的 NetBIOS 協定稱為網路檔案分享系統 (Common Internet Filesystem, CIFS)。
- NetBIOS over TCP/IP
因為 NetBIOS 不能跨路由,因此只能在區網內運作。但是後來 Internet 流行了起來,漸漸的每一部主機都會有 IP 位址。 所以後來就有在 Internet 上面開發出支援 NetBIOS 功能的協定,讓 NetBIOS 可以在網際網路上面應用!那就是所謂的『 NetBIOS over TCP/IP 』這個玩意兒。
說穿了, NetBIOS over TCP/IP 就是透過 IP 位址來傳送 NetBIOS 分享的功能,因為使用的是 TCP/IP 的傳送機制,因此就可以跨過路由傳輸! 讓網路芳鄰 (Windows 網路磁碟機) 的功能更有可看性。
windows 的 CIFS 使用了兩個埠口在進行資料的傳輸,一個是沿用 NetBIOS 的功能,埠口開在 139 ,另一個則是使用 port 445 在傳輸。 目前慣用的傳輸方式為 port 445。
- SMB 以及 Samba 的開發
故事的起源是這樣的,有個博士班學生名為 Andrew Tridgell,這位先生為了自己的學業,因此手邊有幾部不同硬體與作業系統的機器。 但是 Andrew 在資料傳輸時遇到了些困難,因為他沒有辦法在所有機器間共享檔系統。因為比較麻煩的是他手邊的微軟的作業系統, 所以為了解決這個問題,他使用逆向工程去分析出 CIFS 協定的傳輸方式,並自己開發出一個相容於 CIFS 的程式碼, 這個程式碼符合 SMB (Server Message Block) 協定的要求,也可以相容於 CIFS 這個傳輸協定,因此他就可以在不同的機器與作業系統之間進行檔案分享了。
因為 SMB 是有意義的一個通訊協定,所以 Andrew 不能直接使用 SMB 去註冊~但是為了讓自己開發的程式具有 SMB 的特徵, 於是他翻字典找到了 SaMBa 這個舞蹈單字,並對 Samba 進行了註冊。
於是,Samba 是註冊商標、是軟體名稱,但是通訊協定為 SMB,而 CIFS 就是相容於 SMB 的一個通訊協定之一。所以主架構是 SMB, CIFS 與 SAMBA 都相容於 SMB 之意。
- Windows 的網芳 (共享) 功能設定:
一般來說,在 windows 的系統內,可以透過底下的方式來直接分享網芳。不過預設的情況下,只有在同一個網域內的不同電腦才可以通行防火牆, 所以不同的網域基本上也不能加入 windows 的網芳共享檔案的 (除非你知道如何處理 windows 的防火牆)。至於基本設定程序是這樣的:
- 打開檔案總管,移動到你想要分享的目錄上
- 按下右鍵,選擇『共用對象』,選擇『特定人員』
- 選擇『Everyone』定為讀取
- 最終按下『共用』後,螢幕就會出現你的資料夾共用名稱
如果你共享的目錄名稱為 movies 的話,那麼網路上預設共享的名稱也會是 movies。如果你需要讓這兩個名字不一樣, 那就得要修改資料夾名稱與共用共享名稱 (dir_name 與 share_name)。
- 資料夾共用名稱通常為『 \\netbios_name\share_name 』
- 一般來說,預設 dir_name 會相等於 share_name
- 若需要設定不同的 share_name ,就得要修改囉!也就是說,目錄名稱與共用名稱可以不同!
因為 CIFS 已經支援 Internet 囉,所以取得 server 的可用目錄共享名稱 (share_name) 的方式:
- 檔案總管輸入『 \\IP 』即可
- 檔案總管輸入『 \\對方IP 』即可
- 建立一個名為 D:\myshare 目錄
- 在這個目錄上面設定所有人都唯讀的權限,且分享的名稱為 forshare
- 承上,也請查閱一下,能否『針對特定用戶』給予權限?
- 在自己的檔案總管上面輸入『 \\127.0.0.1 』查看是否正確的看到一個新的目錄?
- 告知旁邊的同學,請他連線到自己的 IP,是否能夠看到自己分享的目錄?
- 當你登入同學的網芳之後,請寫下該目錄的『網址』為何?
- 嘗試查詢 windows 防火牆:
- 先開啟『網路和共用中心』,查看目前的網路使用的是『工作場所』『家用網路』
- 同一畫面左側點選『變更進階共用設定』,單純查看不同共用的差別
- 打開 windows 防火牆,點選左側『進階設定』,再點選左側『輸入規則』,之後查看『輸入規則』的框框, 往下找到『檔案及印表機共用』的項目,然後拖拉下方的 bar 另其顯示右邊『連機連接埠』的位置,請查看到 TCP port 139 與 445 的項目, 並請查閱到『遠端位址』的可用範圍是『任何』還是『本機子網路』?
- 針對 TCP port 445 ,並且針對『私人』的規則,連點兩下,選擇『領域』頁框,查看『遠端 IP 位址』的設定, 嘗試加入一個 172.31.255.0/24 的網域看看。
- 同樣的方式,將私人連線的『輸出規則』 port 445 一樣加上 172.31.255.0/24 的輸出。
8.2: Samba 檔案伺服器基礎設定
- Samba 提供的服務:
如前所述,Samba 是一個 SMB 協定,且目的是相容於 CIFS 這一個 SMB 協定,而 CIFS 預設會去找 NetBIOS 名稱以及提供檔案分享兩種機制。 所以, Samba 提供的服務就有:
- smb:
- 就是 Samba 的主要服務,管理分享的目錄、傳輸檔案與身份驗證等等重要功能 (只要這個即可)
- 因為涉及檔案傳輸,需要 TCP 封包,主要埠口為 port 139, 445
- nmb:
- 相容於 NetBIOS,會去搜尋區網內的各個 NetBIOS name 來進行網路主機名稱的列表等。
- 透過 UDP 封包的 port 137, 138 來進行 NetBIOS name 的網路主機名稱搜尋~
- 如果只是要作為檔案傳輸分享,無須進行網路自動搜尋時,不用啟動這個服務。
- Samba 所需軟體設定檔位置:
完成 Samba 設定所需要的軟體有底下這些:
- samba:主要的 smb, nmb 等服務以及文件檔與開機設定檔等
- samba-client:提供 Samba 用戶端掛載相關的功能,包括查詢 server 分享的資料等指令
- samba-common:提供 server/client 都會使用到的資料,包括設定檔與語法檢驗指令等
至於主要設定檔的檔名是『 /etc/samba/smb.conf 』這一個,而這個設定檔的基本語法是這樣的:
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
參數項目 = 設定內容
....
[分享資源名稱]
參數項目 = 設定內容
....
- 安裝並檢查 samba 相關的軟體與軟體所含的檔名資料
- 檢查 /etc/samba/smb.conf 以及 /etc/samba/smb.conf.sample 的差異
- 在 smb.conf 底下,預設的中括號 [] 有哪幾個?
- 基礎伺服器設定 [global]
針對 [global] 的設定項目中,需要修改的就是原本範例檔中的資料,大致有這些設定:
- workgroup = 工作群組名稱
- netbios name = 現在預設為主機名稱喔! (可不設定,預設使用 hostname 的輸出)
- server string = 主機的簡易說明 (可不設定)
- display charset = 自己伺服器上面的顯示編碼
- unix charset = 在 Linux 伺服器上面所使用的編碼
- dos charset = 就是 Windows 用戶端的編碼
- security = user 透過 samba 伺服器本身的帳號密碼資料庫
雖然說 display charset, dos charset, unix charset 可以指定中文編碼的格式,不過由於目前新版的 Samba 對於編碼的解析已經大有進步, 同時,目前我們的 server/client 大多同時使用 utf8 了,因此上述關於語系的設定可以忽略不理,或者是全部通通設定為 utf8 即可。
- 工作群組為 dic,主機名稱為 stationXX,主機說明為你的學號
- 所有編碼格式均不須設定
- 使用 testparm 測試設定檔語法是否有問題。若有問題請依據問題解決。
使用testparm 之後,會發現到系統顯示『rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)』的問題。 這個問題其實是 Samba 擔心使用者能夠開啟的檔案太小之故。你可以使用如下的指令去檢查一般用戶能夠同時開啟的檔案數量:
[root@localhost ~]# ulimit -a [root@localhost ~]# ulimit -n
該項目其實就是 『open files』 那個限制值。Samba 希望我們能夠調整成 16384,那如何調整?其實調整 /etc/secirity/limits.conf 內容即可! 設定的方式如下:
[root@localhost ~]# vim /etc/security/limits.conf
* soft nofile 16384
* hard nofile 16384
由於 limits.conf 得要重新登入才會生效,因此請你登出 root 之後再登入,重複使用 testparm 就可以發現該錯誤不見了。 此外,如果你有興趣了解所有的 samba 設定值,則改用 testparm -v 來查閱即可。
- 針對一般用戶 [homes] 的設定
照一般正常的思考邏輯,每個人的家目錄均不同啊~因此 dmtsai 會有 dmtsai 的家目錄,而 niki 也有自己的家目錄。 若以 8.1.A 的想法,那麼每個人的家目錄網址應該不同!例如 dmtsai 應該是 \\your_server_name\dmtsai\ 而 niki 則是 \\your_server_name\niki\ 才對!所以,我們的家目錄若針對每個人給予設定,那管理員就崩潰了!
因此除了 [global] 這個全域設定項目的特別特性之外,那個 [homes] 也是特別的設定項目!因為 homes 可以讓任何人取代! 因此,如果是 dmtsai 登入,那麼中括號其實會變成 [dmtsai],則分享的網址會主動變成『 \\your_server_name\dmtsai 』 這樣一來,設定就簡單多了!
如果你剛剛已經使用過 testparm,則針對 [homes] 會看到這個項目:
[homes] comment = Home Directories browseable = No inherit acls = Yes read only = No valid users = %S %D%w%S
很簡單的看出:
- comment :該目錄用途的簡易說明
- browseable :是否允許被瀏覽查詢到該目錄的存在 (只能看到目錄,不是允許登入的意思)
- inherit acls :是否放行已經設定權限的 ACL 資訊
- read only :是否為唯讀
- valid users :能使用此項目的用戶。
那個 valid users 比較特別~怎麼會是 %S 呢?如果你使用 man smb.conf 去查詢就知道!那就代表 [這裡的名字] 的意思~如前所述, [homes] 是特別的名稱,他可以被登入者的帳號所取代,而 %S 則是代表 [] 裡面的名稱之意!所以,當有 dmtsai 這個家目錄存在, 就代表 dmtsai 是允許登入的用戶之意!更多的 %XXX 請參考 man smb.conf 的內容!
- 確定設定無誤之後,啟動 smb 服務,且該服務下次開機也會自動啟動
- 查詢系統新增的埠口有哪些?
- 使用 smbclient -L //IP 然後直接按下 [enter] 以匿名登入,看看是否啟動了 Samba ?若順利取得 samba 的資訊,應該會看到如下資訊:
Enter DIC\root's password: Anonymous login successful OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (4050cxxx, VBird Tsai) Anonymous login successful OS=[Windows 6.1] Server=[Samba 4.6.2] Server Comment --------- ------- Workgroup Master --------- -------
- 放行系統上的用戶使用權
在 8.1.A 的例題中,我們可以針對某個特定的用戶來放行,而『該用戶一定得要存在於系統中』!否則 Windows 無法進行身份的權限給予 (UID/GID...)。 同理, Samba 也是一樣的!你需要注意:
- 由於牽涉到系統的檔案與權限,因此 Samba 的用戶必須是系統的實體用戶
- 但是 Linux 實體用戶與 Samba 的用戶『密碼資料庫並不相同』,因此 Samba 必須要額外製作使用密碼
要設定可以使用 Samba 的用戶也很簡單,我們以已經存在 Linux 的這個 student 帳號來說,要將它加入 samba 的使用權限,直接使用 pdbedit 處理即可。
# pdbedit -a -u username (建立 Samba 用戶) # pdbedit -L (列出 Samba 用戶) # pdbedit -x -u username (刪除 Samba 用戶)
- 以正常方法建立 alex 這個用戶,此用戶無須給予 Linux 密碼
- 讓 alex 可以使用 Samba,且登入 Samba 的密碼為 heyalex
- 使用 pdbedit -L 確認 alex 在 Samba 的使用列表當中
- 使用 smbclient -L //IP -U alex 之後輸入 alex 的密碼,看看能否得到類似如下的畫面:
Enter DIC\alex's password: Domain=[STATION200] OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (4050cxxx, VBird Tsai) alex Disk Home Directories Domain=[STATION200] OS=[Windows 6.1] Server=[Samba 4.6.2] Server Comment --------- ------- Workgroup Master --------- -------
- 用戶家目錄的掛載與卸載 (含 SELinux 問題處理)
要在 Linux 底下使用 Samba 檔案系統也頗簡單!只要使用 cifs 檔案系統掛載即可!當然,掛載時還得要輸入帳號與密碼才行喔!
- 確認剛剛使用 alex 查詢到的網路磁碟機網址為何?
- 使用『 mount -t cifs -o username=alex,passowrd=xxxx 裝置網址 /mnt 』嘗試將 alex 的家目錄掛載到 /mnt 當中
- 使用 df 確認是否已經掛載
- 使用 ll /mnt 是否可以查詢到資料?若出現權限不符,嘗試使用 setenforce 0 ,再確認一次,若確實可以查詢到檔案, 重新 setenforc 1,然後自行處理 SELinux 的相關問題。或者查閱 /etc/samba/smb.conf.example 查閱解決方案。
- 分別使用 touch /home/alex/from_local 以及 touch /mnt/from_samba ,最終 ll /home/alex ,得到什麼權限?為什麼?
8.3: 共享資源之設定
除了家目錄之外,samba 還經常用來作為『分享共同的資源』之用!舉例來說,有三個用戶,這三個用戶想共用 /srv/project 時, 那除了本身 /srv/project 需要設定好權限之外,我們讓這三個用戶可以透過 samba 分別從不同的主機連線進來,然後開始大家共用此目錄! 唯一要注意的大概就是檔案不能同時被多個人開啟這樣而已。
Samba 要分享資源時,大部分會這樣做:
[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 哪個帳號或群組的用戶可以寫入 valid users = user1, @group1 不是寫入權限,而是能用此資源的人(是否唯讀要看設定)
上面設定值當中的 write list 與 valid users 選擇其中一個來設定即可。個人建議使用 valid users 即可喔。 當然,最終能不能寫入還是與 Linux 檔案系統的權限有關的!
- 預計建立的三個帳號分別是 std1, std2, std3,預計共同加入的專題組名為 graduation ,而預計共享的目錄在 /srv/myproject。 請先設計好帳號、群組與目錄之權限等資訊。並請注意,針對 /srv/myproject 目錄,非群組外的其他人不具備任何權限。
- 在 SELinux 的情境下,Samba 分享的目錄需要具備特別的類型,請依據 /etc/samba/smb.conf.example 的說明, 解決 SELinux 的類型問題。
- 透過 samba 分享該目錄,且目錄的預計網址會是:『 //your_server_name/graduation/ 』,在 graduation 群組內的用戶具有完整權限, 且加入 graduation 即可使用本目錄資源。
- 讓 std1, std2, std3 均可使用 Samba,且其 Samba 密碼為 heystd1, heystd2, heystd3 。
- 嘗試使用 std3 掛載本目錄,並且將本資源掛載於 /media/data 下,並且測試寫入與讀出等動作。
雖然上述設定之後,未來若有其他用戶要加入該專題,只要 (1)建立新的用戶, (2)將該用戶加入 graduation 群組中, (3)讓該用戶可以使用 Samba, 那麼該用戶就能夠使用 //your_server_name/graduation/ 的資源了。不過,如果有個名為 teacher1 的用戶想要進入該目錄資源『查閱』而已, 僅是查閱而不能寫入喔 (就是僅有 rx 而已),那該如何處理呢?
- 建立名為 teaacher1 的帳號,但該帳號不可加入 graduation 群組
- 讓 teacher1 可以使用 Samba,且密碼為 heyteacher。
- 在 smb.conf 當中,讓 teacher1 可以使用 graduation 資源!
- 利用 teacher1 的身份掛載 //your_server_name/graduation 到 /media/teacher ,請確認能否進入該目錄查閱資料? 若不行,該如何處理 (注意,需要用到 ACL 喔!)
- 在公開檔案 (/etc/fstab) 保障密碼不外流的方式
如果你需要一開機就將上述的資源掛載起來的話,那麼就得要寫入 /etc/fstab 當中!並且將帳號與密碼也都要寫入在第四欄位, 例如這樣的寫法:
[root@localhost ~]# vim /etc/fstab //127.0.0.1/graduation /media/data cifs defaults,username=std3,password=heystd3,_netdev 0 0 [root@localhost ~]# umount /media/data [root@localhost ~]# mount -a
不過如此一來 std3 的帳號與密碼都被看光光了!實在很蠢~你可以使用另一種機制~透過 cifs-utils 這個軟體提供的功能, 在上述的特殊字體部份,使用『 credentials=/root/mountme 』之類的方式來提供另一個檔案儲存帳號與密碼, 然後再以底下的格式來寫入 /root/mountme ,就能夠處理妥當了!
username=std3 password=heystd3
- 安裝 cifs-utils,並觀察該軟體提供什麼檔案
- man mount.cifs 之後,搜尋 credential 這個關鍵字,查出檔案的格式
- 利用 std3 掛載 //IP/graduation 到 /media/data 去,且將帳密寫在 /root/mountstd3.txt 這個檔案中, 不要讓帳密出現在 /etc/fstab 當中。
8.4: 其他議題:同一掛載點不同權限與防火牆
- 觀察來自 client 的連線狀態 (Server 端功能)
有時候在 Samba server 還是得要知道用戶端的使用情況比較好!最簡單的查詢方式,就是透過 smbstatus 去查看一下即可! 我們就能夠了解到有哪些用戶端連線進來系統了!
[root@localhost ~]# smbstatus
Samba version 4.6.2
PID Username Group Machine Protocol Version Encryption
--------------------------------------------------------------------------------------------------------
18472 std3 std3 127.0.0.1 (ipv4:127.0.0.1:45996) NT1 -
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
IPC$ 18472 127.0.0.1 一 11月 20 22時10分12秒 2017 CST - -
graduation 18472 127.0.0.1 一 11月 20 22時10分12秒 2017 CST - -
No locked files
- 同一掛載點但是不同帳密登入的方式 (用戶端功能)
想一想,如果你已經用了 root 的身份,然後以 std3 的帳密資訊掛載了 //IP/graduation 到 /media/data 當中, 然後同時 std1 已經登入這部系統,他也想要掛載 graduation 到該目錄下!你要 std1 與 std3 分別使用自己的權限到 /media/data 目錄去工作, 而不需要重複掛載,此時該如何是好?
最簡單的想法,就是在用戶端掛載時,特別加上兩個參數,分別是底下這兩個:
- multiuser :可以對應使用者給予個別的權限,同時還需要搭配 cifscreds 來處理權限問題才行。
- sec=ntlmssp :安全模式,提供 multiuser 的參數可以變更權限的密碼測試方式。
因此,請修改 /etc/fstab 成為類似如下的模樣:
[root@localhost ~]# vim /etc/fstab //127.0.0.1/graduation /media/data cifs defaults,credentials=/root/mountstd3.txt,_netdev,multiuser,sec=ntlmssp 0 0 [root@localhost ~]# umount /media/data/ [root@localhost ~]# mount -a
此時 root 登入系統後,進入到 /media/data 時,就會取得 std3 的權限!因為 /root/mountstd3.txt 裡面就是用 std3 的帳號資訊來設定的。 那如果此時 std1 登入系統之後,想要使用他自己的權限該如何是好?他可以這麼做:
[std1@localhost ~]$ cd /media/data [std1@localhost data]$ ll ls: reading directory .: 拒絕不符權限的操作 [std1@localhost data]$ cd [std1@localhost ~]$ cifscreds add 127.0.0.1 Password: # 這裡輸入 std1 的 samba 密碼喔! [std1@localhost ~]$ ll /media/data [std1@localhost ~]$ touch /media/data/std1 # 回到 root 的身份,來到 server 查看一下狀態! [root@localhost ~]# smbstatus Samba version 4.6.2 PID Username Group Machine Protocol Version Encryption -------------------------------------------------------------------------------------------------------- 18978 std2 std2 127.0.0.1 (ipv4:127.0.0.1:46002) NT1 - 18978 std1 std1 127.0.0.1 (ipv4:127.0.0.1:46002) NT1 - 18978 std3 std3 127.0.0.1 (ipv4:127.0.0.1:46002) NT1 - Service pid Machine Connected at Encryption Signing --------------------------------------------------------------------------------------------- graduation 18978 127.0.0.1 一 11月 20 22時32分23秒 2017 CST - - graduation 18978 127.0.0.1 一 11月 20 22時19分49秒 2017 CST - - IPC$ 18978 127.0.0.1 一 11月 20 22時19分49秒 2017 CST - - graduation 18978 127.0.0.1 一 11月 20 22時23分20秒 2017 CST - - No locked files
你就可以發現確實能夠以自己的帳號來登入該目錄工作了!而且在 server 端也看到同一個 PID 會有不同的帳號來使用,此時不同的帳號身份就能夠用不同的權限來操作該目錄! 達成多人共用的情況囉!
- 讓 /media/data 這個掛載點加入 multiuser 以及 sec=ntlmssp 的參數,並讓此參數生效。同時使用『 mount | grep data 』確認該參數已經正確設定。
- 用 root 的身份去操作 /media/data 這個目錄 (cd /media/data; ll; touch root; ll; rm root; ll)
- 用 std3 的身份去操作 /media/data 這個目錄 (cd /media/data; ll; touch root; ll; rm root; ll)
- 用 std1 的身份去操作 /media/data 這個目錄 (cd /media/data; ll; touch root; ll; rm root; ll) 若失敗,請使用 cifscreds add 127.0.0.1 嘗試處理權限的問題!
- 用 teacher1 的身份去操作 /media/data 這個目錄 (cd /media/data; ll; touch root; ll; rm root; ll) 若失敗,請使用 cifscreds add 127.0.0.1 嘗試處理權限的問題!
- 防火牆議題
- 最簡單的方式為透過 iptables 控制 port 139 與 port 445 是否放行即可。
- 另外, smb.conf 裡面也提供了『 hosts allow 』這個設定項目來給予處理。亦即你可以針對內網開放 iptables, 但可以透過 hosts allow 來指定某個 IP 或某段 IP 的設定喔!
- 使用 //192.168.254.xxx/yy 來連線,能否成功?討論一下原因!
- 更改設定檔,讓你的 Samba 只能讓你的內部區網還有 127.0.0.0/8 這三個網段可以使用
- 使用 //192.168.254.xxx/yy 來連線,能否成功?討論一下原因!
8.5: 課後練習
- (60%)實作題:啟動 Server 作業硬碟 - unit08
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
- 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.18.255.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 使用 teamd 的機制建立內部區域網路的備援功能:
- team 的界面使用 team0 卡號,且連線名稱請命名為 team0
- team 使用 activebackup 備援功能,不要使用 loadbalance
- team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
- 內部網路參數為: 172.19.*.254/24,不需要 gateway
- 主機名稱指定為: server*.example.dic
- 最終你的主機名稱與 IP 的對應為:
server*.example.dic 172.18.255.* 別名為 server* server254.example.dic 172.18.255.254 別名為 server254 server.lan*.example.dic 172.19.*.254 別名為 server client.lan*.example.dic 172.19.*.1 別名為 client
- 基本的伺服器作業系統設定行為:
- 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
- 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
- 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
- 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
- 實際設定好本機防火牆
- 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
- 將預設的規則轉存到 /root/firewall.sh 這個檔案內
- 首先將全部的規則刪除 (應該有三條指令)
- 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
- 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
- 放行你自己的內部區域網路那個網域的連線要求
- 讓 ssh 只對外部的區網放行,不會對 Internet 放行
- 讓 http 針對整個 Internet 放行
- 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
- 重新啟動 iptables 服務,然後觀察規則是否正確
- 實際設定好 Server 的路由功能
- 讓核心支援 IP 轉遞的功能
- 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
- 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
- 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
- 此功能在開機後依舊能夠順利啟動
- 基本的網芳分享設定
- 僅有自己的 (1) lo 亦即是 localhost 內部網路、 (2)外部網域、(3)內部網域可以使用自己這部伺服器的 Samba 服務;
- 這部 Samba 的工作群組為 LINUX,而主機名稱使用 stationXX
- 讓 alex, dora, vitor 能夠使用網芳取得自己的家目錄,且能夠從遠端掛載使用! 這三個帳號的密碼都是 mylinux
- 專題共享之 Samba 設定
- alex, dora, vitor 為三個專題組員,他們預計加入群組名稱為 vhost 群組的次要群組支援
- 這三個人想要共享 /srv/myvhost 目錄,這三個帳號可以具有完整權限,但非專題組員則沒有任何權限
- 這三個人想要使用 Samba 分享資源,分享的目錄就這個 /srv/myvhost,但分享的資源名稱想設定為 vhostdir, 且這個目錄是可以被瀏覽的,但需要有帳密才能登入!
- 另建立一個名為 admin1 的帳號,這個帳號可以唯讀使用 /srv/myvhost,且可以完整使用 /srv/myvhost/toadmin 目錄。
- admin1 也可以使用 vhostdir 這個 Samba 資源,且登入密碼為 myadmin。
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- (30%)實作題:啟動 client 作業硬碟
- 網路參數的設定,請依據底下的方式來設定好:
- 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
- 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.19.*.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 主機名稱指定為: client.lan*.example.dic
- 最終你的主機名稱與 IP 的對應為:
server*.example.dic 172.18.255.* 別名為 server* server254.example.dic 172.18.255.254 別名為 server254 server.lan*.example.dic 172.19.*.254 別名為 server client.lan*.example.dic 172.19.*.1 別名為 client
- 實際設定好本機防火牆
- 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
- 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
- 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
- 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
- Samba 的掛載與使用
- 讓來自你 server 的 vhostdir 掛載到本機的 /srv/myvhost 目錄下
- 預設使用 alex 的帳密掛載上述資源,但帳密請寫入 /root/alex.txt 當中,同時,開機就可以掛載此目錄。
- 系統上面有個名為 dora 的帳號 (自己建置,且此帳號的 UID 需要與 Samba Server 相同才行!) 另外,當 dora 要使用此目錄時,可以透過 cifscreds 更改自己的認證來登入此系統。
- 網路參數的設定,請依據底下的方式來設定好:
- (10%)簡易問答題:
從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
- 早期辦公室達成檔案分享為使用 NetBIOS,這個機制無法跨過路由。(1)後來在這個基礎上面開發出哪個協定,所以它可以跨路由!且(2)使用的 port 又是幾號?
- 在 Linux 上面達成 SMB (server message block) 這個協定的軟體為 Samba,Samba 最早的目的是加入微軟開發的哪個協定中以進行檔案分享的?
- 承上,所以 (1)Samba 啟動的服務有那兩個?而(2)各服務啟用的 port 又各別是哪種格式 (tcp/udp) 且埠口號碼分別是?
- 有個主機名稱為 serverhost,這個主機分享的目錄為 /srv/mydata/ ,而 samba 設定的資源項目為 [checkdata],請問,在 windows 上面看到的分享網址會是怎麼寫?
- 若要掛載來自 server 的裝置,且要加上多人共用該掛載的目錄時,該加上那兩個特別的掛載選項?
- 上傳成績
- 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
- 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
- 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
- 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
- Please use links http://172.18.255.250/upload/unit08 to check your filename