DAS:直接附加存儲,磁盤和服務器直接經過數據線或光纖鏈接(磁盤和服務器都在一臺機器上),速度快node
NAS:網絡附加存儲,服務器和存儲經過交換機鏈接,在存儲上事先準備好磁盤,分好區,格式化文件系統,掛載,而後經過協議,把分區掛載的目錄共享到網絡mysql
SAN:存儲區域網絡,服務器和存儲離的特別遠,中間還須要交換機來相連,須要走一些協議(iscsi協議),一一旦鏈接成功,就會在服務器上出現一個新的硬盤,而服務器就感受這個硬盤就像在本機同樣,可是這個存儲空間是在遠程,而後服務器就能夠對這個硬盤建立分區,格式化文件系統,掛載,就能夠存儲數據了linux
File Transfer Protocol 早期的三個應用級協議之一ios
命令(控制):客戶端:隨機port ---服務器:tcp21windows
數據:客戶端:隨機port+1---服務器:tcp20centos
命令(控制):客戶端:隨機port ---服務器:tcp21
數據:客戶端:隨機port+1 ---服務器:隨機port
服務器被動模式數據端口示例:(被動模式,服務器經過命令通道告訴客戶端本身打開的端口,不是直接告訴,而是發給客戶端兩個數字,讓客戶端經過運算來得出端口,例如:端口號爲:m*256+n)
227 Entering Passive Mode (192,168,175,138,224,59)
客戶端鏈接ftp服務器,走命令通道,ftp服務器打開了21端口,客戶端打開的隨機端口
下載文件數據,走數據通道,ftp有兩種模式,ftp服務器主動模式打開了20端口,被動模式打開了隨機端口,而客戶端打開了隨機端口,這裏是針對ftp服務器,主動模式是ftp服務器鏈接客戶端,被動模式是客戶端鏈接服務器
傳輸數據時,若是要是主動模式,就是服務器鏈接客戶端,可是是主動模式,服務器不知道ftp客戶端打開的端口,就沒法鏈接,這時客戶端就會走命令通道告訴ftp服務器,本身打開的端口,接着服務器就知道了客戶端打開的端口就能夠經過主動模式鏈接客戶端,傳輸數據了
傳輸數據時走被動模式,就是客戶端鏈接ftp服務器,被動模式,服務器打開了隨機端口,客戶端並不知道,就沒法鏈接,這時ftp服務器就會經過命令通道告訴客戶端本身打開的端口,接着客戶端就知道了服務器打開的端口,就能夠經過被動模式鏈接ftp服務器,傳輸數據了
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:VerySecure FTP Daemon,CentOS默認FTP服務器
ftp,redhat.com數據:單機最多可支持15000個併發
ftp -A ftpserverport -A主動模式–p 被動模式
lftpgetftp://ftpserver/pub/file
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver
匿名用戶:ftp,anonymous,對應Linux用戶ftp,隨便輸密碼,都能登陸
系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
nsswitch:networkservice switch名稱解析框架
pam:pluggableauthentication module 用戶認證
/lib64/security /etc/pam.d/ /etc/pam.conf
服務腳本:/usr/lib/systemd/system/vsftpd.service
匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp(用戶ftp的家目錄),不能切根
鏈接ftp服務器時,會議root的身份運行了vsftpd程序,連進去以後,還沒輸入帳戶密碼,就會開一個子進程,是以nobody的身份運行,當輸入帳戶密碼時,就會又開了一個子進程,該子進程是以ftp的身份運行
connect_from_port_20=YES 主動模式端口爲20
ftp_data_port=20 指定主動模式的端口,能夠認爲指定主動模式端口
鏈接到ftp服務器默認傳輸文件是以被動模式傳輸的,想要以主動模式傳輸,敲passive,關閉被動模式就好了,再敲一遍passive就開啓了別動模式
del表示刪除上傳的文件,不過要在ftp配置文件中配置才容許
use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
注意:匿名登陸,ftp服務器根目錄/var/ftp是不能有寫權限的,不然匿名登陸失敗
anonymous_enable=YES 支持匿名用戶 改成no,不支持匿名用戶
no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
anon_world_readable_only(默認YES)只能下載所有讀的文件,當咱們匿名上傳一個文件f1時,這個文件的權限在其餘人上是沒有讀權限的,其所屬人和所屬組都是ftp,而下載文件是以nobody的身份下載的,只有在其餘人上有讀權限時才能下載上傳的f1文件
anon_upload_enable=YES 匿名上傳,注意:文件系統權限,匿名上傳文件是以ftp的身份上傳的,若是/var/ftp/pub這個目錄的其餘人上沒有wx權限,就不能上傳文件,有兩種方式可以上傳文件,一是修改/var/ftp/pub這個目錄其餘人上的權限,二是對這個目錄設置acl權限setfacl -m u:ftp:rwx /var/ftp/pub/
anon_mkdir_write_enable=YES 可建立文件夾
anon_other_write_enable=YES 可刪除和修改上傳的文件
anon_umask=077 指定匿名上傳umask,默認是077,因此上傳的文件權限爲600,之因此不可以下載上傳的文件就是由於設置上傳umask爲077,致使匿名上傳的文件其餘人上沒有讀權限,當把上傳umask設置爲033,這樣上傳的文件權限就爲644,其餘人上就有了讀權限,這樣就能下載上傳的文件了
chown_username=wang 設置上傳文件的所屬人爲wang
chown_upload_mode=0644設置上傳文件的權限爲644
guest_enable=YES 全部系統用戶都映射成guest用戶
guest_username=ftp 配合上面選項才生效,指定guest用戶
local_enable=YES 是否容許linux用戶登陸
write_enable-YES 容許linux用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
local_root=/ftproot非匿名用戶登陸所在目錄
chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES時,則/etc/vsftpd/chroot_list中用戶不由錮
當chroot_local_user=NO時,則/etc/vsftpd/chroot_list中用戶禁錮
xferlog_enable=YES (默認)啓用記錄上傳下載日誌
xferlog_std_format=YES (默認)使用wu-ftp日誌格式
xferlog_file=/var/log/xferlog(默認)可自動生成
dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用
vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成
ftpd_banner="welcometo mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
message_file=.message(默認)信息存放在指定目錄下.message
你要訪問哪一個目錄,就在哪一個目錄下面建一個.message,裏面寫着目錄訪問的提示信息,當你訪問這個目錄時,就會顯示.message裏的提示信息
如圖,我訪問upload目錄時,就會提示紅色的upload dir信息
若是/etc/pam.d/vsftpd中是deny,/etc/vsftpd/ftpusers默認文件中用戶拒絕登陸
userlist_deny=YES(默認值)黑名單,不提示口令,NO爲白名單
userlist_file=/etc/vsftpd/users_list此爲默認值
/etc/pam.d/ftpusers和/etc/vsftpd/users_list中的用戶是不能登錄ftp服務器的,只有同時知足/etc/pam.d/vsftpd中是allow和userlist_deny=no,/etc/pam.d/ftpusers和/etc/vsftpd/users_list中的用戶才能登錄ftp服務器
connect_timeout=60 主動模式數據鏈接超時時長
accept_timeout=60 被動模式數據鏈接超時時長
data_connection_timeout=300 數據鏈接無數據輸超時時長
idle_session_timeout=60 無命令操做超時時長
配置FTP服務以非獨立服務方運行:listen=NO,默認爲獨立方式
yum install telnet-server 安裝telnet服務自動會給你安裝xinetd服務,由於telnet服務是依賴xinetd服務的
我先關了ftp服務,而後再開啓xinetd服務,依然打卡了21端口
是xinetd監聽21端口,一旦有人來訪問,就會自動激活ftp服務
ldd `which vsftpd` 查看到libssl.so
force_local_logins_ssl=YES 本地用戶登陸加密
force_local_data_ssl=YES 本地用戶數據傳輸加密
rsa_cert_file=/etc/vsftpd/vsftpd.pem
cat -A /etc/vsftpd/vsftpd.conf能夠檢查空格
vim ftpusers.txt 在這個文件中建立虛擬帳號,格式是奇數行是帳號名,偶數行是口令,如圖:
(2)將存放帳號的文件編碼爲hash格式,須要用db_load命令
db_load -T -t hash -f ftpusers.txt ftpusers.db 生成一個tpusers.db數據庫文件
chmod 600 ftpuser.db 爲了安全,不讓其餘人查看該文件,原來存放帳號的文件就能夠刪掉了
(3)建立一個系統帳號,全部虛擬帳號會統一映射爲一個指定的系統賬號,訪問共享位置,即爲此係統賬號的家目錄
useradd -r -d -m /app/ftpuser -s /sbin/nologin ftpuser
chown ftpuser /app/ftpuser/upload
(4)建立pam配置文件,讓ftp經過數據庫文件來驗證身份,須要用到pam模塊
(5)將虛擬帳號映射爲系統帳號,指定pam配置文件,修改ftp配置文件
mdkir /etc/vsftpd/ftpusers.d/ 建立配置文件存放的路徑
user_config_dir=/etc/vsftpd/ftpusers.d/
cd /etc/vsftpd/ftpusers.d/ 進入此目錄
如今想容許ftp1可以上傳文件和建立目錄和刪除修改上傳的文件,ftp2登錄的目錄爲/app/ftpuser1,
chown ftpuser /app/ftpuser1/f1
chown ftpuser /app/ftpuser2/f2
環境:兩臺主機,一臺A(IP地址爲192.168.10.135):mariadb server 一臺B(IP地址爲192.168.10.186):ftp server
create table ftpusers(name char(30),pass char(50));
insert ftpusers values('ftp1',password('centos')),('ftp2',password('magedu'));
grant select on vsftpd.ftpusers to 'ftp'@'192.168.10.186' identified by 'centos';
mysql -uftp -pcentos -h 192.168.10.135
yum groupinstall "development tools" -y
yum install mariadb-devel pam-devel -y
tar xvf pam_mysql-0.7RC1.tar.gz
./configure --with-pam-mods-dir=/lib64/security --with-pam=/usr
(3)準備兩個共享目錄/app/ftpdir和/app/ftpdir2,未來ftp1鏈接ftp服務器,登錄的是/app/ftpdir目錄,而ftp2鏈接ftp服務器,登錄的是/app/ftpdir2目錄
useradd -d /app/ftpdir -r -m ftpuser
auth required pam_mysql.so user=ftp passwd=centos host=192.168.10.135 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
account required pam_mysql.so user=ftp passwd=centos host=192.168.10.135 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=pass crypt=2
pam_service_name=vsftpd.mysql 修改
user_config_dir=/etc/vsftpd/conf.d/
anon_upload_enable=yes 未來ftp1登錄了能夠上傳文件
local_root=/app/ftpdir2 未來ftp2登錄了,共享目錄是/app/ftpdir2
(5)測試,用另一臺機器來鏈接ftp服務器(192.168.10.186)
ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel-2.4-1.el6.rf.x86_64.rpm
ftp://172.16.0.1/pub/ISOs/CentOS-7-x86_64-Everything-1511.iso
axel -n 10 -o ftpfile ftp://192.168.10.135/f1 從ftp服務器上並行下載f1文件到本機的ftpfile中
NFS:Network File System 網絡文件系統,基於內核的文件系統。Sun公司開發,經過使用NFS,用戶和程序能夠像訪問本地文件同樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call Protocol遠程過程調用)實現
RPC採用C/S模式。客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,而後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達爲止。當一個調用信息到達,服務器得到進程參數,計算結果,發送答覆信息,而後等待下一個調用信息,最後,客戶端調用進程接收答覆信息,得到進程結果,而後調用執行繼續進行。
NFS優點:節省本地存儲空間,將經常使用的數據如:home目錄,存放在一臺NFS服務器上且能夠經過網絡訪問,那麼本地終端將能夠減小自身存儲空間的使用
端口:2049(nfsd), 其它端口由portmap(111)分配
配置文件:/etc/exports,/etc/exports.d/*.exports
CentOS7不支持同一目錄同時用nfs和samba共享,由於使用鎖機制不一樣
相關軟件包:rpcbind(必須),tcp_wrappers
每次啓動nfs服務,打開的端口都是變化的,這樣別人怎樣才能夠鏈接你呢?每次開啓nfs服務,會把打開的端口號註冊到一個特殊的服務中,這個服務叫fpcbind,這個服務就起着監控nfs服務端口的做用,在centos6上,若是把這個服務停了,那麼nfs服務起不來,在centos7上,把這個服務停了,nfs服務還會起來,這是由於開啓nfs服務,會自動激活rpcbind服務,而centos6就不會激活。
•防火牆除開放上述端口,還需開放TCP和UDP的111和2049共4個端口
/dir主機1(opt1,opt2) 主機2(opt1,opt2)...
•wildcards:主機名通配,例如*.magedu.com,IP不能夠
•netgroups:NIS域的主機組,@group_name
•默認選項:(ro,sync,root_squash,no_all_squash)
•sync(1.0.0後爲默認)同步,數據在請求時當即寫入共享
•no_all_squash (默認)保留共享文件的UID和GID
•all_squash 全部遠程用戶(包括root)都變成nfsnobody
•root_squash (默認)遠程root映射爲nfsnobody,UID爲65534,早期版本是4294967294 (nfsnobody)
•no_root_squash 遠程root映射成root用戶
•anonuid和anongid 指明匿名用戶映射爲特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用
NFSv4支持經過掛載NFS服務器的共享"根",從而瀏覽NFS服務器上的共享目錄列表
基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
rsize和wsize一次讀和寫數據最大字節數,rsize=32768
mount -o rw,nosuid,fg,hard,intr172.16.0.1:/testdir/mnt/nfs/
172.16.0.1:/public mnt/nfs nfs defaults 0 0
系統管理器指定由/etc/auto.master自動掛載器守護進程控制的掛載點
爲全部導出到網絡中的NFS啓用特殊匹配-host 至"browse"
假如說將共享目錄/app/test掛載到/app/nfsdir上,那麼dirname就是/app,basename就是nfsdir
basename -fstype=nfs 192.168.10.187:/app/test
* -fstype=nfs 192.168.10.187:/app/&
假如說將共享目錄掛到本地的/home目錄下,會影響家目錄的結構,致使其餘用戶登陸沒有了家目錄
假如說將共享目錄/app/test掛載到/app/nfsdir上
/app/nfsdir 192.168.10.187:/app/nfsdir
(1)編輯nfs服務的配置文件,設置共享哪一個目錄和誰能夠訪問共享目錄
/app/nfsdir1 * (ro)共享/app/nfsdir1目錄,容許全部人訪問,共享目錄只讀
/app/nfsdir2 * (rw)共享/app/nfsdir2目錄,容許全部人訪問,共享目錄可讀可寫
mount 192.168.10.200:/app/nfsdir1 /mnt/nfs1
mount 192.168.10.200:/app/nfsdir2 /mnt/nfs2
(4)在前面咱們設置了共享目錄/app/nfsdir1是隻讀的,而共享目錄/app/nfsdir2是可讀可寫的,所能在掛載到/app/nfsdir2上的目錄裏建立文件,掛載到/app/nfsdir1上的目錄裏不能建立,下面來測試:
cd /mnt/nfs2 而後建立文件,也不能建立文件,可是報錯提示是權限拒絕,因此是共享目錄沒有建立文件的權限
咱們再來修改一nfs服務器的共享目錄/app/nfsdir2的權限,chmod 777 /app/nfsdir2,再來建立文件,成功
由上圖知道,建立文件是以nfsnobody的身份來建立的,因此不須要對/app/nfsdir2設置滿權限,只須要對/app/nfsdir2設置acl權限,只讓nfsnobody用戶有建立文件的權限,就能夠來建立文件了
setfacl -m u:nfsnobody:rwx /app/nfsdir2
由上面實驗知道客戶端root到共享目錄裏建立文件,不是以原來的身份建立文件,而是被壓榨成nfsnobody身份來建立權限
改爲root不壓榨,就要修改nfs服務的配置文件,默認是壓榨的
若是既有root不壓榨,又有全部壓榨,此時root不壓榨將失效,在共享目錄裏面建立的文件仍是以nfsnobody的身份建立的
對於普通用戶是不壓榨身份的,例如,客戶端在nfs共享目錄建立一個文件,在nfs服務器是以和客戶端用戶的uid,gid相同的用戶顯示其所屬人,所屬組,若是nfs服務器沒有該用戶的話,就會顯示uid和gid。
mount -b /data/123 /app/nfsdir2 將/data/123掛載到/app/nfsdir2上
/data/123 /app/nfsdir3 none bind 0 0
/app/nfsdir2 *(rw)(未來客戶端將該共享目錄掛載到本地目錄上,實際上掛載的是/data/123目錄)
CentOS7默認SELinux 的布爾值nfs_export_all_ro和nfs_export_all_rw都啓用. 這容許NFS服務能夠讀寫任意文件,基於安全考慮可關閉.
對於只讀的NFS目錄SELinux安全上下文件應設爲public_content_t或nfs_t.
對於讀寫的NFS目錄SELinux安全上下文件應設爲public_content_rw_t或nfs_tcontext,而且布爾值nfsd_anon_writeBoolean 必須啓用,以容許寫操做.
幫助參考nfsd_selinux(8)(selinux-policy-devel包)nfs(5),mount(8),mount.nfs(8),exportfs(8),exports(5), nfsd_selinux(8)
windos的計算機名是具備網絡意義的,可以ping通這就須要計算機名是不可以衝突的,而linux中的主機名是不具備網路意義的
SMB:Server Message Block服務器消息塊,IBM發佈,最先是DOS網絡文件共享協議
Cifs:common internet file system,微軟基於SMB發佈
SAMBA:1991年Andrew Tridgell,實現windows和UNIX相通
•工做組WORKGROUP:計算機對等關係,賬號信息各自管理
語法檢查:testparm[-v] [/etc/samba/smb.conf]
smb.conf繼承了.ini文件的格式,用[ ] 分紅不一樣的部分
%m 客戶端主機的NetBIOS名 %M 客戶端主機的FQDN
%L samba服務器的NetBIOS名 %I 客戶端主機的IP
samba服務有兩個服務,一個smb(samba的核心服務),一個是nmb(用來實現名字解析的,將NetBIOS名解析成IP地址)
systemctl start smb 開啓兩個端口,都是tcp協議
systemctl start nmb 也開啓兩個端口,都是udp協議
hosts allow 可用"," ,空格,或tab分隔,默認容許全部主機訪問,也可在每一個共享獨立配置,如在[global]設置,將應用並覆蓋全部共享設置
IPv4 network/prefix: 172.25.0.0/24 IPv4前綴: 172.25.0.
IPv4 network/netmask: 172.25.0.0/255.255.255.0
以example.com後綴的主機名: .example.com
hosts allow = 172.25. .example.com
configfile=/etc/samba/conf.d/ %U 用戶獨立的配置文件
Log file=/var/log/samba/log. %m不一樣客戶機採用不一樣日誌
max log size=50 日誌文件達到50K,將輪循rotate,單位KB
user:samba用戶(採有linux用戶,samba的獨立口令)
domain:使用DC(DOMAINCONTROLLER)認證
samba用戶須是Linux用戶,建議使用/sbin/nologin
/var/lib/samba/private/passdb.tdb
在windos登錄linux系統的samba共享目錄,是須要輸入samba服務自身的帳號和密碼,和linux系統用戶無關,並且默認登錄的共享目錄是samba用戶的家目錄
1.useradd -s /sbin/nologin smb1
1.useradd -s /sbin/nologin smb1
(3)如今想訪問別的共享目錄,可是從新登進去,直接不用輸帳戶密碼,就登錄了共享目錄,這個共享目錄仍是上一次登錄的smb1帳戶的家目錄,這是由於windos已經記住了上一次登錄的帳戶和密碼,默認下一次還登錄該帳號,因此此時應該在windos清除上一次登錄的帳號和密碼,才能登錄新的共享目錄
smbclient //192.168.10.187/smb1 -U smb1%centos
如圖:只容許本機和127.網段訪問,和192.168.10.135訪問
log level = number 2表示記錄的日誌更加詳細
如今我在IP地址爲192.168.10.135的主機來訪問共享目錄
public 可否被guest訪問的共享,默認no,和guest ok 相似 public = yes 容許匿名登陸
browsable是否容許全部用戶瀏覽此共享,默認爲yes,no爲隱藏 browsable = no 表示容許用戶查看到共享目錄
writable=yes 能夠被全部用戶讀寫,默認爲no,訪問的共享目錄默認是不可寫的
read only=no 和writable=yes等價,如與以上設置衝突,放在後面的設置生效,默認只讀
注意:以上兩種方式均可以控制帳戶對共享目錄是否可寫,可是若是共享目錄自身的其餘人上沒有寫權限,那麼用戶也是不能往共享目錄裏面寫東西的
write list 三種形式:用戶,@組名,+組名,用,分隔
如writable=no,列表中用戶或組可讀寫,不在列表中用戶只讀
valid users 特定用戶才能訪問該共享,如爲空,將容許全部用戶,用戶名之間用空格分隔
valid users後面也能夠跟組,+組名或@組名錶示組,不加+或者@,就會把其當作是用戶
valid users = smb1 smb2容許smb1和smb2訪問
browsable = smb3 不容許用戶smb3查看到共享目錄
我將用戶smb1和smb2添加到admin組中,也能夠這樣寫如圖:
UNC路徑: Universal Naming Convention,通用命名規範(在windos裏面訪問共享目錄)
smbclient -L instructor.example.com 查看共享目錄
smbclient -L instructor.example.com -U wang
smbclient //instructor.example.com/shared -U wang%centos
可使用-U選項來指定用戶%密碼,或經過設置和導出USER和PASSWD環境變量來指定
例如"smbclient //192.168.10.187/publicnfshare1 -U smb1%centos
mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb(能夠省略-t cifs,默認是cifs)
//server/homes /mnt cifs user=wang,passward=magedu 0 0
寫到/etc/fstab裏面,開機自動掛載,可是這樣寫不安全,由於/etc/fstab這個文件,其餘普通用戶也有權限查看,就能看見samba共享目錄的帳號和密碼,能夠用文件代替用戶名和密碼的輸入,這樣其餘普通用戶就看不了共享目錄的帳號和密碼
//server/homes /mnt cifs credentials=/etc/smb.txt 0 0
•chmod600 /etc/smb.txt 給這個文件也設置好權限,使其餘人不能查看
客戶端掛載samba共享目錄後,在客戶端登陸的不一樣用戶訪問同一個samba的掛載點,可得到不一樣權限
實驗環境:兩臺機器:A:192.168.10.187 samba服務器 B:192.168.10.200 客戶端
容許訪問共享目錄的用戶有admin組中的用戶和用戶smb2和用戶smb3
cifscreds add –u smb1 192.168.10.187
cifscreds add –u smb2 192.168.10.187
only_from= 127.0.0.1 此行改爲172.16.0.0/16
http://127.0.0.1:901 以root用戶登陸
注意:commit changes後會自動從新加載配置,且自動將/etc/samba/smb.conf中原有的註釋全刪除