das
das 指 direct attached storage,即直連附加存儲,這種裝置直接連接配接到計算機主機闆總線上,計算機将其識别為一個塊裝置,例如常見的硬碟,u 盤等,這種裝置很難做到共享。
nas
nas 指 network area storage,它一般是将本地的存儲空間共享給其他主機使用,一般通過 c/s 架構實作通信。它實作的是檔案級别的共享,計算機通常将共享的設别識别為一個檔案系統,其檔案伺服器會管理鎖以實作并發通路。常見的 nas 有 nfs 和 cifs。
san san 指 storage area network,它将傳輸網絡模拟成 scsi 總線來使用,每一個主機的網卡相當于 scsi 總線中的 initiator,伺服器相當于一個或多個 target,它需要借助用戶端和服務端的 scsi 驅動,通過 fc 或 tcp/ip 協定封裝 scsi 封包。它實作的是塊級别的共享,通常被識别為一個塊裝置,但是需要借助專門的鎖管理軟體才能實作多主機并發通路。
在nfs,ftp,samba中,其中下載下傳速度或者說性能最好的是nfs,其次ftp,最後samba
ftp
ftp 是一個檔案傳輸的協定,用戶端需要使用專門的 ftp 用戶端與伺服器端進行通信,以完成檔案的上傳和下載下傳,ftp 協定工作在應用層。它使用兩個連接配接與用戶端通信:
指令連接配接:用于傳輸檔案管理類指令,此連接配接在用戶端連接配接後會始終線上
資料連接配接:用于傳輸檔案資料,此連接配接會按序建立
ftp 伺服器會監聽 tcp 21 号端口用于指令連接配接,而資料連接配接有兩種模式:
主動模式,伺服器使用 tcp 20 号端口主動建立連接配接到用戶端的某随機端口
被動模式,用戶端使用随機端口連接配接伺服器端的随機端口
linux 中常用的 ftp 用戶端軟體有 lftp, ftp, lftpget, wget, curl 等。windows 中可以使用浏覽器,資料總管或 filezilla 等軟體。
ftp 協定中使用了類似于 http 協定的響應碼:
1xx:提示資訊
2xx:成功類狀态碼
3xx:提示需進一步提供補充類資訊的狀态碼
4xx:用戶端錯誤
5xx:服務端錯誤
下面介紹 vsftpd 這款服務端軟體的使用,ftp 在使用者認證時,會使用系統中的使用者進行身份認證,同時 ftp 支援虛拟使用者,虛拟使用者最終也需要映射為系統中的某個使用者,匿名使用者會被映射為系統中的 ftp 使用者。
配置檔案
vsftpd 使用了 pam 子產品進行使用者身份認證,配置檔案為 /etc/pam.d/vsftpd vsftpd 的主配置檔案為/etc/vsftpd/vsftpd.conf
使用者通路 ftp 時,預設通路的位置是使用者自己的家目錄。ftp 使用者的家目錄為 /var/ftp/,是以使用匿名使用者将預設通路 /var/ftp 目錄。
匿名使用者的配置
vsftpd.conf 中,關于匿名使用者的配置有
anonymous_enable=yes # 是否允許匿名使用者
anon_upload_enable=yes # 匿名使用者是否可以上傳
anon_mkdir_write_enable=yes # 匿名使用者是否可以建立檔案夾
anon_ohter_write_enable=yes # 匿名使用者的其他權限,如删除檔案夾的權限
本地使用者的配置
local_enable=yes # 是否啟用系統使用者
write_enable=yes # 是否允許系統上傳檔案
local_umask=022 # 上傳的檔案的預設 umask 值
當系統使用者登入 ftp 後,預設位于其家目錄中,但是也可以通路系統的其他目錄,這樣通常是不安全的。可以将系統使用者禁锢于其家目錄中:
chroot_local_user=yes # 是否禁锢系統使用者與其家目錄中
也可以指定使用者将其禁锢于家目錄中:
chroot_list_enable=yes # 啟用 chroot list 檔案
chroot_list_file=/etc/vsftpd/chroot_list # chroot list 檔案
如果 chroot_local_user 為 no,那麼 chroot list 檔案中的使用者将被禁锢至家目錄中,如果chroot_local_user 為 yes,那麼表示僅 chroot_list 檔案中的使用者不會被禁锢至家目錄中。
日志
xferlog_enable=yes # 是否啟用傳輸日志
xferlog_file=/var/log/vsftpd.log # 日志檔案位置
改變上傳檔案的屬主
chown_uploads=yes # 是否修改使用者上傳檔案的屬主
chown_username=someone # 修改的屬主名稱
連接配接限制
max_clients= # 伺服器的最大并發連接配接數
max_per_ip= # 每個 ip 可同時發起的并發請求數
anno_max_rate= # 匿名使用者的最大傳輸速率,機關是 byte/s
local_max_rate= # 本地使用者的最大傳輸速率
使用者登入控制
userlist_enable=yes # 啟用userlist檔案
userlist_deny=yes # yes 表示 userlist 為使用者黑名單,no 表示 userlist 為白名單
userlist_file /etc/vsftpd/user_list # userlist 檔案位置
虛拟使用者
ftp 中,所有的虛拟使用者會被統一映射為一個指定的系統帳号,通路的預設目錄即為此帳号的家目錄。虛拟使用者賬号也以存儲在檔案中,也可以存放在關系型資料庫中。
将 ftp 虛拟使用者存放在資料庫中
準備資料庫及相關表
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'redhat';
mysql> grant select on vsftpd.* to [email protected] identified by 'redhat';
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
-> id int auto_increment not null,
-> name char(20) binary not null,
-> password char(48) binary not null,
-> primary key(id)
-> );
添加虛拟使用者
這裡使用 mysql 的 password() 函數将使用者密碼加密,如果 pam_mysql 的password() 函數與 mysql 的 password() 函數不同,也可以将密碼明文存放。
mysql> insert into users(name,password) values('foo',password('redhat'));
mysql> insert into users(name,password) values('bar',password('redhat'));
安裝 pam_mysql 包,建立 pam 認證所需檔案,編輯 /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
修改 vsftpd 配置檔案,使其使用 mysql 認證
pam_service_name=vsftpd.mysql
anonymous_enable=yes
write_enable=yes
anon_upload_enable=no
anon_mkdir_write_enable=no
chroot_local_user=yes
guest_enable=yes
guest_username=vuser
建立虛拟使用者映射的系統使用者
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot
啟用 vsftpd 服務 # service vsftpd start
現在,就可以使用資料庫中的 foo 和 bar 使用者登入 ftp 了。
nfs
nfs 全稱是 network filesystem,nfs 和其他檔案系統一樣,是在 linux 核心中實作的,是以 nfs 很難做到與 windows 相容。nfs 共享出的檔案系統會被用戶端識别為一個檔案系統,用戶端可以直接挂載并使用。
nfs 的實作使用了 rpc(remote procedure call) 的機制,遠端過程調用使得用戶端可以調用服務端的函數。由于有 vfs 的存在,用戶端可以像使用其他普通檔案系統一樣使用 nfs 檔案系統,由作業系統核心将 nfs 檔案系統的調用請求通過 tcp/ip 發送至服務端的 nfs 服務,執行相關的操作,之後服務端再講操作結果傳回用戶端。

