如何在Linux下部署Samba服務?


    

Samba簡介

  • Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。
  • Samba最大的功能就是可以用於Linux與windows系統直接的文件共享和打印共享,Samba既可以用於windows與Linux之間的文件共享,也可以用於Linux與Linux之間的資源共享。
  • Samba由兩個主要程序組成,它們是smbd和nmbd。這兩個守護進程在服務器啟動到停止期間持續運行,功能各異。Smbd和nmbd使用的全部配置信息全都保存在smb.conf文件中。Smb.conf向smbd和nmbd兩個守護進程說明輸出什么以便共享,共享輸出給誰及如何進行輸出。
    • nmbd :這個 daemon 是用來管理工作組啦、NetBIOS name 啦等等的解析。主要利用 UDP 協議開啟 port 137, 138 來負責名稱解析的任務;
    • smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享的目錄、檔案與打印機等等。 主要利用可靠的 TCP 協議來傳輸數據,開放的端口為 139 及 445(不一定存在) 。
  • Samba提供了基於CIFS的四個服務:文件和打印服務、授權與被授權、名稱解析、瀏覽服務。前兩項服務由smbd提供,后兩項服務則由nmbd提供。 簡單地說,smbd進程的作用是處理到來的SMB軟件包,為使用該軟件包的資源與Linux進行協商,nmbd進程使主機(或工作站)能瀏覽Linux服務器。

在本教程中,將展示如何在CentOS 7上安裝Samba並將其配置為獨立服務器,以通過網絡在不同操作系統之間提供文件共享。

環境准備

屬性 Samba服務端 Samba客戶端
節點 wencheng-smb windows10
系統 CentOS Linux release 7.5.1804 (Minimal) windows10 企業版
內核 3.10.0-862.el7.x86_64 windows10 企業版2019 x64
IP地址 172.16.70.185 172.16.70.50
SELinux setenforce 0 | disabled  

Samba按照步驟如下。

檢查安裝Samba

[root@wencheng-smb ~]  # rpm -qa | grep samba
[root@wencheng-smb ~]  # yum install -y samba
[root@wencheng-smb ~]  # smbd -V
Version 4.10.16

 設置防火牆允許Samba策略

[root@wencheng-smb ~]  # firewall-cmd --add-service samba --permanent
[root@wencheng-smb ~]  # firewall-cmd --zone=public --add-port=137/udp --permanent
[root@wencheng-smb ~]  # firewall-cmd --zone=public --add-port=138/udpp --permanent
[root@wencheng-smb ~]  # firewall-cmd --zone=public --add-port=139/tcp --permanent
[root@wencheng-smb ~]  # firewall-cmd --zone=public --add-port=445/tcp --permanent
[root@wencheng-smb ~]  # firewall-cmd --reload
[root@wencheng-smb ~]  # firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services:   ssh dhcpv6-client samba
  ports: 139  /tcp 137  /tcp 138  /tcp 445  /tcp
  protocols:
  masquerade: no
  forward-ports:
  source -ports:
  icmp-blocks:
  rich rules:

 情景一:配置匿名訪問, 任何人都可以訪問的共享目錄(允許上傳、刪除、修改文件)。

[root@wencheng-smb ~]  # mv /etc/samba/smb.conf /etc/samba/smb.conf_bak
[root@wencheng-smb ~]  # vim /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
        workgroup = SAMBA      # 設定Samba Server所要加入的工作組或者域
        security = user       # 安全性等級share
  • 創建共享文件夾,並設置權限。
[root@wencheng-smb ~]  # mkdir -p /data/samba/shares/public
[root@wencheng-smb ~]  # mkdir /data/samba/shares/public/public{1..3}
[root@wencheng-smb ~]  # touch /data/samba/shares/public/public{4..6}
[root@wencheng-smb ~]  # ls /data/samba/shares/public/
public1  public2  public3  public4  public5  public6

