Linux-samba服務配置

来源:https://www.cnblogs.com/yanjieli/archive/2018/11/15/9963639.html
-Advertisement-
Play Games

samba 服務 簡介 1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器消息塊)協議,旨在解決區域網內的文件或印表機等資源的共用問題,這也使得在多個主機之間共用文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為瞭解決Linux ...


samba 服務 簡介

1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器消息塊)協議,旨在解決區域網內的文件或印表機等資源的共用問題,這也使得在多個主機之間共用文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為瞭解決Linux系統與Windows系統之間的文件共用問題,基於SMB協議開發出了SMBServer服務程式。這是一款開源的文件共用軟體,經過簡單配置就能夠實現Linux系統與Windows系統之間的文件共用工作。當時,Tridgwell想把這款軟體的名字SMBServer註冊成為商標,但卻被商標局以SMB是沒有意義的字元而拒絕了申請。後來Tridgwell不斷翻看詞典,突然看到一個拉丁舞蹈的名字—Samba,而且這個熱情洋溢的舞蹈名字中又恰好包含了“SMB”,於是Samba服務程式的名字由此誕生(見圖12-1)。Samba服務程式現在已經成為在Linux系統與Windows系統之間共用文件的最佳選擇。

smb(samba):用於linux和windows之間的文件共用,可以實現匿名用戶和本地用戶之間的文件共用

工作原理:

  • smb進程 控制發佈共用目錄與許可權    tcp  139  445
  • nmb進程 主要用於名稱解析              udp  137  138