nfs 檔案系統僅支援基于 ip 的使用者通路控制,nfs 是在核心實作的,是以 nfs 服務由核心監聽在 tcp 和 udp 的 2049 端口,對于 nfs 服務的支援需要在核心編譯時選擇。它同時還使用了幾個使用者空間程序用于通路控制,使用者映射等服務,這些程式由 nfs-utils 程式包提供。
rpc 服務在 centos 6.5 之後改名為 portmapper,它監聽在 tcp/udp 的 111 端口,其他基于 rpc 的服務程序需要監聽時,先像 rpc 服務注冊,rpc 服務為其配置設定一個随機端口供其使用。用戶端在請求時,先向 rpc 服務請求對應服務監聽的端口,然後再向改服務發出調用請求。
檢視 rpc 服務清單:
[root@node2 ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 54525 status
100024 1 tcp 36141 status
啟用 nfs 服務,隻需要編輯 /etc/exports 檔案,檔案格式如下
directory (or file system) client1(option1, option2) client2(option1, option2)
例如,共享 /shared/nfs 目錄給 10.0.0.0/8 網段的用戶端,且具有讀寫權限:
/shared/nfs 10.0.0.0/8(rw)
之後啟動 nfs 服務即可
# service nfs start
在括号中的共享選項中,下面的選項可以實作對 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 挂載的檔案系統上的檔案時,使用者的通路通常都會受到限制,這就是說使用者都是以匿名使用者的身份來對檔案進行通路的,這些使用者預設情況下對這些檔案隻有隻讀權限。如果使用者希望以 root 使用者或鎖定義的其他使用者身份通路遠端檔案系統上的檔案,nfs 允許指定通路遠端檔案的使用者——通過使用者辨別号(uid)群組辨別号(gid)進行使用者映射。
使用者映射的選項:
root_squash: 這個選項不允許 root 使用者通路挂載上來的 nfs 卷。
no_root_squash: 這個選項允許 root 使用者通路挂載上來的 nfs 卷。
all_squash: 這個選項對于公共通路的 nfs 卷來說非常有用,它會限制所有的 uid 和 gid,隻使用匿名使用者。預設設定是 no_all_squash。
anonuid 和 anongid: 這兩個選項将匿名 uid 和 gid 修改成特定使用者群組帳号。
用戶端挂載 nfs 檔案系統的方式
# mount -t nfs 10.10.0.2:/shared/nfs /mnt
還可以使用 showmount 指令檢視主機上共享的 nfs 檔案系統清單
# showmount -e ip_addr
其中 ip_addr 為 nfs 伺服器位址。
如果伺服器端修改了 nfs 的配置,而又不想重新開機 nfs 服務(因為有用戶端正在使用)可以使用 exportfs 指令重新載入 nfs 配置。
export -ar: 重新導出所有的檔案系統
export -au: 關閉導出的所有檔案系統
export -u fs: 關閉指定的導出的檔案系統
samba
nfs 隻能在 unix 系統間進行共享,而 windows 對其支援很有限。是以有人就在 linux/unix 系統中實作了 windows 檔案共享所使用的 cifs 協定,也叫做 smb(simple message block)協定。這使得 windows/linux/unix 間可以自由的進行檔案共享。
samba 主要監聽在這幾個端口:137/udp, 138/udp, 139/tcp, 445/tcp
在 windows 中共享的檔案系統,可以在 linux 中使用 samba 用戶端通路,或者直接挂載通路。
檢視某主機共享的檔案系統:
# smbclient -l host -u username
擷取到資訊後,使用 smbclient 進行通路
# smbclient //server/shared_name -u username
基于挂載的方式通路:
# mount -t cifs //server/shared_name /mount_point -o username=username, password=password
在 linux 中建構 samba 伺服器,需要安裝 samba 軟體包,它共有兩個服務,其中 smb 提供資料通路,nmb 提供 netbios 的實作。
samba 的主機闆配置檔案為:/etc/samba/smb.conf
samba 服務中的使用者都必須是系統中存在的使用者,使用時需要将這些使用者加入到 samba 中來,使用 smbpasswd指令:
smbpasswd:
-a sys_user: 添加系統使用者為samba使用者
-d :禁用
-e: 啟用
-x: 删除
smb.conf 中包含了許多全局設定,windows 域設定等内容。
全局配置
workgroup = mygroup # 工作組名稱
server string = samba server version %v # 描述資訊,%v表示版本
netbios name = myserver # netbios中的名稱
interfaces = lo eth0 192.168.12.2/24 # 監聽的接口和位址
hosts allow = 127. 192.168.12. 192.168.13 # 通路控制白名單
日志選項
log file = /var/log/samba/log.%m # 日志檔案,%m表示用戶端主機名稱或ip
max log size = 50 # 日志檔案最大大小,機關
常用共享選項
[shared_name]
path = # 檔案系統路徑
browseable = {yes|no} # 是否可以被檢視到
public = {yes|no} # 是否可被所有人讀
guest ok = {yes|no} # 與 public 相同
read only = yes # 是否隻讀
writeable = yes # 是否可寫
write list = user1, user2 # 可寫使用者清單
@group, +group # 可寫組清單
valid users = # 白名單
invalid users = # 黑名單
配置完成後可以使用 testparm 指令檢視文法使用有錯誤
原文位址:http://www.cnblogs.com/wxl-dede/p/5042398.html