網絡文件共享服務


DAS、NAS、SAN

DAS:直接附加存儲,磁盤和服務器直接通過數據線或光纖連接(磁盤和服務器都在一台機器上),速度快

NAS:網絡附加存儲,服務器和存儲通過交換機連接,在存儲上事先准備好磁盤,分好區,格式化文件系統,掛載,然后通過協議,把分區掛載的目錄共享到網絡

SAN:存儲區域網絡,服務器和存儲離的特別遠,中間還需要交換機來相連,需要走一些協議(iscsi協議),一一旦連接成功,就會在服務器上出現一個新的硬盤,而服務器就感覺這個硬盤就像在本機一樣,但是這個存儲空間是在遠程,然后服務器就可以對這個硬盤創建分區,格式化文件系統,掛載,就可以存儲數據了

 

ftp

文件傳輸協議(FTP)(一定要確保防火牆和selinux是關閉的)

File Transfer Protocol 早期的三個應用級協議之一

基於C/S結構

雙通道協議:數據和命令連接

數據傳輸格式:二進制(默認)和文本

兩種模式:服務器角度

命令(控制):客戶端:隨機port ---服務器:tcp21

數據:客戶端:隨機port+1---服務器:tcp20

被動(PASV style):客戶端主動連接

命令(控制):客戶端:隨機port ---服務器:tcp21

數據:客戶端:隨機port+1 ---服務器:隨機port

服務器被動模式數據端口示例:(被動模式,服務器通過命令通道告訴客戶端自己打開的端口,不是直接告訴,而是發給客戶端兩個數字,讓客戶端通過運算來得出端口,例如:端口號為:m*256+n)

227 Entering Passive Mode (192,168,175,138,224,59)

服務器數據端口為:224*256+59

客戶端連接ftp服務器,走命令通道,ftp服務器打開了21端口,客戶端打開的隨機端口

下載文件數據,走數據通道,ftp有兩種模式,ftp服務器主動模式打開了20端口,被動模式打開了隨機端口,而客戶端打開了隨機端口,這里是針對ftp服務器,主動模式是ftp服務器連接客戶端,被動模式是客戶端連接服務器

傳輸數據時,如果要是主動模式,就是服務器連接客戶端,但是是主動模式,服務器不知道ftp客戶端打開的端口,就無法連接,這時客戶端就會走命令通道告訴ftp服務器,自己打開的端口,接着服務器就知道了客戶端打開的端口就可以通過主動模式連接客戶端,傳輸數據了

傳輸數據時走被動模式,就是客戶端連接ftp服務器,被動模式,服務器打開了隨機端口,客戶端並不知道,就無法連接,這時ftp服務器就會通過命令通道告訴客戶端自己打開的端口,接着客戶端就知道了服務器打開的端口,就可以通過被動模式連接ftp服務器,傳輸數據了

但是客戶端和服務器都有防火牆,只允許自己出,自己進,不允許別人進,這時上面傳輸數據的方式就失效了。對於ftp服務器的搭建的防火牆是硬件防火牆,有連接跟蹤功能,可以分析命令通道21端口的數據包。假如客戶端通過命令通道21端口,連接到了ftp服務器,如果想要走主動模式,服務器去連接客戶端,客戶端有防火牆,這時不行的,只能走被動模式,客戶端通過命令通道已經知道了ftp服務器要打開的端口,就會連接這個端口,而ftp服務器的防火牆有連接跟蹤功能,已經知道了將來客戶端要連接這個端口,就會在防火牆上打開這個端口,從而實現被動模式,客戶端連接服務器,傳輸數據。

FTP軟件介紹

FTP服務器:

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:VerySecure FTP Daemon,CentOS默認FTP服務器

高速,穩定,下載速度是WU-FTP的兩倍

ftp,redhat.com數據:單機最多可支持15000個並發

客戶端軟件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserverport -A主動模式–p 被動模式

lftp–u username ftpserver

lftpusername@ftpserver

lftpgetftp://ftpserver/pub/file

gftp: GUI centos5 最新版2.0.19 (11/30/2008)

filezilla,CuteFtp,FlashFXP,LeapFtp