軟體包及配置文件瞭解

  • 軟體包
    [root@centos7-1 ~]# rpm -aq |grep samba     //6系統上查看
    samba-winbind-clients-3.6.9-164.el6.x86_64        客戶端工具
    samba-3.6.9-164.el6.x86_64                        服務端
    samba-client-3.6.9-164.el6.x86_64                 客戶端工具
    samba4-libs-4.0.0-58.el6.rc4.x86_64               庫文件
    samba-common-3.6.9-164.el6.x86_64                 工具包
    samba-winbind-3.6.9-164.el6.x86_64                客戶端工具
    
  • 配置文件
    [root@courtoap ~]# rpm -ql samba |grep etc    // 6系統
    /etc/logrotate.d/samba        日誌輪轉文件
    /etc/pam.d/samba              驗證機制
    /etc/rc.d/init.d/nmb          啟動腳本
    /etc/rc.d/init.d/smb
    /etc/samba/smbusers           用戶別名文件
    
    [root@centos7-1 ~]# rpm -ql samba |grep etc    // 7系統
    /etc/openldap/schema
    /etc/openldap/schema/samba.schema
    /etc/pam.d/samba
  • 二進位命令
    /usr/sbin/nmbd
    /usr/sbin/smbd
    [root@centos7-1 ~]# rpm -ql samba-common
    /etc/samba                   主目錄
    /etc/samba/smb.conf          主配置文件
    /usr/bin/pdbedit             查看smb資料庫用戶
    /usr/bin/smbpasswd           設置用戶密碼
    /usr/bin/testparm            檢測語法
  • 瞭解主配置文件
    [root@centos7-1 ~]# cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z]
    [global]
        workgroup = SAMBA
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
    [homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes
    [printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No
    [print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775
    cat /etc/samba/smb.conf |grep -v ^#|grep -v '^;'|grep [a-z]

Samba服務程式中的參數以及作用

[global]   #全局參數。
  workgroup = MYGROUP #工作組名稱
  server string = Samba Server Version %v #伺服器介紹信息,參數%v為顯示SMB版本號
  log file = /var/log/samba/log.%m #定義日誌文件的存放位置與名稱,參數%m為來訪的主機名
  max log size = 50 #定義日誌文件的最大容量為50KB
  security = user #安全驗證的方式,總共有4種
  #share:來訪主機無需驗證口令;比較方便,但安全性很差
  #user:需驗證來訪主機提供的口令後才可以訪問;提升了安全性
  #server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理賬戶)
  #domain:使用域控制器進行身份驗證
  passdb backend = tdbsam #定義用戶後臺的類型,共有3種
  #smbpasswd:使用smbpasswd命令為系統用戶設置Samba服務程式的密碼
  #tdbsam:創建資料庫文件並使用pdbedit命令建立Samba服務程式的用戶
  #ldapsam:基於LDAP服務進行賬戶驗證
  load printers = yes #設置在Samba服務啟動時是否共用印表機設備
  cups options = raw #印表機的選項
[homes]   #共用參數
  comment = Home Directories #描述信息
  browseable = no #指定共用信息是否在“網上鄰居”中可見
  writable = yes #定義是否可以執行寫入操作,與“read only”相反
[printers]   #印表機共用參數
  comment = All Printers  
  path = /var/spool/samba #共用文件的實際路徑(重要)。
  browseable = no  
  guest ok = no     等於 public = no #是否所有人可見,等同於"public"參數。
  writable = no       等於 read only = yes  
  printable = yes

搭建SMB服務

測試預設情況下的共用文件,也就是安裝完軟體直接啟動。不做任何配置文件的修改

服務端:192.168.122.205

[root@centos7-1 ~]# yum install samba
[root@centos7-1 ~]# systemctl start smb
# 6的啟動命令
service smb restart       service nmb restart 

客戶端測試查看服務端共用了哪些文件

客戶端:192.168.122.206

[root@centos7-2 ~]# smbclient -L 192.168.122.205
Enter root's password:       //此處不輸密碼,直接回車
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

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

    Server               Comment
    ---------            -------
    CENTOS7-1            Samba 4.7.1

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7-1

服務端:192.168.122.205

創建一個本地用戶
[root@centos7-1 ~]# useradd smb1

將用戶添加到資料庫並且設置密碼  (server端設置)
[root@centos7-1 ~]# smbpasswd -a smb1     
New SMB password:
Retype new SMB password:
Added user smb1.
查看smb資料庫的用戶(查看是否成功添加)

[root@centos7-1 ~]# pdbedit -L smb1
smb1:1001:

客戶端:192.168.122.206

查看共用的目錄
[root@centos7-2 ~]# smbclient -L 192.168.122.205 -U smb1
Enter smb1's password: 
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.7.1)
    smb1            Disk      Home Directories
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Server               Comment
    ---------            -------
    CENTOS7-1            Samba 4.7.1

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7-1

通過smb1用戶登錄
[root@centos7-2 ~]# smbclient //192.168.122.205/smb1 -U smb1
Enter smb1's password: 
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
smb: \> ls 
  .                                   D        0  Thu Nov 15 10:30:04 2018
  ..                                  D        0  Thu Nov 15 10:30:04 2018
  .mozilla                           DH        0  Mon Oct 29 12:26:18 2018
  .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

        9447424 blocks of size 1024. 5601668 blocks availabl

實例一

共用本地目錄/samba/share, 並且只允許harry用戶可寫,sysadmin組的成員只讀

服務端:

第1步:創建共用目錄

[root@centos7-1 ~]# mkdir /samba/share -p
[root@centos7-1 ~]# echo hello world > /samba/share/t.txt
[root@centos7-1 ~]# ls /samba/share/

第2步:創建用戶和組方便後面測試

[root@centos7-1 ~]# useradd harry
[root@centos7-1 ~]# groupadd sysadmin
[root@centos7-1 ~]# useradd -G sysadmin u1
[root@centos7-1 ~]# useradd -G sysadmin u2

第3步:將創建的用戶添加到smb服務的資料庫並設置密碼

[root@centos7-1 ~]# smbpasswd -a harry
New SMB password:
Retype new SMB password:
Added user harry.
[root@centos7-1 ~]# smbpasswd -a u1
New SMB password:
Retype new SMB password:
Added user u1.
[root@centos7-1 ~]# smbpasswd -a u2
New SMB password:
Retype new SMB password:
Added user u2.
[root@centos7-1 ~]# pdbedit -L 
smb1:1001:
u1:1004:
harry:1003:
u2:1005:

第4步:編輯配置文件進行相應的配置並重啟服務

[root@centos7-1 ~]# vim /etc/samba/smb.conf
[share]
        comment = samba share       // 描述
        path = /samba/share              // 共用的目錄
        browseable = yes                 // 不隱藏標簽
        valid users = harry,@sysadmin    // 可讀用戶
        write list = harry               // 可寫用戶

[root@centos7-1 ~]# systemctl restart smb

客戶端測試:

查看共用目錄,可以查看到共用的share目錄

[root@centos7-2 ~]# smbclient -L 192.168.122.205
Enter root's password: 
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Sharename       Type      Comment
    ---------       ----      -------
    homes           Disk      Home Directories
    print$          Disk      Printer Drivers
    share           Disk      samba share
    IPC$            IPC       IPC Service (Samba 4.7.1)
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Server               Comment
    ---------            -------
    CENTOS7-1            Samba 4.7.1

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7-1    

測試harry用戶可讀可寫

[root@centos7-2 ~]# smbclient //192.168.122.205/share -U harry
Enter harry's password: 
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
smb: \> ls 
  .                                   D        0  Thu Nov 15 11:21:44 2018
  ..                                  D        0  Thu Nov 15 11:21:20 2018
  t.txt                               N       12  Thu Nov 15 11:21:44 2018

        9447424 blocks of size 1024. 5608576 blocks available
smb: \> mkdir 1
NT_STATUS_ACCESS_DENIED making remote directory \1
smb: \> 

測試發現harry用戶能夠成功訪問,但是創建文件卻失敗了(原因分析:服務本身已經給定了harry用戶寫的許可權,那麼就應該是目錄沒有寫的許可權)
解決辦法:
服務端給予harry用戶讀寫執行的許可權

[root@centos7-1 ~]# setfacl -m u:harry:rwx /samba/share/

客戶端再次測試:

smb: \> mkdir 1
smb: \> ls 
  .                                   D        0  Thu Nov 15 11:32:35 2018
  ..                                  D        0  Thu Nov 15 11:21:20 2018
  t.txt                               N       12  Thu Nov 15 11:21:44 2018
  1                                   D        0  Thu Nov 15 11:32:35 2018

        9447424 blocks of size 1024. 5609416 blocks available
smb: \> get t.txt 
getting file \t.txt of size 12 as t.txt (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
smb: \> 
發現harr用戶可以創建文件,和下載文件

測試u1用戶

[root@centos7-2 ~]# smbclient //192.168.122.205/share -U u1
Enter u1's password: 
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]
smb: \> ls 
  .                                   D        0  Thu Nov 15 11:32:35 2018
  ..                                  D        0  Thu Nov 15 11:21:20 2018
  t.txt                               N       12  Thu Nov 15 11:21:44 2018
  1                                   D        0  Thu Nov 15 11:32:35 2018

        9447424 blocks of size 1024. 5609216 blocks available
smb: \> mkdir aaa
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \aaa

測試發現u1用戶能夠成功訪問並且能夠查看,但是創建文件卻失敗了。(原因:配置文件中我們只是允許了harry用戶能夠進行寫,而sysadmin組裡面的成員並沒有給寫的許可權。所以並不能創建文件)

註意:如果不加可用用戶選項,那麼表示當前samba資料庫裡面的用戶都可以訪問

實例二

基於用戶名密碼和acl的綜合訪問:

需求:

公司:uplooking
1、財務部門 /samba/upl_cw  cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權。
2、市場部門 /samba/upl_sc  市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權。
3、HR部門   /samba/upl_rs  rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以查詢
4、休息區   /samba/upl_pub  自己管理自己的文件
思路:
1、選擇哪個服務做文件共用(samba)
2、需要一臺Linux伺服器(rhel/centos)
3、根據部門創建不同的工作目錄來保存不同部門的文件
4、將目錄發佈出去
5、測試驗證

伺服器:

第1步:在伺服器上創建相應的工作目錄

[root@centos7-1 ~]# mkdir /samba/upl_{cw,sc,rs,pub} -p

第2步:創建相應的用戶和組

[root@centos7-1 ~]# groupadd uplooking
[root@centos7-1 ~]# groupadd cw
[root@centos7-1 ~]# groupadd rs
[root@centos7-1 ~]# groupadd sc
[root@centos7-1 ~]# useradd cw01 -g cw -G uplooking
[root@centos7-1 ~]# useradd cw02 -g cw -G uplooking
[root@centos7-1 ~]# useradd rs01 -g rs -G uplooking
[root@centos7-1 ~]# useradd rs02 -g rs -G uplooking
[root@centos7-1 ~]# useradd sc01 -g sc -G uplooking
[root@centos7-1 ~]# useradd sc02 -g sc -G uplooking
[root@centos7-1 ~]# useradd boss01 -g uplooking -G cw
[root@centos7-1 ~]# useradd boss02 -g uplooking -G sc
[root@centos7-1 ~]# useradd vip

第3步:編輯配置文件進行相應的配置並重啟服務

[root@centos7-1 ~]# vim /etc/samba/smb.conf
[cw_share]
        comment= cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權
        path = /samba/upl_cw
        valid users = @cw,boss01,@rs
        write list = cw01,boss01
[sc_share]
        comment= 市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權
        path = /samba/upl_sc
        valid users = @uplooking
        read only = yes
        write list = @sc,boss02
[hr_share]
        comment = rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以讀寫
        path = /samba/upl_rs
        valid users = @rs,vip
        write list = rs01,vip
[pub]
        comment = 自己管理自己的文件
        path = /samba/upl_pub
        public = yes
        writable = yes
        hosts allow = 192.168.122.0/24

[root@centos7-1 ~]# systemctl restart smb

第4步:將用戶加入到samba資料庫里

[root@centos7-1 ~]# smbpasswd -a cw01
New SMB password:
Retype new SMB password:
Added user cw01.
[root@centos7-1 ~]# smbpasswd -a cw02
New SMB password:
Retype new SMB password:
Added user cw02.
[root@centos7-1 ~]# smbpasswd -a rs01
New SMB password:
Retype new SMB password:
Added user rs01.
[root@centos7-1 ~]# smbpasswd -a rs02
New SMB password:
Retype new SMB password:
Added user rs02.
[root@centos7-1 ~]# smbpasswd -a sc01
New SMB password:
Retype new SMB password:
Added user sc01.
[root@centos7-1 ~]# smbpasswd -a sc02
New SMB password:
Retype new SMB password:
Added user sc02.
[root@centos7-1 ~]# smbpasswd -a boss01
New SMB password:
Retype new SMB password:
Added user boss01.
[root@centos7-1 ~]# smbpasswd -a boss02
New SMB password:
Retype new SMB password:
Added user boss02.
[root@centos7-1 ~]# smbpasswd -a vip
New SMB password:
Retype new SMB password:
Added user vip.
[root@centos7-1 ~]# pdbedit -L
smb1:1001:
u1:1004:
cw01:1006:
harry:1003:
u2:1005:
cw02:1007:
rs01:1008:
rs02:1009:
sc01:1010:
sc02:1011:
boss01:1012:
boss02:1013:
vip:1014:

第5步:相應的acl授權

[root@centos7-1 ~]# setfacl -m u:cw01:rwx /samba/upl_cw/
[root@centos7-1 ~]# setfacl -m u:boss01:rwx /samba/upl_cw/
[root@centos7-1 ~]# setfacl -m g:cw:rx /samba/upl_cw/
[root@centos7-1 ~]# setfacl -m g:sc:rwx /samba/upl_sc/
[root@centos7-1 ~]# setfacl -m g:uplooking:rx /samba/upl_sc/
[root@centos7-1 ~]# setfacl -m u:boss02:rwx /samba/upl_sc/
[root@centos7-1 ~]# setfacl -m u:rs01:rwx /samba/upl_rs/
[root@centos7-1 ~]# setfacl -m g:rs:rx /samba/upl_rs/
[root@centos7-1 ~]# setfacl -m u:vip:rwx /samba/upl_rs/
[root@centos7-1 ~]# setfacl -m g:uplooking:rwx /samba/upl_pub/

客戶端測試驗證:

查看共用目錄

[root@centos7-2 ~]# smbclient -L 192.168.122.205
Enter root's password: 
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Sharename       Type      Comment
    ---------       ----      -------
    homes           Disk      Home Directories
    print$          Disk      Printer Drivers
    share           Disk      samba share
    cw_share        Disk      cw01財務總監有可讀可寫許可權,財務部門員工可讀,boss01對其有管理許可權
    sc_share        Disk      市場部門員工可讀可寫,公司員工可以查詢資料,boss02對其有管理許可權
    hr_share        Disk      rs01HR總監可讀寫,HR部門員工可以對財務部查詢,vip用戶可以讀寫
    pub             Disk      自己管理自己的文件
    IPC$            IPC       IPC Service (Samba 4.7.1)
Anonymous login successful
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.7.1]

    Server               Comment
    ---------            -------
    CENTOS7-1            Samba 4.7.1

    Workgroup            Master
    ---------            -------
    SAMBA                CENTOS7-1

詳細測試此處就省略了。。。

samba總結

  • SAMBA 可以讓 Linux 與 Windows 直接進行文件系統的使用;
  • SAMBA 主要架構在 NetBIOS 上發展的,且以 NetBIOS over TCP/IP 剋服NetBIOS 無法跨路由的問題;
  • Samba 使用的 daemon 主要有管理分享許可權的 smbd 以及 NetBIOS 解析的nmbd
  • Samba 使用的模式主要有單機的 workgroup 方式,以及網域控管的 PDC 模式;
  • Samba 的主配置文件之檔名為 smb.conf
  • smb.conf 內,主要區分為 [global] 伺服器整體設定與 [share] 分享的資源兩大部分
  • Samba 使用者賬號控管主要的設定值為 security = {share,user,domain}等
  • Samba 客戶端可使用 smbclient 以及 mount.cifs 進行網路的掛載
  • 新版的 Samba 預設使用資料庫記錄帳戶信息,新增賬號用 pdbedit ,修改密碼則用 smbpasswd
  • Samba 主要支持 CUPS 的印表機伺服器
  • 在許可權控管方面,最容易出錯的為 SELinux 的規則與類型 (SELinux type)
  • 預設情況下,服務端會將系統中的所有本地用戶的家目錄共用出去;並且不允許匿名用戶訪問
  • 本地用戶都可以通過用戶名和smab資料庫的密碼去訪問當前用戶的家目錄
  • samba資料庫裡面的用戶必須是當前操作系統中存在的用戶

配置文件:一般放在/etc/samba/smb.conf裡面,可以通過rpm -qc packagename查詢;編輯完配置文件可以通過testparm來進行samba的確認。

常用命令

將本地用戶加入到smb資料庫里

# smbpasswd -a stu1   // 將用戶添加到資料庫並且設置密碼

查看smb資料庫的用戶

# pdbedit -L    //查看smb資料庫的用戶 

查看共用目錄:客戶端通過smbclient命令查看伺服器共用出什麼目錄

smbclient -L NetBiosName -U username 

linux客戶端訪問

# smbclient //192.168.122.205/homes -U smb1    // 通過smb1用戶訪問homes

清空windows緩存

cmd——>net use * /del  

訪問許可權控制

控制讀寫訪問

writable = yes/no        // 可寫總開關
read only = yes/no       // 可讀總開關
write list = tom,@admin  // 可讀 多個用戶用逗號隔開  加個@符號對組的控制
read list = tom,@admin   // 可寫

對象的訪問控制

valid users = tom,@admin   // 指定可用用戶
invalid users = tom,@admin // 指定不可用用戶 
註意:兩個參數不要同時存在

網路訪問控制

hosts allow = 150.203.6.0/255.255.255.0 EXCEPT 150.203.6.66      // 允許哪個網路里的訪問,表示150.203.6.0這個網段除了150.203.6.66這個用戶不能訪問,別的都能訪問
hosts allow = 150.203.15.0/255.255.255.0          
hosts allow = *.uplooking.com
hosts deny = 192.168.1.3 vm01.example.com       // 拒絕哪個網路的訪問 
如果deny和allow衝突,allow優先