[root@wencheng-smb ~]  # chown nobody.nobody /data/samba/shares/public/
[root@wencheng-smb ~]  # ls -ld /data/samba/shares/public/
drwxr-xr-x. 5 nobody nobody 96 May 25 16:07   /data/samba/shares/public/
  • 啟動Samba服務。
[root@wencheng-smb ~]  # systemctl start smb.service nmb.service
[root@wencheng-smb ~]  # systemctl enable smb.service nmb.service

[root@wencheng-smb ~]  # netstat -nutpl | grep -E 'smbd|nmbd'
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      130587  /smbd
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      130587  /smbd
tcp6       0      0 :::445                  :::*                    LISTEN      130587  /smbd
tcp6       0      0 :::139                  :::*                    LISTEN      130587  /smbd
udp        0      0 172.16.70.255:137       0.0.0.0:*                           130591  /nmbd
udp        0      0 172.16.70.185:137       0.0.0.0:*                           130591  /nmbd
udp        0      0 0.0.0.0:137             0.0.0.0:*                           130591  /nmbd
udp        0      0 172.16.70.255:138       0.0.0.0:*                           130591  /nmbd
udp        0      0 172.16.70.185:138       0.0.0.0:*                           130591  /nmbd
udp        0      0 0.0.0.0:138             0.0.0.0:*                           130591  /nmbd

Win10客戶端測試連接。

  • Win + R 組合鍵,調出運行窗口 。

    

  •  輸入Samba服務器IP。

    

  •  再次按 Win + R 組合鍵,調出運行窗口,並輸入:gpedit.msc 命令,確定或回車,可以快速打開本地組策略編輯器。

    

  • 本地組策略編輯器窗口中,依次展開到:計算機配置 - 管理模板 - 網絡 - Lanman 工作站,找到並雙擊打開“啟用不安全的來賓登錄”選項,並啟用。

    

  •  再次訪問Samba服務器IP。

    

    

  •  可執行寫入,刪除操作。

    

 

情景二:配置用戶可以訪問多個部門的共享目錄。

[root@wencheng-smb samba] # cat smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
    workgroup = SAMBA
    server string = WenCheng Samba Server Version % v
    netbios name = WenChengSamba
    security = user
    log  file =  /var/log/samba/log .%m
    max log size = 50
    map to guest = Bad User
    display charset = UTF8

[public]
    comment = Public Directories
    path =  /data/samba/shares/public
    public =  yes
    writeable = no     # 關閉匿名用戶寫權限
    create mask = 0644
    directory mask = 0755
     write list = samba    # 只允許samba管理員用戶寫

[devops]
        comment = Devops Directories
        path =  /data/samba/shares/devops
        public = no
    writable =  yes
        create mask = 0640
        directory mask = 0750
    admin  users = devops
        valid  users = @devops,samba
        write list = @devops,samba

[market]
        comment = Market Directories
        path =  /data/samba/shares/market
        public = no
    writable =  yes
        create  make = 0640
        directory mask = 0750
    admin  users = market
        valid  users = @market,samba
    write list = @market,samba

共享目錄說明:
  public :所有匿名用戶只可讀,samba管理員用戶可讀可寫
  devops : 只允許@devops,@samba組用戶可讀可寫
  market : 只允許@devops,@samba組用戶可讀可寫
  •  驗證smb.conf配置文件,並重啟smb和nmb服務。
[root@wencheng-smb samba] # testparm
Load smb config files from  /etc/samba/smb .conf
Unknown parameter encountered:  "display charset"
Ignoring unknown parameter  "display charset"
Unknown parameter encountered:  "create make"
Ignoring unknown parameter  "create make"
Loaded services  file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
    log  file =  /var/log/samba/log .%m
    map to guest = Bad User
    max log size = 50
    netbios name = WENCHENGSAMBA
    security = USER
    server string = WenCheng Samba Server Version % v
    workgroup = SAMBA
    idmap config * : backend = tdb