IE ftp://username:password@ftpserver

 

FTP服務

狀態碼:

1XX:信息125:數據連接打開

2XX:成功類狀態200:命令OK 230:登錄成功

3XX:補充類331:用戶名OK

4XX:客戶端錯誤425:不能打開數據連接

5XX:服務器錯誤530:不能登錄

用戶認證:

匿名用戶:ftp,anonymous,對應Linux用戶ftp,隨便輸密碼,都能登錄

系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow

虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件

nsswitch:networkservice switch名稱解析框架

pam:pluggableauthentication module 用戶認證

/lib64/security /etc/pam.d/ /etc/pam.conf

 

vsftpd服務

由vsftpd包提供

不再由xinetd管理

用戶認證配置文件:/etc/pam.d/vsftpd

服務腳本:/usr/lib/systemd/system/vsftpd.service

/etc/rc.d/init.d/vsftpd

配置文件:/etc/vsftpd/vsftpd.conf

man 5 vsftpd.conf

格式:option=value

注意:=前后不要有空格

匿名用戶(映射為系統用戶ftp )共享文件位置:/var/ftp(用戶ftp的家目錄),不能切根

系統用戶共享文件位置:用戶家目錄,能夠切根

虛擬用戶共享文件位置:為其映射的系統用戶的家目錄

 

連接ftp服務器時,會議root的身份運行了vsftpd程序,連進去之后,還沒輸入賬戶密碼,就會開一個子進程,是以nobody的身份運行,當輸入賬戶密碼時,就會又開了一個子進程,該子進程是以ftp的身份運行

 

ftp服務的常見配置

命令端口

listen_port=21(默認)

可以認為更改命令端口,但是連接ftp服務器時就要指定端口了

主動模式端口

connect_from_port_20=YES 主動模式端口為20

ftp_data_port=20 指定主動模式的端口,可以認為指定主動模式端口

連接到ftp服務器默認傳輸文件是以被動模式傳輸的,想要以主動模式傳輸,敲passive,關閉被動模式就行了,再敲一遍passive就開啟了別動模式

!rm 表示刪除本機的文件

del表示刪除上傳的文件,不過要在ftp配置文件中配置才允許

被動模式端口范圍

linux客戶端默認使用被動模式

windows 客戶端默認使用主動模式

pasv_min_port=6000 0為隨機分配

pasv_max_port=6010

使用當地時間

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_uploads=YES(默認NO)

chown_username=wang 設置上傳文件的所屬人為wang

chown_upload_mode=0644設置上傳文件的權限為644

 

Linux系統用戶

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_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

當chroot_local_user=YES時,則/etc/vsftpd/chroot_list中用戶不禁錮

當chroot_local_user=NO時,則/etc/vsftpd/chroot_list中用戶禁錮

wu-ftp日志:默認啟用

xferlog_enable=YES (默認)啟用記錄上傳下載日志

xferlog_std_format=YES (默認)使用wu-ftp日志格式

xferlog_file=/var/log/xferlog(默認)可自動生成

vsftpd日志:默認不啟用

dual_log_enable=YES 使用vsftpd日志格式,默認不啟用

vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成

登錄提示信息

ftpd_banner="welcometo mage ftp server"

banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效

目錄訪問提示信息

dirmessage_enable=YES (默認)

message_file=.message(默認)信息存放在指定目錄下.message

你要訪問哪個目錄,就在哪個目錄下面建一個.message,里面寫着目錄訪問的提示信息,當你訪問這個目錄時,就會顯示.message里的提示信息

如圖,我訪問upload目錄時,就會提示紅色的upload dir信息

 

 

使用pam(Pluggable Authentication Modules)完成用戶認證

pam_service_name=vsftpd

pam配置文件:/etc/pam.d/vsftpd

如果/etc/pam.d/vsftpd中是deny,/etc/vsftpd/ftpusers默認文件中用戶拒絕登錄

是否啟用控制用戶登錄的列表文件

userlist_enable=YES 默認有此設置

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服務器

連接限制

max_clients=0 最大並發連接數

