什麼是桑巴?

在開始安裝之前,我們先來了解一下 Samba 是什麼以及如何使用它。 Samba 是免費的開源軟件,它使 Windows 和 Linux 系統之間的文件共享變得簡單易行。準確地說,它是 SMB/CIFS 協議的開源實現。

(SMB) 服務器消息塊協議是一種客戶端-服務器通信協議,用於共享對網絡上的文件、打印機、串行端口和其他資源的訪問。 (CIFS) 通用 Internet 文件系統協議是 SMB 協議的一種方言。描述協議不同變體的消息包的集合稱為方言。

簡而言之,Samba 允許您在 Linux/Unix 服務器和 Windows 客戶端之間共享文件和打印服務、使用身份驗證和授權、名稱解析和服務公告。

Samba 可以執行五項基本任務。

  • 您可以與您的 Windows 機器共享您的 Linux 驅動器。
  • 您可以使用 Linux 計算機訪問 SMB 共享。
  • 您可以與 Windows 機器共享 Linux 打印機。
  • 您可以與 Linux 機器共享您的 Windows 打印機。
  • 您可以在 Unix/Linux 服務器上設置域控制器並將 Windows 客戶端集成到域控制器中。

Samba 還可以充當域控制器或常規域成員。如果您有一個包含 Windows 和 Linux 計算機的混合網絡環境,則此選項使 Samba 幾乎是必須的。

先決條件

  • 要安裝 Samba,您必須以具有 sudo 權限的用戶或 root 用戶身份登錄 Linux 服務器。
  • 為了簡化本教程中的步驟,我們將使用 root 用戶。如果您決定繼續以用戶身份安裝軟件(具有 sudo 權限),請不要忘記““須藤” 命令位於每個命令的開頭。
  • 您還需要一台 Windows 計算機來連接。

在 CentOS 7 上安裝 Samba

在 CentOS 和其他基於 RedHat 的發行版上的安裝幾乎總是使用 yum 工具進行最佳管理,所以我用它在 CentOS 7 上安裝 Samba 並保持系統最新。繼續。

首先,讓我們刪除任何可能仍緩存在您的系統上的軟件包。要一次清除啟用的存儲庫中的所有緩存文件,請使用以下命令:

[[email protected] ~]# yum clean all

接下來,讓我們確保所有系統包都已更新。 使用 -y 標誌自動確認提示。

[[email protected] ~]# yum -y update

現在您可以繼續安裝 Samba。 可以使用以下命令輕鬆安裝 Samba: 請注意如何再次使用 -y 標誌來自動確認安裝提示。

[[email protected] ~]# yum -y install samba samba-client samba-common

Yum 是一個很棒的工具,可以自動安裝 Samba 所需的所有依賴項。在安裝輸出結束時,您應該會看到類似於以下內容的輸出:

Installed:
  samba.x86_64 0:4.9.1-10.el7_7 samba-client.x86_64 0:4.9.1-10.el7_7 samba-common.noarch 0:4.9.1-10.el7_7

Dependency Installed:
  libsmbclient.x86_64 0:4.9.1-10.el7_7 libwbclient.x86_64 0:4.9.1-10.el7_7
  samba-client-libs.x86_64 0:4.9.1-10.el7_7 samba-common-libs.x86_64 0:4.9.1-10.el7_7
  samba-common-tools.x86_64 0:4.9.1-10.el7_7 samba-libs.x86_64 0:4.9.1-10.el7_7

Complete!

安裝後,您可以檢查 Samba 的版本。

[[email protected] ~]# smbd --version
Version 4.9.1

配置 Samba

安裝 Samba 後,您需要將其配置為您的偏好和標準。 在開始在 Linux 機器上配置 Samba 之前,您需要在 Windows 機器上授權工作組。為此,請右鍵單擊“這台電腦”或“我的電腦”→“屬性”→“高級系統設置”→“計算機名稱”。這將彈出帶有所需數據的以下窗口

或者,您可以運行 cmd(從 Windows 開始框中)並運行以下命令:

net config workstation

此命令顯示有關工作站域的必要信息。你看到這樣的東西

現在您已經掌握了有關 Windows 計算機上工作組的信息,您可以繼續在 Linux 系統上配置 Samba。

Samba 配置文件位於 /etc/samba/smb.conf。在進行任何更改之前,請務必備份原始配置文件。

要備份原始配置文件 smb.conf,請使用以下命令創建名為 smb.conf_orig 的備份副本。