[public]
    comment = Public Directories
    create mask = 0640
    guest ok = Yes
    path =  /data/samba/shares/public
    write list = samba

[devops]
    admin  users = devops
    comment = Devops Directories
    create mask = 0644
    path =  /data/samba/shares/devops
    read only = No
    valid  users = @devops @samba
    write list = @devops @samba

[market]
    admin  users = market
    comment = Market Directories
    path =  /data/samba/shares/market
    read only = No
    valid  users = @market @samb

[root@wencheng-smb ~] # systemctl restart smb nmb
  • 創建普通用戶及管理員賬號; 創建共享目錄;並分配給目錄相關權限。
[root@wencheng-smb ~] # useradd -M -s /sbin/nologin samba      # Samba管理員
[root@wencheng-smb ~] # useradd -M -s /sbin/nologin devops      # devops部門管理員
[root@wencheng-smb ~] # useradd -M -s /sbin/nologin market      # market部門管理員
[root@wencheng-smb ~] # useradd -M -s /sbin/nologin -g devops user1  # devops部門用戶
[root@wencheng-smb ~] # useradd -M -s /sbin/nologin -g market user2  # market部門用戶

[root@wencheng-smb ~] # id samba
uid=1000(samba) gid=1000(samba)  groups =1000(samba)
[root@wencheng-smb ~] # id devops
uid=1001(devops) gid=1001(devops)  groups =1001(devops)
[root@wencheng-smb ~] # id market
uid=1002(market) gid=1002(market)  groups =1002(market)
[root@wencheng-smb ~] # id user1
uid=1003(user1) gid=1001(devops)  groups =1001(devops)
[root@wencheng-smb ~] # id user2
uid=1004(user2) gid=1002(market)  groups =1002(market)

[root@wencheng-smb ~] # mkdir -p /data/samba/shares/{public,devops,market}
[root@wencheng-smb ~] # mkdir /data/samba/shares/public/public{1..3}
[root@wencheng-smb ~] # mkdir /data/samba/shares/devops/devops{1..3}
[root@wencheng-smb ~] # mkdir /data/samba/shares/market/market{1..3}
[root@wencheng-smb ~] # touch /data/samba/shares/market/market{4..6}
[root@wencheng-smb ~] # touch /data/samba/shares/devops/devops{4..6}
[root@wencheng-smb ~] # touch /data/samba/shares/public/public{4..6}
[root@wencheng-smb ~] # ls /data/samba/shares/*
/data/samba/shares/devops :
devops1  devops2  devops3  devops4  devops5  devops6
/data/samba/shares/market :
market1  market2  market3  market4  market5  market6
/data/samba/shares/public :
public1  public2  public3  public4  public5  public6

# 修改屬主屬組幾權限
[root@wencheng-smb ~] # chown samba.samba /data/samba/shares/
[root@wencheng-smb ~] # chown devops.devops /data/samba/shares/devops/
[root@wencheng-smb ~] # chmod 775 /data/samba/shares/devops/
[root@wencheng-smb ~] # chown market.market /data/samba/shares/market/
[root@wencheng-smb ~] # chmod 775 /data/samba/shares/market/
[root@wencheng-smb ~] # chown nobody.nobody /data/samba/shares/public/
[root@wencheng-smb ~] # chmod 775 /data/samba/shares/public/

[root@wencheng-smb ~] # setfacl -m u:samba:rwx /data/samba/shares/*