max_per_ip=0 每個IP同時發起的最大連接數

vsftpd服務指定用戶身份運行

nopriv_user=nobody

傳輸速率:字節/秒

anon_max_rate=0 匿名用戶的最大傳輸速率

local_max_rate=0 本地用戶的最大傳輸速率

連接時間:秒為單位

connect_timeout=60 主動模式數據連接超時時長

accept_timeout=60 被動模式數據連接超時時長

data_connection_timeout=300 數據連接無數據輸超時時長

idle_session_timeout=60 無命令操作超時時長

優先以文本方式傳輸(默認是以二進制方式傳輸,文本方式傳輸會造成數據丟失)

ascii_upload_enable=YES

ascii_download_enable=YES

 

配置ftp服務為非獨立服務

配置FTP服務以非獨立服務方運行:listen=NO,默認為獨立方式

(1)安裝xinetd服務

yum install telnet-server 安裝telnet服務自動會給你安裝xinetd服務,因為telnet服務是依賴xinetd服務的

(2)修改ftp服務的配置文件

listen=NO 加一行,就改為非獨立服務

(3)配置非獨立服務的子配置文件'

cd /etc/xinetd.d

cp telnet vsftpd

(3)chkconfig --list

我先關了ftp服務,然后再開啟xinetd服務,依然打卡了21端口

是xinetd監聽21端口,一旦有人來訪問,就會自動激活ftp服務

 

實現基於SSL的FTPS

(1)查看是否支持SSL

ldd `which vsftpd` 查看到libssl.so

(2)創建自簽名證書

cd /etc/pki/tls/certs/

make vsftpd.pem

mv vsftpd.pem /etc/vsftpd

(3)配置vsftpd服務支持SSL

vim /etc/vsftpd/vsftpd.conf

ssl_enable=YES 啟用SSL

allow_anon_ssl=NO 匿名不支持SSL

force_local_logins_ssl=YES 本地用戶登錄加密

force_local_data_ssl=YES 本地用戶數據傳輸加密

rsa_cert_file=/etc/vsftpd/vsftpd.pem

cat -A /etc/vsftpd/vsftpd.conf可以檢查空格

(4)用filezilla等工具測試

 

實現基於文件驗證的vsftpd虛擬用戶

(1)創建虛擬賬號

cd /etc/vsftpd

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

chmod 555 /app/ftpuser

mkdir /app/ftpuser/upload

chown ftpuser /app/ftpuser/upload

(4)創建pam配置文件,讓ftp通過數據庫文件來驗證身份,需要用到pam模塊

定義一個pam模塊配置文件

vim /etc/pam 后面是db數據庫文件的路徑

(5)將虛擬賬號映射為系統賬號,指定pam配置文件,修改ftp配置文件

(6)重啟ftp服務,測試,現在就可以用虛擬賬號登陸了

(7)虛擬用戶建立獨立的配置文件

mdkir /etc/vsftpd/ftpusers.d/ 創建配置文件存放的路徑

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/ftpusers.d/

cd /etc/vsftpd/ftpusers.d/ 進入此目錄

現在想允許ftp1能夠上傳文件和創建目錄和刪除修改上傳的文件,ftp2登陸的目錄為/app/ftpuser1,

ftp3登陸的根目錄為/app/ftpuser2

vim ftp1

vim ftp2

vim ftp3

再創建根目錄,並在各根目錄下創建不同的文件加以區分

mkdir /app/ftpuser1

mkdir /app/ftpuser2

mkdir /app/ftpuser1/f1

mkdir /app/ftpuser2/f2

chown ftpuser /app/ftpuser1/f1

chown ftpuser /app/ftpuser2/f2

chmod 555 /app/ftpuser*

(8)測試

ftp1用戶

ftp2用戶

ftp3用戶和ftp2用戶一樣

 

實驗:實現基於MYSQL驗證的vsftpd虛擬用戶

環境:兩台主機,一台A(IP地址為192.168.10.135):mariadb server 一台B(IP地址為192.168.10.186):ftp server

(1).A機器:安裝mariadb

yum install mariadb-server -y

systemctl start mariadb

mysql_secure_installation

 

