<一>、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 = {yes|no}
read only = {yes|no}
write list = +GROUP_NAME
測試配置文件是否有語法錯誤,以及顯示最終生效的配置:
# testparm