在 Linux 下,有許多透過網際網路或區域網路,來跨平台分享可讀寫磁碟空間的方法,其中最常用的就是 Network File System (NFS,https://en.wikipedia.org/wiki/Network_File_System ) 與為了與 MS Windows 平台分享的 Samba軟體(https://www.samba.org/samba/what_is_samba.html),而這些方法搭配硬體端的儲存陣列系統(如 RAID-6,https://en.wikipedia.org/wiki/RAID),便可成為一個現今相當夯的 Network Attached Storage( NAS ) 主機。
# NFS
與其它安裝伺服器軟體相同的方法,我們僅需要使用 yum install nfs-utils 來下載,下載後先利用 rpm -qa | grep rpcbind 確認是否有此檔,因為這在後面的 NIS 章節亦會用到,若無需再執行 yum install rpcbind 來下載,如圖4-41。
(圖4-41)
接著,假設我們想要分享 /myshare 資料夾的內容,先利用使用指令 mkdir /myshare 產生此資料夾,並利用 vim /etc/exports 進入 nfs 的設定檔,來設定網路分享的磁碟空間,如下
/myshare 192.168.100.0/255.255.255.0(rw, sync, no_subtree_check, no_root_squash)
/* 分享 /myshare 資料夾預設能存取的 IP 範圍為 192.168.100.0 - 192.168.100.255(或使用 192.168.100.24 來表示。若要表示幾個IP主機,亦可用空格符號來分隔,如
/myshare 192.168.100.20(rw) 192.168.100.30(ro)
並請注意個主機IP間的符號 ( ) 與 空白字元,若為叢集式(Cluster)運算主機群,則通常設定會有一個母主機,分 /home 讓子機掛載 ),存取的權限為可讀寫(rw,故若需唯讀請設定 ro ),並同步寫入記憶體與硬碟中(sync),除此之外,亦開放遠端連入使用者,可使用root權限來讀取與寫入檔案(no_root_squash),故請注意使用時權限過大可能造成檔案的安全性問題,若擔心,請換成 root_squash 或是 all_squash 來降低權限。no_subtree_check 為無須確認其上層資料夾的權限,以加快速度。設定完儲存後離開,接著利用下面指令來啟動,並加入開機執行:
$ service nfs start
$ chkconfig --level 35 nfs on
/* 在 CentOS6_x64 下,筆者安裝好後,開機後已經有在背景執行 rcpbind 與 nfslock,故便無需再重啟此兩個被 nfs service 所依附的服務 */
接著我們利用 Nmap 軟體(https://nmap.org/),來掃瞄一下我們的分享 port,看是否有無 nfs 的服務 ,若無安裝 nmap ,可以利用指令 yum -y install nmap,來安裝。接著輸入
$ nmap -sT 127.0.0.1
/* 可以看到 127.0.0.1 (localhost) 開啟的對內 TCP 連線服務埠,如圖4-42-1 */
與
$ nmap -sT 10.0.2.15
/* 筆者的虛擬機器下給的 IP 為 10.0.2.15 ,開啟對外TCP 連線服務的埠為圖4-42-2 黃框處 */
(圖4-42-1)
(圖4-42-2)
由圖4-42-1 與圖4-42-2 可得知,僅有 ssh(22/tcp)、rpcbind(111/tcp)、nfs(2049/tcp)、mysql(3306/tcp),其中 rpcbind 與 nfs 便是我們要使用 nfs service 會用到的連線埠,請開啟iptables 防火牆設定允許,如下:
$ iptables -A INPUT -p tcp --dport 111,2049 -j ACCEPT
$ iptables -A INPUT -p udp --dport 111,2049 -j ACCEPT # nfs 亦可以用udp連線
$ service iptables save
若想利用 tcp wrapper 在 /etc/hosts.allow 與 /etc/hosts.deny 做過濾條件,可用服務名稱 rpcbind 來指令,如在 /etc/hosts.deny 內加入如下:
rpcbind: ALL EXCEPT 10.0.2.0/24 192.168.100.0/24
並請記得設定 SELinux 的允許 /myshare 可讓 nfs 操作的權限,如下:
$ semanage fcontext -a -t nfs_t "/myshare(/.*)?"
/* 原本預設 /var/ilb/nfs 為 nfs 分享資料夾,並使用 nfs_t 的 policy,可用 semanage fcontext -l | grep nfs 查詢,故將 policy 也設定到 /myshare 與其下層的子資料夾 */
$ restorecon -Rv /myshare
/* 其他權限,可參考 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext.html。 */
接著輸入以下指令可以看到主機分享那些資料夾:
$ showmount -e
/* 參數 -e ,為列出 export 那些資料夾與那些主機可使用的清單 */
若要調整分享的資料夾,可以再利用 vim /etc/exports 編輯檔案並儲存後,直接使用以下(如圖4-43):
$ exportfs -arv
/* 參數 -a ( all directories),為重新整理是否分享的全部資料夾,參數 -r (re-export)為重新分享 ,真正的 export 參數,可用 cat /var/lib/nfs/etab 得知。 */
(圖4-43)
以上為 nfs 伺服器軟體端的設定,至於使用者連入端,可直接使用 mount 指令來掛載,假設要掛載有nfs 分享的資料夾如下(圖4-44):
$ mkdir /nfshome
$ mount -t nfs 10.0.2.15:/home /nfshome # 參數 -t 指定檔案格式為 nfs
$ df -h # 看已掛上的磁碟狀態
這樣掛載成功後,使用者便可以藉由網路來連線到遠端的主機磁碟,並利用指令如
$ cp -rudp ~/* /nfshome
來備分到遠端的含有磁碟陣列系統的主機,資料就可以有備無患,並實現異地備分的效果。
(圖4-44)
若要使用者連入端要設定開機掛載,如將遠端的 /home 掛載成為本機的 /home,則只要編輯 /etc/fstab 檔案,加入如圖 4-45黃框處內容,或可改為加入參數方式(如 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s1-nfs-client-config-options.html 與 http://nfs.sourceforge.net/nfs-howto/ar01s05.html )
10.0.2.15:/home /home nfs bg,rw,hard,intr,rsize=8192,wsize=8192 0 0
/* rsize 與 wsize 為讀寫的 buffer 容量,增加容量原則上可以加快存取的效率 */
(圖4-45)
若不想永久掛載在主機上,想需要時候再掛載,此時可利用 autofs 的功能(若無此軟體,請用yum -y install autofs 安裝,一般都已有預設安裝並開機執行,如應用於光碟機的掛載 ),確認您的主機 autofs 有開機啟動並背景執行後(若無,請使用 chkconfig --level 35 autofs on ),接著假設我們要讓掛載 nfs 磁碟的指令自動執行,一樣要掛載遠端 nfs server 的/home 成為連入端主機的 /mnt/nfshome 。首先創造一個 /etc/auto.mynfs ,讓 autofs 執行的設定檔(map file),其內容如下 :
nfshome -fstype=nfs,rw 10.0.2.15:/home # 主機IP 10.0.2.15 利用 nfs 方法分享 /home
再將此設定檔加入 autofs 的執行內容檔 /etc/auto.master,用指令 vim /etc/auto.master,加入如圖4-46黃框處後儲存離開。
(圖4-46)
圖4-46設定完後,再重新啟動 autofs 如下:
$ service autofs restart
此時可以直接使用 ls -al /mnt/nfshome,就可以看到掛載的內容,但卻不會在 df -h 看到,但可以查詢 df -h /mnt/nfshome,如圖4-47。若要調整掛載等待時間5分鐘無動作就卸載 ,可進入 /etc/autofs.conf,修改 timeout 參數。
(圖4-47)
利用 nfs 掛載網路磁碟機後,若要備份或鏡像備份,可以利用 rsync 的支援 ssh 協定備份來增加安全性,指令如下:
$ rsync -e ssh -av --delete 10.0.2.15:/home/* /home/remotehome
/* 如以上方式傳輸備份資料,才能利用 ssh 來達到傳輸資料加密的作用,參數 --delete 為刪除目的比來源多餘的檔案或資料夾,故成為鏡像備份,需增量備份的使用者請勿加此參數,使用時要注意。 */
以上為 nfs 軟體的伺服器與使用者連入端(客戶端)之操作方式,其他詳細的 nfs 參數設定,可參考 http://nfs.sourceforge.net/,http://nfs.sourceforge.net/nfs-howto/ar01s03.html
#SAMBA
另一套磁碟分享的軟體為SAMBA,且主要應用於與 MS Windows 的作業環境下分享(如Windows的碗路翻林,網路芳鄰 ),我們一樣可以利用 yum 下載,如圖4-48,鍵入指令 yum install samba
(圖4-48)
下載後,一樣編輯 samba 的設定檔 /etc/samba/smb.conf,與先前一樣,請先看清楚設定檔內的說明,因設定檔相當長,筆者亦僅列出需要修改之處,如下:
[global]
workgroup = mysamba # 工作群組名稱
netbios name = samba_server
/* NetBIOS 使用的名稱(https://en.wikipedia.org/wiki/NetBIOS),可自訂 */
unix charset = utf8
/* 跟隨系統設定,使用 utf8 編碼以中英文檔名,https://en.wikipedia.org/wiki/UTF-8 */
security = user
passdb backend = tdbsam
/* samba 改為使用 tdbsam 的帳密資料庫(https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/passdb.html),並相容於舊的 smbpasswd */
display charset = utf8
/* 顯示文字之編碼,使用 utf8 編碼,unicode 編碼可見http://unicode.org/Public/UCD/latest/charts/CodeCharts.pdf */
dos charset = cp950
/* 傳統 dos 編碼為 cp950,可來顯示 big5(https://en.wikipedia.org/wiki/Big5),其他編碼可至 Unicode Consortium 網站 http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/ 查詢*/
hosts allow = 192.168.100.0/24 10.0.2.0/24 # 僅允許此兩個網域連入
encrypt passwords = yes # 密碼須加密,針對Windows XP以上的登入
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
/* 減少TCP與傳輸延遲,並加大接收緩衝區與送出緩衝區至 64K */
dns proxy = no
load printers = no # 不允許 printer 分享
guest ok = no # 不允許 guest 存取
tls enabled = yes #使用 tls 加密,與其他伺服器軟體一樣,要產生的金鑰與憑證
tls keyfile = /etc/samba/mysamba.key
tls certfile = /etc/samba/mysamba.pem
protocol = SMB2 # 為防止 wannacrypt 攻擊,會造成綁架軟體加密的 SMBv1
# 以上為全部共用的設定
[sambadisk]
comment = sambadisk # 要分享的磁碟名稱sambadisk之說明文字
browseable = no # 不要公布名稱於網路芳鄰上,請連入端自行利用網路磁碟機連線
path = /mysamba # 要提供分享的來源資料夾
writeable = yes # 是否可寫入,若要利用 Samba 備份資料,請改 yes
printable = no # 是否可列印
create mode = 0644 # 新增的檔案權限預設為 0644( u+rw, g+r, o+r )
directory mode = 0644 # 資料夾的權限,不能違反系統本身對分享資料夾的權限設定
# 以上為自訂分享磁碟名稱 sambadisk 的設定
並將不要分享的 [home] 與 [printers] 參數,用符號 ; 加前頭關閉,如圖4-49
(圖4-49)
接著記得產生設定檔所設定tls加密用的金鑰與憑證檔(https://wiki.samba.org/index.php/Configuring_LDAP_over_SSL_(LDAPS)_on_a_Samba_AD_DC)
$ cd /etc/samba/
$ openssl req -nodes -x509 -days 3650 -newkey rsa:2048 -keyout mysamba.key -out mysamba.pem
/* 一樣產生十年的金鑰 */
以上設定完成後,可用指令 testparm 來測試參數是否正確,如圖4-50。
(圖4-50)
接著要產生給 Samba 使用者登入的帳號,samba tdsam 帳號需要使用系統內已有的帳號名稱來轉換,假設我們系統內已經有之前產生過的帳號名稱 newuser ,新增 smaba 帳號如以下:
$ pdbedit -a -u newuser
/* 參數 -a (add user)為新增 ,參數 -u (username)為後面接上使用者名稱 */
圖4-51可以看到想查詢有那些 Samba 的使用者,可以利用指令
$ pdbedit -L # 參數 -L 為列出使用者
並對照系統的使用者資訊檔案/etc/passwd,可以看出兩者確實使用一樣的 uid。
(圖4-51)
接下來,一開始設定檔內的說明,就提醒我們要設定 SELinux 的 policy 與允許的 boolean
$ setsebool -P samba_domain_controller on
$ setsebool -P samba_enable_home_dirs on
如果是系統產生的檔案要分享(如 /var),請記得執行以下
$ setsebool -P samba_export_all_ro on # 或 setsebool -P samba_export_all_rw on
接著用以下對 Samba 分享您所建立的資料夾(非系統產生)來允許
$ chcon -Rt samba_share_t /mysamba
最後要啟動 Samba 伺服器軟體,並加入開啟啟動 Samba服務
$ service smb start
$ chkconfig --level 235 smb on
若用 nmap 掃描一下TCP ,可知道多啟用了服務埠 139/tcp netbios-ssn 與 445/tcp microsoft-ds 記得要設定 iptables 允許這兩個連接埠之服務,如下:
$ iptables -A INPUT -p tcp --dport 139 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 445 -j ACCEPT
$ service iptables save
以上設定完成後,就可以在連入端設定連入此 samb 伺服器,若連入端在 Linux 環境下,可以使用 mount -t cifs ( https://wiki.samba.org/index.php/LinuxCIFS_utils,https://access.redhat.com/solutions/448263 )來掛載,並須確認掛載來源與目的的資料夾皆存在
$ mkdir /mysamba
$ mkdir /media/sambadisk # 假設要掛載到 /media/sambadisk
$ mount -t cifs -o username=newuser //10.0.2.15/sambadisk \ /media/sambadisk
如果登入需要帳號密碼且僅需要讓newuser帳號與newuser的群組使用,則掛載時可利用
$ mount -t cifs -o \ uid=500,gid=500,username=newuser,password=newuserpassword \ //10.0.2.15/sambadisk /media/sambadisk
若要在 MS Windows 下來掛載此 samba 網路磁碟,則點選本機(我的電腦),開啟視窗後,在點選連線網路磁碟機,如圖4-52 藍色箭頭處,便會出現中間的連線網路磁碟機視窗,緊接著在此視窗選擇磁碟機要掛載的代號,與輸入資料夾,如視窗範例,我們輸入以下即可:\\10.0.2.15\sambadisk
#請注意 MS Windows 下的斜線的方向為 \
若要登入時即連線,請勾選 登入時重新連線(R)。圖4-52為筆者使用 MS Windows 10 來連線 Samba 網路磁碟機的範例,其他 MS Windows 的版本,皆大同小異。
(圖4-52)
以上為 Samba 伺服器軟體的設定,若需要更多詳細的參數設定,可參考 https://www.samba.org/samba/docs/using_samba/ch06.html。下一節,筆者要介紹 NIS 伺服器軟體,可用來與 NFS 結合作為同時管理多台的叢集式電腦架構的基礎,例如用利用 NFS 分享母電腦主機的 /home 與 /opt 或 /usr/,與利用 NIS 來分享登入的帳號密碼給子電腦主機(node),其中 node 主機內僅需要安裝系統 / (root) 與 swap (buffer),其他運算軟體與磁碟空間皆由母電腦主機提供,而子電腦主機僅提供自身運算資源來做平行運算,提升計算效率。
If you have any feedback or question, please go to my forum to discuss.
# NFS
與其它安裝伺服器軟體相同的方法,我們僅需要使用 yum install nfs-utils 來下載,下載後先利用 rpm -qa | grep rpcbind 確認是否有此檔,因為這在後面的 NIS 章節亦會用到,若無需再執行 yum install rpcbind 來下載,如圖4-41。
(圖4-41)
接著,假設我們想要分享 /myshare 資料夾的內容,先利用使用指令 mkdir /myshare 產生此資料夾,並利用 vim /etc/exports 進入 nfs 的設定檔,來設定網路分享的磁碟空間,如下
/myshare 192.168.100.0/255.255.255.0(rw, sync, no_subtree_check, no_root_squash)
/* 分享 /myshare 資料夾預設能存取的 IP 範圍為 192.168.100.0 - 192.168.100.255(或使用 192.168.100.24 來表示。若要表示幾個IP主機,亦可用空格符號來分隔,如
/myshare 192.168.100.20(rw) 192.168.100.30(ro)
並請注意個主機IP間的符號 ( ) 與 空白字元,若為叢集式(Cluster)運算主機群,則通常設定會有一個母主機,分 /home 讓子機掛載 ),存取的權限為可讀寫(rw,故若需唯讀請設定 ro ),並同步寫入記憶體與硬碟中(sync),除此之外,亦開放遠端連入使用者,可使用root權限來讀取與寫入檔案(no_root_squash),故請注意使用時權限過大可能造成檔案的安全性問題,若擔心,請換成 root_squash 或是 all_squash 來降低權限。no_subtree_check 為無須確認其上層資料夾的權限,以加快速度。設定完儲存後離開,接著利用下面指令來啟動,並加入開機執行:
$ service nfs start
$ chkconfig --level 35 nfs on
/* 在 CentOS6_x64 下,筆者安裝好後,開機後已經有在背景執行 rcpbind 與 nfslock,故便無需再重啟此兩個被 nfs service 所依附的服務 */
接著我們利用 Nmap 軟體(https://nmap.org/),來掃瞄一下我們的分享 port,看是否有無 nfs 的服務 ,若無安裝 nmap ,可以利用指令 yum -y install nmap,來安裝。接著輸入
$ nmap -sT 127.0.0.1
/* 可以看到 127.0.0.1 (localhost) 開啟的對內 TCP 連線服務埠,如圖4-42-1 */
與
$ nmap -sT 10.0.2.15
/* 筆者的虛擬機器下給的 IP 為 10.0.2.15 ,開啟對外TCP 連線服務的埠為圖4-42-2 黃框處 */
(圖4-42-1)
由圖4-42-1 與圖4-42-2 可得知,僅有 ssh(22/tcp)、rpcbind(111/tcp)、nfs(2049/tcp)、mysql(3306/tcp),其中 rpcbind 與 nfs 便是我們要使用 nfs service 會用到的連線埠,請開啟iptables 防火牆設定允許,如下:
$ iptables -A INPUT -p tcp --dport 111,2049 -j ACCEPT
$ iptables -A INPUT -p udp --dport 111,2049 -j ACCEPT # nfs 亦可以用udp連線
$ service iptables save
若想利用 tcp wrapper 在 /etc/hosts.allow 與 /etc/hosts.deny 做過濾條件,可用服務名稱 rpcbind 來指令,如在 /etc/hosts.deny 內加入如下:
rpcbind: ALL EXCEPT 10.0.2.0/24 192.168.100.0/24
並請記得設定 SELinux 的允許 /myshare 可讓 nfs 操作的權限,如下:
$ semanage fcontext -a -t nfs_t "/myshare(/.*)?"
/* 原本預設 /var/ilb/nfs 為 nfs 分享資料夾,並使用 nfs_t 的 policy,可用 semanage fcontext -l | grep nfs 查詢,故將 policy 也設定到 /myshare 與其下層的子資料夾 */
$ restorecon -Rv /myshare
/* 其他權限,可參考 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-SELinux_Contexts_Labeling_Files-Persistent_Changes_semanage_fcontext.html。 */
接著輸入以下指令可以看到主機分享那些資料夾:
$ showmount -e
/* 參數 -e ,為列出 export 那些資料夾與那些主機可使用的清單 */
若要調整分享的資料夾,可以再利用 vim /etc/exports 編輯檔案並儲存後,直接使用以下(如圖4-43):
$ exportfs -arv
/* 參數 -a ( all directories),為重新整理是否分享的全部資料夾,參數 -r (re-export)為重新分享 ,真正的 export 參數,可用 cat /var/lib/nfs/etab 得知。 */
(圖4-43)
以上為 nfs 伺服器軟體端的設定,至於使用者連入端,可直接使用 mount 指令來掛載,假設要掛載有nfs 分享的資料夾如下(圖4-44):
$ mkdir /nfshome
$ mount -t nfs 10.0.2.15:/home /nfshome # 參數 -t 指定檔案格式為 nfs
$ df -h # 看已掛上的磁碟狀態
這樣掛載成功後,使用者便可以藉由網路來連線到遠端的主機磁碟,並利用指令如
$ cp -rudp ~/* /nfshome
來備分到遠端的含有磁碟陣列系統的主機,資料就可以有備無患,並實現異地備分的效果。
(圖4-44)
若要使用者連入端要設定開機掛載,如將遠端的 /home 掛載成為本機的 /home,則只要編輯 /etc/fstab 檔案,加入如圖 4-45黃框處內容,或可改為加入參數方式(如 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s1-nfs-client-config-options.html 與 http://nfs.sourceforge.net/nfs-howto/ar01s05.html )
10.0.2.15:/home /home nfs bg,rw,hard,intr,rsize=8192,wsize=8192 0 0
/* rsize 與 wsize 為讀寫的 buffer 容量,增加容量原則上可以加快存取的效率 */
(圖4-45)
若不想永久掛載在主機上,想需要時候再掛載,此時可利用 autofs 的功能(若無此軟體,請用yum -y install autofs 安裝,一般都已有預設安裝並開機執行,如應用於光碟機的掛載 ),確認您的主機 autofs 有開機啟動並背景執行後(若無,請使用 chkconfig --level 35 autofs on ),接著假設我們要讓掛載 nfs 磁碟的指令自動執行,一樣要掛載遠端 nfs server 的/home 成為連入端主機的 /mnt/nfshome 。首先創造一個 /etc/auto.mynfs ,讓 autofs 執行的設定檔(map file),其內容如下 :
nfshome -fstype=nfs,rw 10.0.2.15:/home # 主機IP 10.0.2.15 利用 nfs 方法分享 /home
再將此設定檔加入 autofs 的執行內容檔 /etc/auto.master,用指令 vim /etc/auto.master,加入如圖4-46黃框處後儲存離開。
(圖4-46)
圖4-46設定完後,再重新啟動 autofs 如下:
$ service autofs restart
此時可以直接使用 ls -al /mnt/nfshome,就可以看到掛載的內容,但卻不會在 df -h 看到,但可以查詢 df -h /mnt/nfshome,如圖4-47。若要調整掛載等待時間5分鐘無動作就卸載 ,可進入 /etc/autofs.conf,修改 timeout 參數。
(圖4-47)
利用 nfs 掛載網路磁碟機後,若要備份或鏡像備份,可以利用 rsync 的支援 ssh 協定備份來增加安全性,指令如下:
$ rsync -e ssh -av --delete 10.0.2.15:/home/* /home/remotehome
/* 如以上方式傳輸備份資料,才能利用 ssh 來達到傳輸資料加密的作用,參數 --delete 為刪除目的比來源多餘的檔案或資料夾,故成為鏡像備份,需增量備份的使用者請勿加此參數,使用時要注意。 */
以上為 nfs 軟體的伺服器與使用者連入端(客戶端)之操作方式,其他詳細的 nfs 參數設定,可參考 http://nfs.sourceforge.net/,http://nfs.sourceforge.net/nfs-howto/ar01s03.html
#SAMBA
另一套磁碟分享的軟體為SAMBA,且主要應用於與 MS Windows 的作業環境下分享(如Windows的
(圖4-48)
下載後,一樣編輯 samba 的設定檔 /etc/samba/smb.conf,與先前一樣,請先看清楚設定檔內的說明,因設定檔相當長,筆者亦僅列出需要修改之處,如下:
[global]
workgroup = mysamba # 工作群組名稱
netbios name = samba_server
/* NetBIOS 使用的名稱(https://en.wikipedia.org/wiki/NetBIOS),可自訂 */
unix charset = utf8
/* 跟隨系統設定,使用 utf8 編碼以中英文檔名,https://en.wikipedia.org/wiki/UTF-8 */
security = user
passdb backend = tdbsam
/* samba 改為使用 tdbsam 的帳密資料庫(https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/passdb.html),並相容於舊的 smbpasswd */
display charset = utf8
/* 顯示文字之編碼,使用 utf8 編碼,unicode 編碼可見http://unicode.org/Public/UCD/latest/charts/CodeCharts.pdf */
dos charset = cp950
/* 傳統 dos 編碼為 cp950,可來顯示 big5(https://en.wikipedia.org/wiki/Big5),其他編碼可至 Unicode Consortium 網站 http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/ 查詢*/
hosts allow = 192.168.100.0/24 10.0.2.0/24 # 僅允許此兩個網域連入
encrypt passwords = yes # 密碼須加密,針對Windows XP以上的登入
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
/* 減少TCP與傳輸延遲,並加大接收緩衝區與送出緩衝區至 64K */
dns proxy = no
load printers = no # 不允許 printer 分享
guest ok = no # 不允許 guest 存取
tls enabled = yes #使用 tls 加密,與其他伺服器軟體一樣,要產生的金鑰與憑證
tls keyfile = /etc/samba/mysamba.key
tls certfile = /etc/samba/mysamba.pem
protocol = SMB2 # 為防止 wannacrypt 攻擊,會造成綁架軟體加密的 SMBv1
# 以上為全部共用的設定
[sambadisk]
comment = sambadisk # 要分享的磁碟名稱sambadisk之說明文字
browseable = no # 不要公布名稱於網路芳鄰上,請連入端自行利用網路磁碟機連線
path = /mysamba # 要提供分享的來源資料夾
writeable = yes # 是否可寫入,若要利用 Samba 備份資料,請改 yes
printable = no # 是否可列印
create mode = 0644 # 新增的檔案權限預設為 0644( u+rw, g+r, o+r )
directory mode = 0644 # 資料夾的權限,不能違反系統本身對分享資料夾的權限設定
# 以上為自訂分享磁碟名稱 sambadisk 的設定
並將不要分享的 [home] 與 [printers] 參數,用符號 ; 加前頭關閉,如圖4-49
(圖4-49)
接著記得產生設定檔所設定tls加密用的金鑰與憑證檔(https://wiki.samba.org/index.php/Configuring_LDAP_over_SSL_(LDAPS)_on_a_Samba_AD_DC)
$ cd /etc/samba/
$ openssl req -nodes -x509 -days 3650 -newkey rsa:2048 -keyout mysamba.key -out mysamba.pem
/* 一樣產生十年的金鑰 */
以上設定完成後,可用指令 testparm 來測試參數是否正確,如圖4-50。
(圖4-50)
接著要產生給 Samba 使用者登入的帳號,samba tdsam 帳號需要使用系統內已有的帳號名稱來轉換,假設我們系統內已經有之前產生過的帳號名稱 newuser ,新增 smaba 帳號如以下:
$ pdbedit -a -u newuser
/* 參數 -a (add user)為新增 ,參數 -u (username)為後面接上使用者名稱 */
圖4-51可以看到想查詢有那些 Samba 的使用者,可以利用指令
$ pdbedit -L # 參數 -L 為列出使用者
並對照系統的使用者資訊檔案/etc/passwd,可以看出兩者確實使用一樣的 uid。
(圖4-51)
接下來,一開始設定檔內的說明,就提醒我們要設定 SELinux 的 policy 與允許的 boolean
$ setsebool -P samba_domain_controller on
$ setsebool -P samba_enable_home_dirs on
如果是系統產生的檔案要分享(如 /var),請記得執行以下
$ setsebool -P samba_export_all_ro on # 或 setsebool -P samba_export_all_rw on
接著用以下對 Samba 分享您所建立的資料夾(非系統產生)來允許
$ chcon -Rt samba_share_t /mysamba
最後要啟動 Samba 伺服器軟體,並加入開啟啟動 Samba服務
$ service smb start
$ chkconfig --level 235 smb on
若用 nmap 掃描一下TCP ,可知道多啟用了服務埠 139/tcp netbios-ssn 與 445/tcp microsoft-ds 記得要設定 iptables 允許這兩個連接埠之服務,如下:
$ iptables -A INPUT -p tcp --dport 139 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 445 -j ACCEPT
$ service iptables save
$ mkdir /mysamba
$ mkdir /media/sambadisk # 假設要掛載到 /media/sambadisk
$ mount -t cifs -o username=newuser //10.0.2.15/sambadisk \ /media/sambadisk
如果登入需要帳號密碼且僅需要讓newuser帳號與newuser的群組使用,則掛載時可利用
$ mount -t cifs -o \ uid=500,gid=500,username=newuser,password=newuserpassword \ //10.0.2.15/sambadisk /media/sambadisk
若要在 MS Windows 下來掛載此 samba 網路磁碟,則點選本機(我的電腦),開啟視窗後,在點選連線網路磁碟機,如圖4-52 藍色箭頭處,便會出現中間的連線網路磁碟機視窗,緊接著在此視窗選擇磁碟機要掛載的代號,與輸入資料夾,如視窗範例,我們輸入以下即可:\\10.0.2.15\sambadisk
#請注意 MS Windows 下的斜線的方向為 \
若要登入時即連線,請勾選 登入時重新連線(R)。圖4-52為筆者使用 MS Windows 10 來連線 Samba 網路磁碟機的範例,其他 MS Windows 的版本,皆大同小異。
(圖4-52)
以上為 Samba 伺服器軟體的設定,若需要更多詳細的參數設定,可參考 https://www.samba.org/samba/docs/using_samba/ch06.html。下一節,筆者要介紹 NIS 伺服器軟體,可用來與 NFS 結合作為同時管理多台的叢集式電腦架構的基礎,例如用利用 NFS 分享母電腦主機的 /home 與 /opt 或 /usr/,與利用 NIS 來分享登入的帳號密碼給子電腦主機(node),其中 node 主機內僅需要安裝系統 / (root) 與 swap (buffer),其他運算軟體與磁碟空間皆由母電腦主機提供,而子電腦主機僅提供自身運算資源來做平行運算,提升計算效率。
If you have any feedback or question, please go to my forum to discuss.