Linux 系統中,存儲設主要有下面幾種:node
DASmysql
DAS 指 Direct Attached Storage,即直連附加存儲,這種設備直接鏈接到計算機主板總線上,計算機將其識別爲一個塊設備,例如常見的硬盤,U 盤等,這種設備很難作到共享。ios
NASsql
NAS 指 Network Area Storage,它通常是將本地的存儲空間共享給其餘主機使用,通常經過 C/S 架構實現通訊。它實現的是文件級別的共享,計算機一般將共享的設別識別爲一個文件系統,其文件服務器會管理鎖以實現併發訪問。常見的 NAS 有 NFS 和 CIFS。數據庫
SAN SAN 指 Storage Area Network,它將傳輸網絡模擬成 SCSI 總線來使用,每個主機的網卡至關於 SCSI 總線中的 initiator,服務器至關於一個或多個 target,它須要藉助客戶端和服務端的 SCSI 驅動,經過 FC 或 TCP/IP 協議封裝 SCSI 報文。它實現的是塊級別的共享,一般被識別爲一個塊設備,可是須要藉助專門的鎖管理軟件才能實現多主機併發訪問。瀏覽器
FTP 是一個文件傳輸的協議,客戶端須要使用專門的 ftp 客戶端與服務器端進行通訊,以完成文件的上傳和下載,FTP 協議工做在應用層。它使用兩個鏈接與客戶端通訊:安全
FTP 服務器會監聽 TCP 21 號端口用於命令鏈接,而數據鏈接有兩種模式:服務器
Linux 中經常使用的 FTP 客戶端軟件有 lftp, ftp, lftpget, wget, curl 等。Windows 中可使用瀏覽器,資源管理器或 Filezilla 等軟件。網絡
FTP 協議中使用了相似於 HTTP 協議的響應碼:架構
下面介紹 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 中,全部的虛擬用戶會被統一映射爲一個指定的系統賬號,訪問的默認目錄即爲此賬號的家目錄。虛擬用戶帳號也以存儲在文件中,也能夠存放在關係型數據庫中。
準備數據庫及相關表
mysql> create database vsftpd; mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'redhat'; mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 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 全稱是 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 00 4 tcp 111 portmapper 00 3 tcp 111 portmapper 00 2 tcp 111 portmapper 00 4 udp 111 portmapper 00 3 udp 111 portmapper 00 2 udp 111 portmapper 24 1 udp 54525 status 24 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: 關閉指定的導出的文件系統
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
命令查看語法使用有錯誤。