mysql -uroot -pcentos

create database vsftpd;

use vsftpd

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';

 

(2)B

測試連接一下數據庫,看能否連接成功

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

cd pam_mysql-0.7RC1

./configure --with-pam-mods-dir=/lib64/security --with-pam=/usr

make && make install

 

(3)准備兩個共享目錄/app/ftpdir和/app/ftpdir2,將來ftp1連接ftp服務器,登陸的是/app/ftpdir目錄,而ftp2連接ftp服務器,登陸的是/app/ftpdir2目錄

useradd -d /app/ftpdir -r -m ftpuser

chmod 555 /app/ftpdir

cd /app/ftpdir

mkdir upload

chown ftpuser upload

 

mkdir /app/ftpdir2

chmod 555 /app/ftpdir2

cd /app/ftpdir2

mkdir upload2

chown ftpuser upload

 

(3)

vim /etc/pam.d/vsftpd.mysql

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

 

(4)修改ftp服務的配置文件

vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd.mysql 修改

加下面行

guest_enable=yes

guest_username=ftpuser

user_config_dir=/etc/vsftpd/conf.d/

 

mkdir /etc/vsftpd/conf.d/

vim /etc/vsftpd/conf.d/ftp1

anon_upload_enable=yes 將來ftp1登陸了可以上傳文件

 

vim /etc/vsftpd/conf.d/ftp2

local_root=/app/ftpdir2 將來ftp2登陸了,共享目錄是/app/ftpdir2

 

(5)測試,用另外一台機器來連接ftp服務器(192.168.10.186)

ftp1登錄,能夠上傳文件

ftp2登錄,共享目錄為/app/ftpdir2

 

ftp工具

Axel:網絡客戶端工具

下載安裝axel

ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel-2.4-1.el6.rf.x86_64.rpm

axel -n 3 -o /root

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

NFS服務

NFS:Network File System 網絡文件系統,基於內核的文件系統。Sun公司開發,通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call Protocol遠程過程調用)實現

 

RPC采用C/S模式。客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。

 

NFS優勢:節省本地存儲空間,將常用的數據如:home目錄,存放在一台NFS服務器上且可以通過網絡訪問,那么本地終端將可以減少自身存儲空間的使用

/dev/sda2是ext4文件系統,/app/nfsdir是在/dev/sda2上,通過nfs服務器共享出去,當通過nfs方式訪問/app/nfsdir時,可以將遠程的/app/nfsdir目錄掛載到本機的一個目錄下,然后就可以訪問/app/nfsdir的數據了,就像在本機一樣

NFS各個版本的對比

 

NFS服務介紹

軟件包:nfs-utils

Kernel支持:nfs.ko

端口:2049(nfsd), 其它端口由portmap(111)分配

