什麼是桑巴?
在開始安裝之前,我們先來了解一下 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 -> 好的

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

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

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

為此,該目錄被命名為“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 機器的混合網絡環境中輕鬆共享文件和打印機,則值得考慮。
如果這篇文章看起來很長而且很複雜,或者如果我們採取的某些步驟讓您感到不舒服,我們會在這里為您提供幫助。請與知識淵博且經驗豐富的託管顧問交談。