10月14日 網路檔案共享服務 2 NFS服務和SAMBA服務

weixin_34116110發表於2017-10-14

1、NFS服務介紹

  • NFS:Network File System 網路檔案系統,基於核心的檔案系統。Sun公司開發,通過使用NFS,使用者和程式可以像訪問本地檔案一樣訪問遠端系統上的檔案,基於RPC(Remote Procedure Call Protocol遠端過程呼叫)實現,rpc就是客戶端在執行某個程式的時候,執行中途會呼叫遠端伺服器上的一個程式,然後再返回原程式繼續執行的過程。
  • NFS優勢:節省本地儲存空間,將常用的資料如:home目錄,存放在一臺NFS伺服器上且可以通過網路訪問,那麼本地終端將可以減少自身儲存空間的使用。
  • NFS是一個檔案系統,遠端主機可以掛載nfs伺服器上共享的這個nfs檔案系統的檔案
  • 軟體包:nfs-utils
    Kernel支援:nfs.ko
  • 埠:2049(nfsd), 其它埠由rpcbind(111)分配
  • 配置檔案:/etc/exports,/etc/exports.d/*.exports
    CentOS7不支援同一目錄同時用nfs和samba共享,因為使用鎖機制不同
  • 相關軟體包:rpcbind(必須),tcp_wrappers
    CentOS6開始portmap程式由rpcbind代替,rpcbind服務用於管理nfs服務的埠,它可以給nfs各服務分配埠並記錄下來,客戶端不是直接去訪問nfs,因為nfs服務由很多服務組成,並且各個服務的埠不是固定的,所以客戶端首先去訪問rpcbind服務的111埠,通過rpcbind服務找到nfs服務的各個埠,所以安裝nfs服務的同時要安裝rpcbind服務才可以,centos6上要把rpcbind服務也要設定成開機啟動,不然啟動了nfs服務也沒用,客戶端找不到埠,centos7中可以不設定成開機啟動,因為centos7中有獨特的功能,在開啟nfs服務的同時會把依賴的服務rpcbind服務同時開啟。
  • NFS服務主要程式:
    NFS服務由很多程式組成,在開啟主程式的時候會把相應的程式也開啟
    rpc.nfsd最主要的NFS程式,管理客戶端是否可登入
    rpc.mountd掛載和解除安裝NFS檔案系統,包括許可權管理
    rpc.lockd非必要,管理檔案鎖,避免同時寫出錯
    rpc.statd非必要,檢查檔案一致性,可修復檔案
  • 日誌:/var/lib/nfs/
    -開啟nfs服務
centos6中啟動服務
service rpcbind start
chkconfig rpcbind on
service nfs start  
chkconfig nfs on
centos7中啟動服務
systemctl start nfs-server
systemctl enable nfs-server
rpcinfo -p   ---檢視nfs服務開啟的埠號,除了nfs的主服務埠為2049外,其他埠都是由rpcbind服務隨機分配
[root@centos7 app]#rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper  ---雖然這裡的服務寫的是portmapper,但實際上是由rpcbind服務提供的,服務名沒有改過來,還是保留古老的名字,你可以把它當成是rpcbind
    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  43647  status
    100005    1   udp  20048  mountd
    100024    1   tcp  43426  status
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  50902  nlockmgr
    100021    3   udp  50902  nlockmgr
    100021    4   udp  50902  nlockmgr
    100021    1   tcp  38930  nlockmgr
    100021    3   tcp  38930  nlockmgr
    100021    4   tcp  38930  nlockmgr

2、配置防火牆

配置防火牆,開放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個埠,111是rpcbind服務的埠,2049是nfs主服務的埠

3、NFS配置檔案

vim /etc/exports,/etc/exports.d/*.exports   ---注意如果使用副配置檔案要以.exports結尾
/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
*:表示所有遠端客戶端都可以訪問這個共享目錄
選項:
預設選項:(ro,sync,root_squash,no_all_squash)
ro,rw 只讀和讀寫
async非同步,資料變化後不立即寫磁碟,效能高
sync(1.0.0後為預設)同步,資料在請求時立即寫入共享
no_all_squash (預設)保留共享檔案的UID和GID
all_squash 所有遠端使用者(包括root)都變成nfsnobody,有了這一項,no_root_squash 就失效了
root_squash (預設)遠端root對映為nfsnobody,UID為65534,早期版本是4294967294 (nfsnobody)
no_root_squash 遠端root對映成root使用者,也就是不壓榨root,本機的root在遠端共享的資料夾也是管理員。
anonuid和anongid 指明匿名使用者對映為特定使用者UID和組GID,而非nfsnobody,可配合all_squash使用,可以設定成壓榨為apache使用者去訪問共享資源,這樣將來可以用於web服務用的共享nfs
NFS配置示例
在/etc/exports檔案中定義共享的目錄
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.11.10
/myshare 172.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.25.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash

這個檔案中規定了共享的目錄,以及哪些遠端主機可以連線這個共享目錄,並指定許可權等。
nfs服務,當客戶端以root身份去訪問nfs共享時,預設是壓榨(squash)為nfsnobody的身份去訪問共享資源,也就是在伺服器端會看到客戶端上傳的檔案的所有者和所屬組都是nfsnobody,許可權降低了,但以普通使用者身份去訪問nfs共享時,普通使用者在伺服器端被對映成為id相同的使用者,如果伺服器端沒有和客戶端id相同的使用者,則客戶端上傳的檔案不顯示屬主和屬組,只顯示id號。

4、NFS工具

rpcinfo
rpcinfo -p 172.18.21.107 ---檢視nfs服務的埠號,後面加上IP地址可以檢視遠端主機的nfs服務的埠號,不加也可以指的是查詢本機的
rpcinfo –s hostname 檢視RPC註冊程式
exportfs,伺服器端工具
–v 檢視本機所有NFS共享
–r 重讀配置檔案,讓配置檔案生效,不用重啟服務
–a 輸出本機所有共享,也就是下面的選項停止後-a選項可以恢復共享
–au 停止本機所有共享
showmount -e 172.18.21.107 ---客戶端工具,可以檢視遠端主機有哪些目錄被共享
mount.nfs 掛載工具NFSv4支援通過掛載NFS伺服器的共享“根”,從而瀏覽NFS伺服器上的共享目錄列表
mount nfsserver:/ /mnt/nfs

5、客戶端NFS掛載

基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
NFS相關的掛載選項:
fg(預設)前臺掛載,bg後臺掛載
hard(預設)持續請求,soft 非持續請求
intr和hard配合,請求可中斷
rsize和wsize一次讀和寫資料最大位元組數,rsize=32768
_netdev無網路不掛載
示例:

mount -o rw,nosuid,fg,hard,intr 172.18.0.1:/testdir /mnt/nfs/
開機自動掛載
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults 0 0
mount -a  ---修改這個檔案後執行立即自動掛載
指定nfs版本掛載
mount -o vers=3 172.18.0.1:/testdir /mnt/nfs/

6、自動掛載

可使用autofs按需要掛載NFS共享,在空閒時自動解除安裝
由autofs包提供
系統管理器指定由/etc/auto.master自動掛載器守護程式控制的掛載點,自動掛載監視器訪問這些目錄並按要求掛載檔案系統,檔案系統在失活的指定間隔5分鐘後會自動解除安裝,比如神奇的目錄/misc/cd
參看幫助:man 5 autofs
支援含萬用字元的目錄名

示例
* server:/export/&   ---指將後面遠端主機的目錄自動掛載到前面的目錄中,遠端主機共享目錄的basename和本機要掛載的目錄的basename相同
cat /etc/auto.master 
/net    -hosts    ---因為有這一項設定所以在cd /net時會發現自動進入遠端主機共享的目錄,不用掛載。
[root@centos6 app]#showmount -e 172.18.21.107
Export list for 172.18.21.107:
/app/homedir/zhanghome *
[root@centos6 app]#cd /net
[root@centos6 net]#ls
172.18.21.107
[root@centos6 net]#cd 172.18.21.107/
[root@centos6 172.18.21.107]#ls
app
[root@centos6 172.18.21.107]#cd app/
[root@centos6 app]#ls
homedir
發現不用掛載直接就可以進入遠端主機共享的目錄,也就是你在客戶端輸入 cd /net/172.18.21.107即可

7、實現zhang的家目錄nfs共享並自動掛載

目的是實現zhang使用者登入時進入的家目錄不是在本機的磁碟,而是通過nfs共享的一個目錄,步驟如下

在nfs伺服器上的操作
systemctl start nfs-server
rpcinfo -p    ---檢視埠是否開啟
mkdir /app/homedir/zhanghome -pv   ---建立一個目錄做為共享目錄給遠端主機的zhang使用者做為家目錄使用
vim /etc/exports   ---修改配置檔案,並將這個目錄共享出來
/app/homedir/zhanghome   *(rw)
exportfs -r   ---讓配置檔案生效
cd /app/homedir/zhanghome/
touch f1
cp -r /etc/skel/.[^.]* .  ---因為這個目錄要做為家目錄使用,所以要將家目錄模板資料夾中的內容拷貝過來,注意第一個是.第二個是非.,因為如果第二個是點的話可能把上一級目錄也拷貝過來了
setfacl -R -m u:zhang:rwx /app/homedir/zhanghome/  ---授權zhang使用者對這個目錄具有絕對控制許可權,因為授權的是本機的zhang使用者,並沒有授權遠端主機的zhang使用者,nfs服務是通過id判斷身份的,所以要將本機的zhang使用者和遠端主機的zhang使用者的id和gid修改為相同的,這樣授權本機的zhang使用者就相當於授權遠端的zhang使用者了
id zhang  ---檢視一下本機的zhang使用者的uid和gid為1000
在遠端主機客戶端的操作
showmount -e 172.18.21.107  ---檢視一下遠端nfs服務共享的目錄
usermod -u 1000 zhang
groupmod -g 1000 zhang
id zhang   ---修改本機的zhang使用者的uid和gid為1000,這樣本機的zhang使用者才有許可權
mount 172.18.21.107:/app/homedir/zhanghome /home/zhang
su - zhang   --切換到zhang使用者
pwd    ---發現有f1檔案,說明共享成功。
實現自動掛載
在遠端客戶端的操作
rpm -q autofs  ---檢視是否安裝此軟體包
vim /etc/auto.master 
/- /etc/test  ---表示自動掛載的目錄由後面的檔案決定
vim /etc/test   --建立一個配置檔案,指明將後面目錄自動掛載到前面的目錄下
/home/zhang -fstype=nfs,rw,nosuid,nodev 172.18.21.107:/app/homedir/zhanghome
service autofs restart 
[root@centos6 home]#cd /home/zhang  ---就可以像進入/misc/cd 一樣,只要訪問這個目錄就會掛載
[root@centos6 zhang]#df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/sda2             50264772 4891932  42812840  11% /
tmpfs                   502056      76    501980   1% /dev/shm
/dev/sda3             40185208   49060  38088148   1% /app
/dev/sda1               991512   34904    905408   4% /boot
/dev/sr0               6049912 6049912         0 100% /media/CDROM
172.18.21.107:/app/homedir/zhanghome
                      52403200   33024  52370176   1% /home/zhang                                           

8、實現nfs偽根

NFSv4支援通過掛載NFS伺服器的共享“根”,從而瀏覽NFS伺服器上的共享目錄列表

在nfs伺服器上的操作
[root@centos7 app]#mkdir /app/nfsdir1
[root@centos7 app]#mkdir /app/nfsdir2
[root@centos7 app]#mkdir /nfsroot/dir1
[root@centos7 app]#mkdir /nfsroot/dir2
[root@centos7 app]#mount -B /app/nfsdir1 /nfsroot/dir1
[root@centos7 app]#mount -B /app/nfsdir2 /nfsroot/dir2
vim /etc/fstab
/app/nfsdir1 /nfsroot/dir1  none bind 0 0
/app/nfsdir2 /nfsroot/dir2   none bind 0 0
[root@centos7 app]#vim /etc/exports.d/root.exports
/nfsroot *(rw,fsid=0,crossmnt)
/nfsroot/dir1 *(rw)
/nfsroot/dir2 *(ro)
[root@centos7 app]#exportfs -r
[root@centos7 app]#exportfs -v
在遠端客戶端的操作
[root@centos6 172.18.21.107]#showmount -e 172.18.21.107
Export list for 172.18.21.107:
/nfsroot/dir2          *
/nfsroot/dir1          *
/nfsroot               *
/app/homedir/zhanghome *
[root@centos6 172.18.21.107]#mount 172.18.21.107:/ /mnt   ---在客戶端掛載的時候只需要掛載根就可以看到遠端伺服器上的共享目錄
[root@centos6 dir1]#cd /mnt
[root@centos6 mnt]#ls
dir1  dir2

實現偽根的作用是可以把nfs伺服器上所有共享的目錄一次性的掛載到遠端客戶端的一個目錄下,不必每個目錄單獨掛載,只需要掛載根即可。

9、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)

10、SAMBA服務簡介

  • SMB:Server Message Block伺服器訊息塊,IBM釋出,最早是DOS網路檔案共享協議
  • Cifs:common internet file system,微軟基於SMB釋出
  • SAMBA:1991年Andrew Tridgell,實現windows和UNIX相通,也就是windows上的共享可以用linux登入連線,linux上的共享可以用windows登入連線。
  • SAMBA的功能:
    共享檔案和列印,實現線上編輯
    實現登入SAMBA使用者的身份認證
    可以進行NetBIOS名稱解析,NetBIOS名是windows的計算機名,比如你在windows執行下輸入\jack,需要進行解析成ip地址後才能進入此共享,也可以額直接輸入ip地址\172.0.0.1\c
    外圍裝置共享
  • 計算機網路管理模式:
    工作組WORKGROUP:計算機對等關係,帳號資訊各自管理
    域DOMAIN:C/S結構,帳號資訊集中管理,DC,AD
  • 相關包:
    Samba 提供smb服務
    Samba-client 客戶端軟體
    samba-common 通用軟體
    cifs-utils smb客戶端工具
    samba-winbind和AD相關
  • 相關服務程式:
    smbd:提供smb(cifs)服務TCP:139,445
    nmbd:提供NetBIOS名稱解析UDP:137,138,可以將windows的計算機名解析成ip地址,如果不用名字,用ip訪問,可以不啟動這個服務
    主配置檔案:/etc/samba/smb.conf ---來自於samba-common包
    幫助參看:man smb.conf
    語法檢查:testparm[-v] [/etc/samba/smb.conf]
    客戶端工具:smbclient,mount.cifs
    UNC(通用命名規範)路徑:在windows的執行處輸入\127.0.0.1\test
    URL路徑:http://172.18.21.107/test

11、SAMBA伺服器配置

vim /etc/samba/smb.conf
smb.conf繼承了.ini檔案的格式,用[ ] 分成不同的部分
全域性設定:
[global] 伺服器通用或全域性設定的部分
特定共享設定:
[homes] 使用者的家目錄共享
[printers] 定義印表機資源和服務
[sharename] 自定義的共享目錄配置
其中:#和;開頭的語句為註釋,大小寫不敏感
巨集定義:
%m 客戶端主機的NetBIOS名 %M 客戶端主機的FQDN
%H 當前使用者家目錄路徑 %U 當前使用者使用者名稱
%g 當前使用者所屬組 %h samba伺服器的主機名
%L samba伺服器的NetBIOS名 %I 客戶端主機的IP
%T 當前日期和時間 %S 可登入的使用者名稱
workgroup 指定工作組名稱
server string 主機註釋資訊
netbiosname 指定NetBIOS名
nterfaces 指定服務偵聽介面和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 拒絕指定主機訪問
config file = /etc/samba/conf.d/%U 設定成每個使用者有獨立的配置檔案
log file = /var/log/samba/log.%m不同客戶機採用不同日誌
log level = 2 設定日誌的詳細程度,預設是0
max log size = 50 日誌檔案達到50K,將輪循rotate,單位KB
security三種認證方式:
share:匿名(CentOS7不再支援)
user:samba使用者(採有linux使用者,samba的獨立口令)
domain:使用DC(DOMAINCONTROLLER)認證
passdb backend = tdbsam密碼資料庫格式

12、將windows的共享掛載到linux中

在windows中操作
建立一個共享目錄如下圖

6854348-420f3704390bda22.png
QQ截圖20171015213303.png

在windows的命令列輸入以下命令可以看到共享的目錄


6854348-f4a864bc9aa116e7.png
QQ截圖20171015213715.png

在linux中的操作

systemctl start smb
smbclient -L 172.18.254.200 -U zhangdazhi%123456---此工具為客戶端工具,可以檢視windows共享和linuxsamba共享,其中zhangdazhi為windows開機的使用者名稱,123456為開機密碼,172.18.254.200為windows的ip地址
mkdir /mnt/winshare
mount -o username=zhangdazhi,password=123456 //172.18.254.200/testzhang /mnt/winshare   ---掛載windows目錄到linux一個目錄下

13、實現samba使用者

包:samba-common-tools ----在安裝samba包的時候會因依賴關係隨著一起安裝
工具:smbpasswd pdbedit
samba使用者須是Linux使用者,建議使用/sbin/nologin

新增samba使用者
smbpasswd -a <sysuser>  
pdbedit -a -u <sysuser>   ---這兩個命令都可以將系統使用者新增為samba使用者,後面的<sysuser>  為系統使用者
修改samba使用者密碼
smbpasswd <smbuser>   
刪除使用者和密碼:
smbpasswd –x <smbuser>
pdbedit –x –u <smbuser>  --以上兩個命令都可以
檢視samba使用者列表:
/var/lib/samba/private/passdb.tdb
pdbedit –L –v     ---用-L就可以,加上-v顯示的詳細一些,是小寫的v
檢視samba伺服器狀態
smbstatus

示例:建立一個samba使用者,用windows和linux登入

在samba伺服器端操作
[root@centos7 samba]#systemctl start smb
[root@centos7 samba]#useradd -s /sbin/nologin smb1---建立一個系統賬號
[root@centos7 samba]#smbpasswd -a smb1---新增這個系統賬號為samba使用者,並設定密碼
[root@centos7 samba]#pdbedit -L
No builtin backend found, trying to load plugin
Module 'tdbsam' loaded
smb1:1004:   ---可以看到這個使用者
[root@centos7 samba]#cd /var/lib/samba/private/
[root@centos7 private]#ls
msg.sock  passdb.tdb  secrets.tdb
[root@centos7 private]#file passdb.tdb   ---這個使用者名稱和密碼被儲存到這個資料庫檔案中,因為是二進位制的,所以看不了
passdb.tdb: TDB database version 6, little-endian hash size 131 bytes
在另外一臺遠端主機客戶端的操作
[root@centos6 ~]#smbclient -L 172.18.21.107 -U smb1%1   ---可以檢視一下遠端samba伺服器器又哪些共享目錄,smb1為samba的使用者名稱,1為密碼
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.4.4)
    smb1            Disk      Home Directories    ---發現smb1目錄被共享了
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Server               Comment
    ---------            -------
    CENTOS7              Samba 4.4.4

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7
    WORKGROUP            HEBURN-PC
[root@centos6 ~]#smbclient //172.18.21.107/smb1 -U smb1%1  ---可以登入到這個遠端的samba共享,發現和登入到ftp類似,連上傳和下載的命令都一樣
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> pwd
Current directory is \\172.18.21.107\smb1\
smb: \> ls
  .                                   D        0  Sun Oct 15 22:08:43 2017
  ..                                  D        0  Sun Oct 15 21:53:58 2017
  .mozilla                           DH        0  Fri Jul 14 11:16:33 2017
  .bash_logout                        H       18  Wed Aug  3 00:00:07 2016
  .bash_profile                       H      193  Wed Aug  3 00:00:07 2016
  .bashrc                             H      231  Wed Aug  3 00:00:07 2016

        51175 blocks of size 1048576. 35719 blocks available
smb: \> put mbr   ---上傳一個檔案,也可以輸入?,檢視支援的命令
putting file mbr as \mbr (125.0 kb/s) (average 125.0 kb/s)
smb: \> ls
  .                                   D        0  Sun Oct 15 22:08:58 2017
  ..                                  D        0  Sun Oct 15 21:53:58 2017
  .mozilla                           DH        0  Fri Jul 14 11:16:33 2017
  .bash_logout                        H       18  Wed Aug  3 00:00:07 2016
  .bash_profile                       H      193  Wed Aug  3 00:00:07 2016
  .bashrc                             H      231  Wed Aug  3 00:00:07 2016
  mbr                                 A      512  Sun Oct 15 22:08:58 2017

        51175 blocks of size 1048576. 35719 blocks available
smb: \> quit

總結:ftp不屬於檔案系統,nfs和samba服務都會提供檔案系統,nfs服務為nfs檔案系統,samba服務為cifs檔案系統,都可以掛載,使用起來比較方便,ftp不可以掛載,samba服務預設是把家目錄共享的,建立一個samba使用者後登陸上去,在客戶端用smbclient命令會看到和使用者名稱同名的家目錄共享出來了。

14、配置目錄共享

每個共享目錄應該有獨立的[ ]部分
[共享名稱] 遠端網路看到的共享名稱,不是資料夾名稱。
comment 註釋資訊
path 所共享的目錄路徑
public 匿名使用者能否訪問共享,預設no
browsable是否允許所有使用者瀏覽此共享,預設為yes,no為隱藏,改為no後可以設定隱藏共享,客戶端用smbclient命令時看不到的。
writable=yes 可以被所有使用者讀寫,預設為no
read only=no 和writable=yes等價,如與以上設定衝突,放在後面的設定生效,預設只讀
write list 三種形式:使用者,@組名,+組名,用,分隔
如writable=no,列表中使用者或組可讀寫,不在列表中使用者只讀
valid users 特定使用者才能訪問該共享,如為空,將允許所有使用者,使用者名稱之間用空格分隔
示例

伺服器端操作
[root@centos7 etc]#mkdir /app/smbshare   ---建立一個共享目錄
[root@centos7 etc]#cd /app/smbshare/
[root@centos7 smbshare]#touch f1
[root@centos7 smbshare]#vim /etc/samba/smb.conf
[share]   ---共享目錄名
        comment = testshare   ---註釋資訊
        path = /app/smbshare   ---共享目錄的路徑
        create mask = 0644  ----表示使用者在客戶端登入後上傳檔案的許可權是0644
        writable = no    ----不可以寫
        write list = @smbusers   ---只有在這個組裡的使用者才可以寫
[root@centos7 share2]#testparm ---用來檢查主配置檔案的語法
[root@centos7 smbshare]#chomod 777 /app/smbshare/  ---設定目錄檔案系統的許可權
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb1
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb2
[root@centos7 smbshare]#useradd -s /sbib/nologin/ smb3
[root@centos7 smbshare]#smbpasswd -a smb1
[root@centos7 smbshare]#smbpasswd -a smb2
[root@centos7 smbshare]#smbpasswd -a smb3
[root@centos7 smbshare]#pdbedit -L   ---建立三個samba使用者
smb1:1004:
smb3:1006:
smb2:1005:
[root@centos7 smbshare]#groupadd smbusers  ---建立組
[root@centos7 smbshare]#gpasswd -a smb1smbusers
Adding user smb1 to group smbusers
[root@centos7 smbshare]#groupmems -a smb2 -g smbusers
[root@centos7 smbshare]#groupmems -l -g smbusers  ---將使用者加到組裡
smb1  smb2 
客戶端操作
[root@centos6 ~]#smbclient -L 172.18.21.107    ---檢視一下有哪些共享
[root@centos6 ~]#smbclient //172.18.21.107/share -U smb1%123   ---登入到這個共享,可以上傳檔案,注意這裡是UNC路徑
[root@centos6 ~]#smbclient //172.18.21.107/share -U smb3%123   ---smb3不可以上傳,因為不在組裡

centos7中在主配置檔案中修改配置不需要重啟服務也可以生效。

15、實現客戶端不同的samba使用者登入時訪問的共享目錄不同,但共享目錄的名字是相同的

建立好samba使用者smb2和smb3
vim /etc/samba/smb.conf
[global]
config file = /etc/samba/conf.d/%U   ---設定成每個使用者有單獨配置檔案,%U表示檔名為samba使用者名稱
mkdir /etc/samba/conf.d
cd /etc/samba/conf.d
vim smb2
[share]
path=/app/share2/
comment=testshare2
vim smb3
[share]
path=/app/share3/
comment=testshare3
mkdir /app/share2
mkdir /app/share3
touch /app/share2/f2
touch /app/share3/f3
[root@centos6 ~]#smbclient -L 172.18.21.107 ---在客戶端是看不到共享的,只有登入後才可以看到
Enter root's password: 
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.4.4)
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------
[root@centos6 ~]#smbclient //172.18.21.107/share/ -U smb3%123
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> ls
  .                                   D        0  Tue Oct 17 20:47:01 2017
  ..                                  D        0  Tue Oct 17 20:47:39 2017
  f3                                           0  Tue Oct 17 20:47:01 2017

        51175 blocks of size 1048576. 51142 blocks available
smb: \> quit
在客戶端訪問共享發現每個smb2和smb3訪問的目錄不同

16、掛載CIFS檔案系統

smbclient -L 172.18.21.107 ---掛載之前先看一下有哪些共享
掛載的時候需要安裝mount.cifs工具,來自cifs-utils包
mount -t cifs -o username=smb1,password=123 //172.18.21.107/share /mnt
開機自動掛載
vim /etc/fstab 
//172.18.21.107/share   /mnt   cifs    credentials=/etc/smb.txt 0 0
vim /etc/smb.txt  ---建立一個這樣的檔案避免賬號和密碼洩露
username=smb1
password=123
chomd 600 /etc/smb.txt 
mount -a 
[root@centos6 ~]#cd /mnt
[root@centos6 mnt]#ll
total 4
-rw-r--r-- 1 root root   0 Oct 17  2017 f2
-rwxr--r-- 1 1005 1005 512 Oct 17  2017 mbr
在伺服器端
[root@centos7 share2]#ll /app/share2
total 4
-rw-r--r-- 1 root root   0 Oct 17 20:46 f2
-rwxr--r-- 1 smb2 smb2 512 Oct 17 20:49 mbr
可以看到samba服務和nfs服務一樣,也是通過id號識別身份的

17、CentOS7中實現多使用者掛載

SAMBA共享預設只支援同時用一個samba使用者掛載SMB共享,並且預設情況下以哪個samba使用者掛載,訪問共享的許可權由samba使用者的許可權決定,不論登入的是哪個系統賬號,許可權都由samba使用者許可權決定的,CentOS7中可啟用多使用者掛載功能,客戶端掛載samba共享目錄後,在客戶端登入的不同系統使用者訪問同一個samba的掛載點,可獲得不同許可權

一、samba伺服器配置
yum install samba
systemctl start smb
systemctl enable smb
vim /etc/samba/smb.conf
[share]
        path = /app/share2
        comment = testshare2
        write list = smb1
        writable = no
此配置只有smb1可以寫,其他使用者都是隻讀的許可權
在伺服器端建立samba使用者smb1,smb2,smb3
二、客戶端配置
yum install cifs-utils samba-client
smbclient -L 172.18.21.107
echo "smb1 smb2 smb3"|xargs -n1 useradd  ---建立三個系統賬號和samba賬號同名
vim /etc/fstab 
//172.18.21.107/share   /mnt/ cifs credentials=/etc/smb.txt,multuser 0 0
vim /etc/smb.txt   ---表示自動掛載的時候以smb3的身份掛載
username=smb3
password=123
chmod 600 /etc/smb.txt
mount -a   ---以smb3身份掛載後應該對這個共享目錄只有讀許可權
[root@redhat7 ~]#cd /mnt
[root@redhat7 mnt]#ls
f1  f2  f3  f4  f6  ff  mbr
[root@redhat7 mnt]#touch f7  ---發現root使用者只能讀,和samba使用者smb3相同,因為就是以smb3的身份掛載的
touch: cannot touch ‘f7’: Permission denied
[root@redhat7 mnt]#su - smb1  
Last login: Tue Oct 17 22:29:44 CST 2017 on pts/0
[smb1@redhat7 ~]$cd /mnt
[smb1@redhat7 mnt]$ls   ---切換到smb1這個系統使用者後連看的許可權都沒有了
ls: reading directory .: Permission denied
[smb1@redhat7 mnt]$cifscreds add 172.18.21.107   ---執行這個命令會把系統賬號新增為samba賬號smb1
Password: 
[smb1@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  mbr
[smb1@redhat7 mnt]$touch fff  ---因為伺服器端設定的是samba賬號smb1有寫許可權,所以可以寫
[smb1@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  fff  mbr
[smb1@redhat7 mnt]$exit
logout
[root@redhat7 mnt]#su - smb2   ---切換為smb2這個系統賬號
Last login: Tue Oct 17 22:26:34 CST 2017 on pts/0
[smb2@redhat7 ~]$cifscreds add 172.18.21.107  ---新增系統使用者smb2為samba使用者smb2
Password: 
[smb2@redhat7 ~]$cd /mnt
[smb2@redhat7 mnt]$ls
f1  f2  f3  f4  f6  ff  fff  mbr
[smb2@redhat7 mnt]$touch ffff  ---因samba使用者smb2對這個目錄只有讀許可權,所以只能讀,不能寫
touch: cannot touch ‘ffff’: Permission denied

通過上面的設定可以實現不同的系統使用者對於samba共享目錄具有不同的許可權,而不是受掛載的samba使用者的許可權的影響。

18、samba的相關SELinux配置

SMB共享目錄應設為samba_share_t安全上下文
semanage fcontext -a -t samba_share_t  '/sharedpath(/.*)?'
restorecon -vvFR /sharedpath
SMB共享目錄安全上下文也可設public_content_t(只讀)和public_content_rw_t(讀寫).
要支援讀寫,SElinux布林值smbd_anon_write必須啟用
如用SMB網路共享samba伺服器上的使用者家目錄,需在samba伺服器上啟用布林值samba_enable_home_dirs
如需掛載遠端SMB目錄做為本地使用者家目錄,需在SMB客戶機上啟用布林值use_samba_home_dirs

19、實驗:實現圖形化管理

一、在CentOS6(第二張光碟)上安裝包
yum install samba-swat samba
service samba start
二、配置swat服務
vim /etc/xinetd.d/swat
disable = no
only_from= 172.18.0.0/16  ---表示允許這個網段訪問
service xinetdre start
三、瀏覽器訪問管理
http://172.18.21.106:901 以root使用者和密碼登入即可
這個功能只有在centos6中才有,centos7中已經取消此

相關文章