[[email protected] ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf_orig

現在您可以進行編輯了。首先,為匿名文件共享服務配置 Samba。所有用戶都可以讀取和寫入此共享。首先,創建一個名為“anonymous_shared_directory”的目錄來存儲您的文件。

[[email protected] ~]# mkdir -p /samba/anonymous_shared_directory

接下來,我們需要對目錄應用適當的權限。

[[email protected] ~]# chmod -R 0775 /samba/anonymous_shared_directory
[[email protected] ~]# chown -R nobody:nobody /samba/anonymous_shared_directory

如果您像我們一樣使用 SELinux,則需要為您的 samba 共享更改 SELinux 安全上下文。

[[email protected] ~]# chcon -t samba_share_t /samba/anonymous_shared_directory

接下來,您需要使用首選的 CLI 文本編輯器(Nano 或 Vim)打開 /etc/samba/smb.conf 文件,以對配置文件進行必要的更改。

[[email protected] ~]# vim /etc/samba/smb.conf

添加和編輯以下指令以配置匿名共享。

[global]
        workgroup = WORKGROUP
        security = user
        netbios name = centos7
        printcap name = cups
        idmap config * : backend = tdb
        cups options = raw
        map to guest = bad user

[Anonymous]
        comment = anonymous file share
        path = /samba/anonymous_shared_directory
        browseable = yes
        writable = yes
        guest ok = yes
        guest only = yes
        read only = no
        force user = nobody

Samba 配置文件如下所示:

[[email protected] samba]# cat /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 = WORKGROUP
        security = user
        netbios name = centos7
        printcap name = cups
        idmap config * : backend = tdb
        cups options = raw
        map to guest = bad user

[Anonymous]
        comment = anonymous file share
        path = /samba/anonymous_shared_directory
        browseable = yes
        writable = yes
        guest ok = yes
        guest only = yes
        read only = no
        force user = nobody

[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

然後不要忘記保存更改並關閉文本編輯器。要檢查您當前的 samba 設置,請運行以下命令:

[[email protected] samba]# testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[Anonymous]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE

按 Enter 以顯示服務定義的轉儲。

在啟動 Samba 服務之前,您必須配置防火牆以使用它。 必須打開以下端口才能使 Samba 正常運行。

Port 137 (TCP) - netbios-ns - NETBIOS Name Service
Port 138 (TCP) - netbios-dgm - NETBIOS Datagram Service
Port 139 (TCP) - netbios-ssn - NETBIOS session service
Port 445 (TCP) - microsoft-ds - if you are using Active Directory

其他端口:

Port 389 (TCP) - for LDAP (Active Directory Mode)
Port 445 (TCP) - NetBIOS was moved to 445 after 2000 and beyond, (CIFS)
Port 901 (TCP) - for SWAT service (not related to client communication)

如何為 Samba 服務打開這些端口取決於 Linux 服務器上的防火牆類型。大多數 Linux 服務器使用 csf 防火牆,因此首先配置 csf.conf 文件。讓我們在我們選擇的文本編輯器中打開 csf 配置文件。

[[email protected] ~]# vim /etc/csf/csf.conf

請務必在此處的相應部分中添加端口。

# Allow incoming TCP ports
TCP_IN = "20,21,25,53,80,110,139,143,443,445,465,587,993,995,53835"
# Allow outgoing TCP ports
TCP_OUT = "20,21,25,53,80,110,139,143,113,443,445,587,993,995,53835"

最後,保存您的更改並重新加載防火牆規則。

[[email protected] ~]# csf -r

如果您正在運行 firewalld 服務,請使用以下命令添加該服務:

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-service=samba

現在重新加載 firewalld 服務。

[[email protected] ~]# firewall-cmd --reload

最後,啟動 Samba 服務,使其在系統啟動時自動啟動。 Samba 使用兩個系統服務運行,smb.service 和 nmb.service。

smbd 服務實現文件共享和打印服務,監聽 139 和 445 端口。 nmbd 服務在客戶端實現 NetBIOS over IP 名稱服務並偵聽端口 137。

讓我們從以下命令開始

[[email protected] ~]# systemctl start smb.service
[[email protected] ~]# systemctl start nmb.service

要使這些服務在系統啟動時自動啟動,您需要啟用它們

[[email protected] ~]# [[email protected] ~]# systemctl enable smb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
[[email protected] ~]# systemctl enable nmb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.

要測試匿名共享的新實現,請轉到 Windows 計算機並運行[スタート]->[実行]點擊並輸入服務器的IP地址如下:

下一個,[OK]按下可在文件資源管理器中顯示匿名目錄。

然後雙擊進入目錄,右鍵新建一個文本文檔。

選擇一個文件名並保存。為此,請將文件命名為 testfile。

創建文件後,讓我們確保它也可以在我們的 Linux 機器上運行。

[[email protected] ~]# [[email protected] ~]# ls -l /samba/anonymous_shared_directory
total 0
-rwxr--r--. 1 nobody nobody 0 Mar 30 22:03 testfile.txt

現在您已經了解瞭如何配置 Samba 以使用匿名共享,讓我們繼續安全共享。

為私有共享配置 Samba

由於訪問此類共享需要用戶名和密碼,因此您需要創建允許訪問共享的用戶/用戶組。 為 Samba 用戶創建組後,您可以輕鬆地將所需的權限一次性分配給所有用戶。

要創建一個新組,請使用以下命令

[[email protected] ~]# groupadd sambausergroup

您現在已經成功地為您的用戶創建了一個名為“sambausergroup”的組。

讓我們繼續創建一個用戶。

將其命名為“newtestuser”,在一個命令中將其分配給一個組,並拒絕 shell 訪問(因為 Samba 共享不需要密碼或密碼)。

Samba 用戶帳戶與系統帳戶是分開的,因此我計劃僅將 Samba 權限授予不需要 shell 訪問/密碼的用戶。但是,如果您決定合併,則可以使用“桑巴-winbind用於將系統用戶和密碼與 samba 用戶數據庫和其他功能同步的軟件包。

要添加用戶,請使用以下命令

[[email protected] ~]# useradd -s /sbin/nologin -g sambausergroup newtestuser

請注意,我們使用 -s 標誌拒絕用戶 shell 訪問,使用第二個標誌 -g 將其分配給組。

用戶需要訪問共享還有一件事。這是一個密碼。因此,讓我們為用戶創建一個 Samba 訪問密碼。

[[email protected] ~]# smbpasswd -a newtestuser
New SMB password:
Retype new SMB password:
Added user newtestuser.

受密碼保護共享的 samba 用戶現在需要一個地方來存儲他的文件,因此我們需要創建一個目錄。此目錄稱為“password_protected_directory”

[[email protected] samba]# mkdir -p /samba/password_protected_directory

創建的組 ‘sambausergroup’ 中的用戶應該有權讀取、寫入和執行此目錄中的文件,因此使用以下命令授予它:

[email protected] samba]# setfacl -R -m "g:sambausergroup:rwx" /samba/password_protected_directory

此外,必須在此安全上下文中應用 SELinux 安全上下文。

[[email protected] samba]# chcon -t samba_share_t /samba/password_protected_directory/

現在您可以繼續配置此共享。 打開 Samba 配置文件並添加私有共享的設置

[[email protected] ~]# vim /etc/samba/smb.conf
[Password Protected]
		comment = needs username and password to access
		path = /samba/password_protected_directory
		valid users = @sambausergroup
		guest ok = no
		writable = yes
		browsable = yes

完整的配置文件如下所示

# 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 = WORKGROUP
        security = user
        netbios name = centos7
        printcap name = cups
        idmap config * : backend = tdb
        cups options = raw
        map to guest = bad user

[Password Protected]
        comment = needs username and password to access
        path = /samba/password_protected_directory
        valid users = @sambausergroup
        guest ok = no
        writable = yes
        browsable = yes

[Anonymous]
        comment = anonymous file share
        path = /samba/anonymous_shared_directory
        browseable = yes
        writable = yes
        guest ok = yes
        guest only = yes
        read only = no
        force user = nobody

[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

保存更改後,測試程序 命令。

[[email protected] samba]# testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[Password Protected]"
Processing section "[Anonymous]"
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

在測試新共享之前,讓我們重新啟動 Samba 服務以確保更改生效。

[[email protected] samba]# systemctl restart smb nmb

要進行測試,請從 Windows 計算機再次連接,[スタート]->[実行]點擊輸入服務器IP。 服務器 IP -> 好的

輸入服務器.ip

這將創建兩個目錄,一個匿名目錄和一個受密碼保護的目錄。

提供目錄

雙擊受密碼保護的目錄會打開以下提示,您需要在其中輸入“newtestuser”憑據。

輸入.network.credentials

為了確保一切正常,讓我們在受密碼保護的目錄中創建一個新目錄。

新目錄

為此,該目錄被命名為“test_directory”。

測試目錄

最後,讓我們從我們的 Linux 機器上檢查該目錄是否存在。

[[email protected] /]# ls -l /samba/password_protected_directory/
total 0
drwxr-xr-x. 2 newtestuser sambausergroup 6 Apr  3 21:12 test_directory

結論是

到目前為止,我們已經介紹了 Samba 是什麼,如何安裝它,以及如何配置和使用它進行文件共享,但作為免費和開源軟件,Samba 可以提供更多。 它可以配置並用於從 Linux 訪問連接到 Windows 系統的打印機,也可以將其設置為可以集成 Linux 服務器的 Active Directory 域控制器。

Samba 在連接方面非常靈活,您可以從 Linux 計算機、Windows 計算機和 macOS 連接到它。

設置 Samba 既快速又簡單,因此如果您想在 Windows 和 Linux 機器的混合網絡環境中輕鬆共享文件和打印機,則值得考慮。

如果這篇文章看起來冗長而復雜,或者如果我們採取的某些步驟讓您感到不舒服,我們會隨時為您提供幫助。請諮詢知識淵博且經驗豐富的託管顧問。