[[root@wencheng-smb ~] # ls -ld /data/samba/shares/
drwxr-xr-x. 5 samba samba 48 May 28 10:09  /data/samba/shares/
[root@wencheng-smb ~] # ls -ld /data/samba/shares/*
drwxrwxr-x+ 5 devops devops 143 May 28 17:02  /data/samba/shares/devops
drwxrwxr-x+ 5 market market 143 May 28 17:02  /data/samba/shares/market
drwxrwxr-x+ 5 nobody nobody  96 May 28 10:06  /data/samba/shares/public

[root@wencheng-smb ~] # getfacl /data/samba/shares/*
getfacl: Removing leading  '/' from absolute path names
# file: data/samba/shares/devops
# owner: devops
# group: devops
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x

# file: data/samba/shares/market
# owner: market
# group: market
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x

# file: data/samba/shares/public
# owner: nobody
# group: nobody
user::rwx
user:samba:rwx
group::rwx
mask::rwx
other::r-x

將現有的用戶添加到組。
usermod [-G] [GroupName] [UserName]
將現有的用戶添加到多個組
usermod [-G] [GroupName1,GroupName2] [UserName]

將現有用戶從組中移除。
gpasswd [-d] [UserName] [GroupName]
將現有多個用戶添加到組。
gpasswd [-M] [UserName1,UserName2] [GroupName]

pdbedit命令解析。

pdbedit 命令用於管理Samba服務的帳戶信息數據庫,格式為: "pdbedit [選項] 帳戶"
第一次把用戶信息寫入到數據庫時需要使用-a參數,以后修改用戶密碼、刪除用戶等等操作就不再需要了。

 pdbedit -L :查看samba用戶
 pdbedit -a -u user:添加samba用戶
 pdbedit -r -u user:修改samba用戶信息
 pdbedit -x -u user:刪除samba用戶

 samba服務數據庫的密碼也可以用 smbpasswd 命令 操作
 smbpasswd -a user:添加一個samba用戶
 smbpasswd -d user:禁用一個samba用戶
 smbpasswd -e user:恢復一個samba用戶
 smbpasswd -x user:刪除一個samba用戶
  •  將用戶添加為Samba用戶,這里以samba用戶為例,其他用戶類同,不再贅述。
[root@wencheng-smb ~] # pdbedit -a -u samba
Unknown parameter encountered:  "display charset"
Ignoring unknown parameter  "display charset"
new password:               # 登錄samba密碼
retype new password:           # 再次確認輸入
Unix username:        samba
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2219792021-1567261761-1612575661-1000
Primary Group SID:    S-1-5-21-2219792021-1567261761-1612575661-513
Full Name:
Home Directory:       \\wenchengsamba\samba
HomeDir Drive:
Logon Script:
Profile Path:         \\wenchengsamba\samba\profile
Domain:               WENCHENGSAMBA
Account desc:
Workstations:
Munged dial:
Logon  time :           0
Logoff  time :          Wed, 06 Feb 2036 23:06:39 CST
Kickoff  time :         Wed, 06 Feb 2036 23:06:39 CST
Password last  set :    Fri, 28 May 2021 12:24:14 CST
Password can change:  Fri, 28 May 2021 12:24:14 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

[root@wencheng-smb ~] # pdbedit -L    # 查看samba用戶
Unknown parameter encountered:  "display charset"
Ignoring unknown parameter  "display charset"
samba:1000:
devops:1001:
market:1002:
user1:1003:
user2:1004:
  •  Win10測試連接Samba共享目錄。

     

  •  “public”文件夾允許所有用戶可直接打開,但無法上傳,刪除操作。

    

  • 訪問“devops”文件夾需賬號密碼。

    

Win10本機訪問samba時用切換另一個用戶登錄。

方法如下:
1)按鍵ctrl+r,打開 "運行" ,輸入 "cmd"
2)輸入命令 "net use * /delete" ,接着輸入 "Y" ,即先取消所有的net 連接

     

  •   “devops”文件夾只允許devops用戶及其組的用戶(user1),samba管理員上傳,刪除操作。

    

  •  “market”文件夾只允許market用戶及其組的用戶(user2),samba管理員上傳,刪除操作。

    

  • “pbulic”文件夾只允許samba管理員上傳,刪除操作。

    

 至此,已實現Samba + Windows 文件共享。


免責聲明!

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



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