配置文件:/etc/exports,/etc/exports.d/*.exports

CentOS7不支持同一目錄同時用nfs和samba共享,因為使用鎖機制不同

相關軟件包:rpcbind(必須),tcp_wrappers

CentOS6開始portmap進程由rpcbind代替

NFS服務主要進程:(進程多就意味着打開的端口多)

rpc.nfsd最主要的NFS進程,管理客戶端是否可登錄

rpc.mountd掛載和卸載NFS文件系統,包括權限管理

rpc.lockd非必要,管理文件鎖,避免同時寫出錯

rpc.statd非必要,檢查文件一致性,可修復文件

日志:/var/lib/nfs/

每次啟動nfs服務,打開的端口都是變化的,這樣別人怎樣才可以連接你呢?每次開啟nfs服務,會把打開的端口號注冊到一個特殊的服務中,這個服務叫fpcbind,這個服務就起着監控nfs服務端口的作用,在centos6上,如果把這個服務停了,那么nfs服務起不來,在centos7上,把這個服務停了,nfs服務還會起來,這是因為開啟nfs服務,會自動激活rpcbind服務,而centos6就不會激活。

 

配置防火牆

配置防火牆,開放NFS服務

•配置NFS使用固定端口(不常用)

•vim /etc/sysconfig/nfs

RQUOTAD_PORT=875

LOCKD_TCPPORT=32803

LOCKD_UDPPORT=32769

MOUNTD_PORT=892

STATD_PORT=662

STATD_OUTGOING_PORT=2020

•防火牆除開放上述端口,還需開放TCP和UDP的111和2049共4個端口

 

NFS配置文件

導出的文件系統的格式:

/dir主機1(opt1,opt2) 主機2(opt1,opt2)...

#開始為注釋

主機格式:

•單個主機:ipv4,ipv6,FQDN

•IP networks:兩種掩碼格式均支持

172.18.0.0/255.255.0.0

172.18.0.0/16

•wildcards:主機名通配,例如*.magedu.com,IP不可以

•netgroups:NIS域的主機組,@group_name

•anonymous:表示使用*通配所有客戶端

每個條目指定目錄導出到的哪些主機,及相關的權限和選項

•默認選項:(ro,sync,root_squash,no_all_squash)

•ro,rw 只讀和讀寫

•async異步,數據變化后不立即寫磁盤,性能高

•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使用

 

NFS工具

rpcinfo

rpcinfo -p hostname

rpcinfo –s hostname 查看RPC注冊程序

exportfs

–v 查看本機所有NFS共享

–r 重讀配置文件,並共享目錄

–a 輸出本機所有共享

–au 停止本機所有共享

 

showmount -e hostname

查看可以掛載的目錄

 

mount.nfs 掛載工具

NFSv4支持通過掛載NFS服務器的共享"根",從而瀏覽NFS服務器上的共享目錄列表

mount nfsserver:/ /mnt/nfs

 

客戶端NFS掛載

基於安全考慮,建議使用nosuid,nodev,noexec掛載選項

創建設備

NFS相關的掛載選項:

fg(默認)前台掛載,bg后台掛載

hard(默認)持續請求,soft 非持續請求

intr和hard配合,請求可中斷

rsize和wsize一次讀和寫數據最大字節數,rsize=32768

_netdev無網絡不掛載

示例:

mount -o rw,nosuid,fg,hard,intr172.16.0.1:/testdir/mnt/nfs/

開機掛載:/etc/fstab

172.16.0.1:/public mnt/nfs nfs defaults 0 0

 

自動掛載

可使用autofs按需要掛載NFS共享,在空閑時自動卸載

由autofs包提供

系統管理器指定由/etc/auto.master自動掛載器守護進程控制的掛載點

自動掛載監視器訪問這些目錄並按要求掛載文件系統

文件系統在失活的指定間隔5分鍾后會自動卸載

為所有導出到網絡中的NFS啟用特殊匹配-host 至"browse"

參看幫助:man 5 autofs

支持含通配符的目錄名

* server:/export/&

 

間接匹配

用的是相對路徑,會影響本地目錄結構

假如說將共享目錄/app/test掛載到/app/nfsdir上,那么dirname就是/app,basename就是nfsdir

vim /etc/auto.master

dirname /etc/子配置文件

vim /etc/子配置文件

basename -fstype=nfs 192.168.10.187:/app/test

如果共享目錄的基名和本地掛載的目錄基名相同則可以表示

* -fstype=nfs 192.168.10.187:/app/&

假如說將共享目錄掛到本地的/home目錄下,會影響家目錄的結構,導致其他用戶登錄沒有了家目錄

直接匹配

直接匹配包括絕對路徑名稱

不會影響本地目錄結構

假如說將共享目錄/app/test掛載到/app/nfsdir上

vim /etc/auto.master

/- /etc/子配置文件

vim /etc/子配置文件

/app/nfsdir 192.168.10.187:/app/nfsdir

 

實現nfs服務共享

(1)編輯nfs服務的配置文件,設置共享哪個目錄和誰可以訪問共享目錄

vim /etc/ports

/app/nfsdir1 * (ro)共享/app/nfsdir1目錄,允許所有人訪問,共享目錄只讀

/app/nfsdir2 * (rw)共享/app/nfsdir2目錄,允許所有人訪問,共享目錄可讀可寫

創建共享目錄

mkdir /app/nfsdir1

mkdir /app/nfsdir2

(2)重讀nfs配置文件

systemctl reload nfs-server

exprtfs -v 查看共享的目錄

exportfs -r 重讀nfs服務配置文件

exports -au 關閉共享目錄

exportfs -a 開啟共享目錄

(3)在客戶端掛載共享目錄

查看可以掛載的共享目錄

掛載共享目錄

mount 192.168.10.200:/app/nfsdir1 /mnt/nfs1

mount 192.168.10.200:/app/nfsdir2 /mnt/nfs2

也可以寫到/etc/fstab中,開機自動掛載

生效mount -a

(4)在前面我們設置了共享目錄/app/nfsdir1是只讀的,而共享目錄/app/nfsdir2是可讀可寫的,所能在掛載到/app/nfsdir2上的目錄里創建文件,掛載到/app/nfsdir1上的目錄里不能創建,下面來測試:

cd /mnt/nfs1然后創建文件,報錯說是只讀文件系統

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身份來創建權限

exportfs -v可以看到root壓榨

改成root不壓榨,就要修改nfs服務的配置文件,默認是壓榨的

再用exportfs -v來查看一下

在客戶端創建一個文件,查看其所屬人和所屬組均為root

 

如果既有root不壓榨,又有所有壓榨,此時root不壓榨將失效,在共享目錄里面創建的文件還是以nfsnobody的身份創建的

 

對於普通用戶是不壓榨身份的,例如,客戶端在nfs共享目錄創建一個文件,在nfs服務器是以和客戶端用戶的uid,gid相同的用戶顯示其所屬人,所屬組,如果nfs服務器沒有該用戶的話,就會顯示uid和gid。

 

通過設置IP地址來控制訪問

 

實驗:實現NFS偽根

(1)配置nfs服務器

mkdir /data/123

mount -b /data/123 /app/nfsdir2 將/data/123掛載到/app/nfsdir2上

可以考慮將之寫到/etc/fstab中,實現開機自動掛載

vim /etc/fstab

/data/123 /app/nfsdir3 none bind 0 0

 

vim /etc/exports

/app *(r0,fsid=0)

/app/nfsdir1 *(rw)

/app/nfsdir2 *(rw)(將來客戶端將該共享目錄掛載到本地目錄上,實際上掛載的是/data/123目錄)

 

exportfs -v 查看共享的目錄

(2)配置nfs客戶端

showmount -e 192.168.10.187

實現自動掛載

mkdir /app/nfsdir1

mkdir /app/nfsdir2

vim /etc/auto.master (使用直接匹配)

vim /etc/auto.txt

然后重啟autofs服務

cd /app/nfsdir1

cd /app/nfsdir2

就實現了自動掛載

 

NFS相關SELinux設置

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)

 

 

 

SAMBA

SAMBA服務簡介

windos的計算機名是具有網絡意義的,能夠ping通這就需要計算機名是不能夠沖突的,而linux中的主機名是不具有網路意義的

SMB:Server Message Block服務器消息塊,IBM發布,最早是DOS網絡文件共享協議

Cifs:common internet file system,微軟基於SMB發布

SAMBA:1991年Andrew Tridgell,實現windows和UNIX相通

SAMBA的功能:

•共享文件和打印,實現在線編輯

•實現登錄SAMBA用戶的身份認證

•可以進行NetBIOS名稱解析

•外圍設備共享

計算機網絡管理模式:

•工作組WORKGROUP:計算機對等關系,帳號信息各自管理

•域DOMAIN:C/S結構,帳號信息集中管理,DC,AD

 

相關包:

Samba 提供smb服務

Samba-client 客戶端軟件

samba-common 通用軟件

cifs-utilssmb客戶端工具

samba-winbind和AD相關

相關服務進程:

smbd提供smb(cifs)服務TCP:139,445

nmbdNetBIOS名稱解析UDP:137,138

主配置文件:/etc/samba/smb.conf

幫助參看:man smb.conf

語法檢查:testparm[-v] [/etc/samba/smb.conf]

客戶端工具:smbclient,mount.cifs

 

SAMBA服務器配置

smb.conf繼承了.ini文件的格式,用[ ] 分成不同的部分

全局設置:

[global] 服務器通用或全局設置的部分

特定共享設置:

[homes] 用戶的家目錄共享

[printers] 定義打印機資源和服務

[sharename] 自定義的共享目錄配置

其中:#和;開頭的語句為注釋,大小寫不敏感

宏定義:

%m 客戶端主機的NetBIOS名 %M 客戶端主機的FQDN

%H 當前用戶家目錄路徑 %U 當前用戶用戶名

%g 當前用戶所屬組 %h samba服務器的主機名

%L samba服務器的NetBIOS名 %I 客戶端主機的IP

%T 當前日期和時間 %S 可登錄的用戶名

 

samba服務有兩個服務,一個smb(samba的核心服務),一個是nmb(用來實現名字解析的,將NetBIOS名解析成IP地址)

systemctl start smb 開啟兩個端口,都是tcp協議

systemctl start nmb 也開啟兩個端口,都是udp協議

 

SAMBA服務器全局配置

workgroup 指定工作組名稱

server string 主機注釋信息

netbiosname 指定NetBIOS名

interfaces 指定服務偵聽接口和IP

 

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

主機名: desktop.example.com

以example.com后綴的主機名: .example.com

示例:

hosts allow = 172.25.

hosts allow = 172.25. .example.com

 

hosts deny 拒絕指定主機訪問

 

configfile=/etc/samba/conf.d/ %U 用戶獨立的配置文件

Log file=/var/log/samba/log. %m不同客戶機采用不同日志

max log size=50 日志文件達到50K,將輪循rotate,單位KB

Security三種認證方式:

share:匿名(CentOS7不再支持)

user:samba用戶(采有linux用戶,samba的獨立口令)

domain:使用DC(DOMAINCONTROLLER)認證

passdbbackend = tdbsam密碼數據庫格式

實現samba用戶:

包:samba-common-tools

工具:smbpasswdpdbedit

samba用戶須是Linux用戶,建議使用/sbin/nologin

管理SAMBA用戶

添加samba用戶

smbpasswd -a <user>

pdbedit -a -u <user>

 

修改用戶密碼

smbpasswd <user>

 

刪除用戶和密碼:

smbpasswd –x <user>

pdbedit –x –u <user>

 

查看samba用戶列表:

/var/lib/samba/private/passdb.tdb

pdbedit –L –v 查看samba用戶的詳細信息

 

查看samba服務器狀態

smbstatus

 

禁用samba賬號

smbpasswd -d <user>

 

啟用samba賬號

smbpasswd -e <user>

 

在windos登陸linux系統的samba共享目錄,是需要輸入samba服務自身的賬號和密碼,和linux系統用戶無關,而且默認登陸的共享目錄是samba用戶的家目錄

 

怎樣創建一個samba用戶

1.useradd -s /sbin/nologin smb1

2.smbpasswd -a smb1

這樣就將linix系統的用戶添加成samba用戶

 

在windos上訪問samba共享目錄

(1)現在linux系統上建立好samba用戶

1.useradd -s /sbin/nologin smb1

2.smbpasswd -a smb1

(2)在windos上訪問

默認共享目錄是該用戶的家目錄

(3)現在想訪問別的共享目錄,但是重新登進去,直接不用輸賬戶密碼,就登陸了共享目錄,這個共享目錄還是上一次登陸的smb1賬戶的家目錄,這是因為windos已經記住了上一次登陸的賬戶和密碼,默認下一次還登陸該賬號,所以此時應該在windos清除上一次登陸的賬號和密碼,才能登陸新的共享目錄

這樣就可以訪問別的共享目錄了

 

查看共享目錄

smbclient -L ip地址

訪問共享目錄

smbclient //192.168.10.187/smb1 -U smb1%centos

samba服務常用的配置

注意:要備份一下samba服務的配置文件

1.通過NetBIOS名來訪問共享目錄

2.通過IP地址來控制訪問

hosts allow = ip地址(可以上網段)

hosts deny = ip地址

如圖:只允許本機和127.網段訪問,和192.168.10.135訪問

 

3.記錄日志

%I是客戶端的主機ip,這是samba服務自帶的變量

log file = 日志文件路徑

log level = number 2表示記錄的日志更加詳細

現在我在IP地址為192.168.10.135的主機來訪問共享目錄

然后查看日志

 

4.配置共享目錄

每個共享目錄應該有獨立的[ ]部分

[共享名稱] 遠程網絡看到的共享名稱

comment 注釋信息

path 所共享的目錄路徑

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后面也可以跟組,+組名或@組名表示組,不加+或者@,就會把其當做是用戶

如圖:

共享目錄為/app/nfsdir1

write list = smb1 允許smb1用戶可寫

valid users = smb1 smb2允許smb1和smb2訪問

browsable = smb3 不允許用戶smb3查看到共享目錄

 

我將用戶smb1和smb2添加到admin組中,也可以這樣寫如圖:

 

SMB客戶端訪問

UNC路徑: Universal Naming Convention,通用命名規范(在windos里面訪問共享目錄)

格式:\\sambaserver\sharename

 

終端下使用smbclient登錄服務器

smbclient -L instructor.example.com 查看共享目錄

smbclient -L instructor.example.com -U wang

>cddirectory

>getfile1

> put file2

smbclient //instructor.example.com/shared -U wang%centos

可以使用-U選項來指定用戶%密碼,或通過設置和導出USER和PASSWD環境變量來指定

例如"smbclient //192.168.10.187/publicnfshare1 -U smb1%centos

 

掛載CIFS文件系統

手動掛載

mount -t cifs -o user=wang,password=magedu //server//shared /mnt/smb(可以省略-t cifs,默認是cifs)

開機自動掛載

•cat /etc/fstab

//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

•cat /etc/smb.txt

username=wang

password=password

•chmod600 /etc/smb.txt 給這個文件也設置好權限,使其他人不能查看

 

多用戶掛載

SAMBA共享默認只支持同時用一個用戶掛載SMB共享

CentOS7中可啟用多用戶掛載功能

客戶端掛載samba共享目錄后,在客戶端登錄的不同用戶訪問同一個samba的掛載點,可獲得不同權限

實驗:實現多用戶掛載

實驗環境:兩台機器:A:192.168.10.187 samba服務器 B:192.168.10.200 客戶端

(1)准備samba賬號(A機器samba服務器端)

useradd -s /sbin/nologin smb1

useradd -s /sbin/nologin smb2

useradd -s /sbin/nologin smb3

groupadd admin

gpasswd -a smb1 admin

smbpasswd -a smb1

smbpasswd -a smb2

smbpasswd -a smb3

(2)配置共享目錄(A機器smba服務器端)

mkdir /app/nfsdir1

chmod 777 /app/nfsdir1

 

vim /etc/samba/smb.conf

共享目錄為/app/nfsdir1

允許smb1用戶可寫

允許訪問共享目錄的用戶有admin組中的用戶和用戶smb2和用戶smb3

 

(3)啟動多用戶自動掛載共享目錄(B機器客戶端)

vim /etc/fstab

vim /etc/smbuser.txt

chmod 600 /etc/smbuser.txt

mount -a 自動掛載

 

(4)實現多用戶訪問(B機器客戶端)

useradd smb1

useradd smb2

 

用root訪問

cd /mnt/smbdir

touch 456 權限拒絕

 

用smb1去訪問

su - smb1

cifscreds add –u smb1 192.168.10.187

cd /mnt/smbdir

touch 222 創建成功

 

用smb2去訪問

su - smb2

cifscreds add –u smb2 192.168.10.187

cd /mnt/smbdir

touch 333 權限拒絕

 

實驗:實現圖形化管理

一、在CentOS6(第二張光盤)上安裝包

yum install samba-swat

二、配置swat服務

vim /etc/xinetd.d/swat

disable = no

port = 901

only_from= 127.0.0.1 此行改成172.16.0.0/16

service xinetdrestart

三、瀏覽器訪問管理

http://127.0.0.1:901 以root用戶登錄

注意:commit changes后會自動重新加載配置,且自動將/etc/samba/smb.conf中原有的注釋全刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM