<一>、nfs
RPC:RemoteProcedure Call protocol,即遠端過程調用協定
調用遠端主機上的函數
一部分功能由本地程式完成,另一部分功能由遠端主機上的函數完成
遠端過程調用示意圖

半結構化資料
XML:eXtended MarkLanguage,擴充标記語言,重量級;
JSON:輕量級;
RESTful:基于http的RPC;
NFS:Network File System,即網絡檔案系統
依賴于RPC實作其功能
是一種跨主機實作網絡存儲功能的檔案共享伺服器方案
NFS結構示意圖
設想情景一:
某檔案(a)在用戶端以fedora(id=785)身份建立,則檔案的屬主和屬組為fedora,存儲至遠端NFS伺服器;
1、NFS伺服器上無id=785,則a檔案的屬主和屬組無對應使用者,用戶端使用者權限映射為服務端的nobody使用者權限;
2、NFS伺服器上恰好有id=785,對應的使用者是hadoop,則用戶端使用者權限映射為服務端hadoop使用者的權限;
設想情景二:
以root身份在用戶端建立某檔案(b),存儲至遠端NFS伺服器,則b檔案的屬主、屬組id=0;而NFS伺服器的root使用者id也=0,進而用戶端使用者權限映射為服務端管理者的權限;
NIS:Network Information Service,即網絡資訊系統
身份認證不在本地完成,而是集中于指定伺服器
NFS: 基于IP的認證
RPC:
NFS:2049/tcp, 2049/udp
RPC服務:portmapper
rpcinfo:report RPC information
nfs伺服器:
nfsd, mountd, idmapd
檢視NFS伺服器端共享的檔案系統:
showmount-e NFSSERVER_IP
挂載NFS檔案系統:
mount-t nfs SERVER:/path/to/sharedfs /path/to/mount_point
/etc/exports:
檔案系統 用戶端(選項) 用戶端(選項)
用戶端:IP、FQDN或DOMAIN、NETWORK
exportfs:維護exports檔案導出的檔案系統表的專用工具:
export-ar: 重新導出所有的檔案系統
export-au: 關閉導出的所有檔案系統
export-u FS: 關閉指定的導出的檔案系統
開機自動挂載nfs:
/etc/fstab
SERVER:/PATH/TO/EXPORTED_FS/mount_point nfs defaults,_netdev 0 0
補充材料:
/etc/exports 檔案中的項的格式相當簡單。要共享一個檔案系統,隻需要編輯/etc/exports 并使用下面的格式給出這個檔案系統(和選項)即可:
directory (or file system) client1(option1, option2) client2(option1,option2)
常用選項
有幾個常用的選項可以對 NFS 實作進行定制。這些選項包括:
secure: 這個選項是預設選項,它使用了 1024 以下的 TCP/IP 端口實作 NFS 的連接配接。指定 insecure 可以禁用這個選項。
rw: 這個選項允許 NFS 客戶機進行讀/寫通路。預設選項是隻讀的。
async: 這個選項可以改進性能,但是如果沒有完全關閉 NFS 守護程序就重新啟動了 NFS 伺服器,這也可能會造成資料丢失。
no_wdelay: 這個選項關閉寫延時。如果設定了 async,那麼 NFS 就會忽略這個選項。
nohide: 如果将一個目錄挂載到另外一個目錄之上,那麼原來的目錄通常就被隐藏起來或看起來像空的一樣。要禁用這種行為,需啟用 hide 選項。
no_subtree_check: 這個選項關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查。預設選項是啟用子樹檢查。
no_auth_nlm: 這個選項也可以作為 insecure_locks 指定,它告訴 NFS守護程序不要對加鎖請求進行認證。如果關心安全性問題,就要避免使用這個選項。預設選項是 auth_nlm 或 secure_locks。
mp (mountpoint=path): 通過顯式地聲明這個選項,NFS 要求挂載所導出的目錄。
fsid=num: 這個選項通常都在 NFS 故障恢複的情況中使用。如果希望實作 NFS的故障恢複,請參考 NFS 文檔。
使用者映射
通過 NFS 中的使用者映射,可以将僞或實際使用者群組的辨別賦給一個正在對 NFS卷進行操作的使用者。這個 NFS 使用者具有映射所允許的使用者群組的許可權限。對 NFS卷使用一個通用的使用者/組可以提供一定的安全性和靈活性,而不會帶來很多管理負荷。
在使用 NFS挂載的檔案系統上的檔案時,使用者的通路通常都會受到限制,這就是說使用者都是以匿名使用者的身份來對檔案進行通路的,這些使用者預設情況下對這些檔案隻有隻讀權限。這種行為對于root 使用者來說尤其重要。然而,實際上的确存在這種情況:希望使用者以 root 使用者或所定義的其他使用者的身份通路遠端檔案系統上的檔案。NFS允許指定通路遠端檔案的使用者——通過使用者辨別号(UID)群組辨別号(GID),可以禁用正常的 squash 行為。
使用者映射的選項包括:
root_squash: 這個選項不允許 root 使用者通路挂載上來的 NFS 卷。
no_root_squash: 這個選項允許 root 使用者通路挂載上來的 NFS 卷。
all_squash: 這個選項對于公共通路的 NFS 卷來說非常有用,它會限制所有的 UID 和 GID,隻使用匿名使用者。預設設定是no_all_squash。
anonuid 和 anongid: 這兩個選項将匿名 UID 和 GID修改成特定使用者群組帳号。
用戶端挂載時可以使用的特殊選項:
Client
Mountingremote directories
Beforemounting remote directories 2 daemons should be be started first:
rpcbind
rpc.statd
rsize 是從伺服器讀取的位元組數。wsize是寫入到伺服器的位元組數。預設都是1024, 如果使用比較高的值,如8192,可以提高傳輸速度。
Thetimeo value is the amount of time, in tenths of a second, to wait beforeresending a transmission after an RPC timeout. After the first timeout, thetimeout value is doubled for each retry for a maximum of 60 seconds or until amajor timeout occurs. If connecting to a slow server or over a busy network,better performance can be achieved by increasing this timeout value.
Theintr option allows signals to interrupt the file operation if a major timeoutoccurs for a hard-mounted share.
總結:
1、用戶端表示方式
2、導出選項:
rw,async, sync, root_squash, no_root_squash, all_squash, anonuid, anongid
3、exportfs和showmount
<二>、samba
samba基礎:
smb:
Service Message Block
CIFS:
Common Internet File System
監聽端口:137/udp,
138/udp, 139/tcp, 445/tcp
NetBIOS:
Windows基于于主機實作互相通信的機制;
15個字元
samba服務啟用的程序
nmbd:
netbios
smbd:
cifs
winbindd:
UNC路徑:\\SERVER\shared_name
samba的兩種通路方式
互動式資料通路:
#
smbclient -L HOST -U USERNAME
擷取到共享資訊之後,
smbclint //SERVER/shared_name -U USERNAME
基于挂載的方式通路:
mount
-t cifs //SERVER/shared_name
/mount_point -o username=USERNAME,password=PASSWORD
常用指令和檔案
伺服器:
# yum
-y install samba
服務腳本:
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
主配置檔案:
/etc/samba/smb.conf
samba使用者:
賬号:都是系統使用者, /etc/passwd
密碼:samba服務自有密碼檔案,
将系統使用者添加為samba的指令:smbpasswd
smbpasswd:
-a Sys_User: 添加系統使用者為samba使用者
-d :禁用
-e: 啟用
-x: 删除
配置檔案:
smb.conf
全局設定
特定共享的設定
私有家目錄
列印機共享
自定義共享
自定義共享:
[shared_name]
path =
/path/to/share_directory
comment
= Comment String
guest
ok = {yes|no}
public
= {yes|no}
writable
read
only = {yes|no}
write
list = +GROUP_NAME
測試配置檔案是否有文法錯誤,以及顯示最終生效的配置:
testparm