这篇博客可以帮助你快速了解如何在你的设备上部署 Samba,实现跨平台的资源管理,部署Samba的目的是在我的windows端可以轻松管理存放在本地NAS(Network Attached Storage)中的资料。
1. 引言
Samba 是什么
Samba
是一个开源软件,它实现了在 Linux 和 UNIX 系统上的 Server Message Block (SMB)
协议,这是一种用于在局域网内共享文件和打印机的通信协议。Samba 允许这些系统与 Windows 系统进行无缝集成,实现跨平台的文件和打印服务共享。
Samba 的重要性
- 跨平台兼容性:Samba 提供了不同操作系统之间的互操作性,特别是 Windows 和 Linux/UNIX 系统,使得在这些系统之间共享资源变得简单。这也是你可能需要在你的系统上部署 Samba的最重要的原因。
- 灵活性和可配置性:Samba 提供了丰富的配置选项,允许管理员根据需要定制共享设置,包括权限控制、安全设置等。
- 安全性:Samba 支持多种安全特性,包括加密通信和集成 Windows 域的认证机制,确保共享数据的安全性。
- 易于部署和维护:Samba 的安装和配置过程相对简单,且有大量的文档和教程可供参考,便于快速部署和维护。
2. 环境准备
部署 Samba 的操作系统和版本要求通常比较宽松,因为 Samba 是一个跨平台的软件,可以在多种操作系统上运行。以下是常见的操作系统和它们的一般要求:
- Linux:几乎所有现代的 Linux 发行版都可以安装和运行 Samba。这包括但不限于:
- Ubuntu(所有版本)
- Debian(所有版本)
- CentOS(所有版本,包括 CentOS Stream)
- Fedora(所有版本)
- openSUSE(所有版本)
- Arch Linux(所有版本)
- RHEL(包括其克隆版本如 CentOS)
- Windows:虽然 Samba 主要是为 Linux 和 Unix 系统设计的,但 Windows 系统也可以安装 Samba 客户端来访问 Samba 服务器。对于 Windows,支持的版本包括:
- Windows 10
- Windows 11
- Windows Server 2016/2019/2022
本博客使用的操作系统:Utuntu、Windows 11
3. 部署的操作流程
要在本地(Windows)和服务器(Linux)之间使用 Samba 进行文件传输,你需要按照以下步骤进行:
安装 Samba
在服务器上,你需要首先安装 Samba。在 Ubuntu 系统上,你可以使用sudo apt-get install samba
命令来安装。
检查是否安装成功
- 检查 Samba 版本
在终端中输入smbd --version
,如果 Samba 已经成功安装,这个命令会显示出 Samba 的版本号。 - 检查 Samba 服务状态
在终端中输入service smbd status
。如果 Samba 已经成功安装并正在运行,这个命令会显示出 Samba 服务的状态。
配置 Samba
安装完成后,你需要编辑/etc/samba/smb.conf
文件来配置你的 Samba 服务器。在这个文件中,你可以指定你想要共享的文件夹,以及谁可以访问这个文件夹。
-
打开 Samba 配置文件:
在你的终端中输入sudo nano /etc/samba/smb.conf
来打开 Samba 的配置文件。 -
配置全局设置:
Samba 提供了很多其他的配置选项,应该根据具体需求来修改这些设置。如果需要详细的信息,建议查看 Samba 的官方文档。
下图红色框中是我配置的全局设置:
以下是上图中每个参数的详细解释:workgroup = MYWORKGROUP
定义了 Samba 服务器将要加入的工作组名称。工作组是 Windows 网络中的一个逻辑组,用于组织网络上的资源。在这里,Samba 服务器将加入名为MYWORKGROUP
的工作组。
security = user
定义了 Samba 服务器的安全级别。user
级别要求客户端在访问共享时提供有效的用户名和密码。其他选项还包括share
(每个共享需要密码)、domain
(用于加入 Windows 域)等。
passdb backend = tdbsam
指定了 Samba 用于存储用户凭据的后端服务。tdbsam
是 Samba 自带的基于文件的用户数据库。
printing = cups
定义了 Samba 服务器使用的打印系统。这里设置为cups
,即通用 Unix 打印系统。
printcap name = cups
指定了打印服务使用的打印能力数据库的名称。这里与printing
参数一致,设置为cups
。
Load printers=yes
控制 Samba 是否自动加载打印机定义。设置为yes
表示 Samba 将自动加载打印机定义,使得打印机可以被网络用户访问。
cups options = raw
提供了对 CUPS 打印系统配置的额外选项。raw
表示以原始模式发送打印数据,不进行任何转换。
map to guest = bad user
定义了当用户无法验证时 Samba 应如何映射该用户。bad user
表示如果用户无法验证,他们将被映射为没有访问权限的访客。
guest ok = yes
如果设置为yes
,它允许访客访问共享。
创建共享目录
可以在配置文件的底部添加一个新的部分来设置共享目录。下图红色框是我创建的共享目录:
以下是上图中每个参数的详细解释:
[NAS_2T]
这是共享的名称,客户端将看到这个名称来访问共享。
path = /mnt/sdb1
定义共享目录的绝对路径。在这个例子中,是 /mnt/sdb1 目录。
available = yes
表示这个共享是可用的。如果设置为 no,共享将不可见且无法访问。
valid users = yulin
指定允许访问此共享的有效用户列表。这里只有用户 yulin 可以访问。
browseable = yes
表示这个共享将在网络上可见,可以被浏览。如果设置为 no,共享不会出现在网络浏览列表中。
public = yes
如果设置为 yes,任何用户都可以访问共享而不需要提供凭据。
writable = yes
表示共享目录是可写的,用户可以修改文件或添加新文件。
read only = no
表示共享目录不是只读的。
保存并关闭配置文件
【nano编辑器】 保存文件:Ctrl + O;退出编辑器:Ctrl + X
测试你的共享是否可以正常工作
如果想测试你的共享是否可以正常工作,你可以在你的终端中使用 smbclient
命令来连接到你的共享,如下所示:smbclient //localhost/share -U yulin
这个命令列出了我的 Samba 服务器上所有可用的共享,包括 print$
、share
和 IPC$
。其中,share(NAS_2T) 是我创建的共享,print$ 和 IPC$ 是 Samba 服务器默认创建的共享。
如下图所示我的 Samba 服务器已经成功配置了一个名为 NAS_2T 的共享:
用户和权限管理
上面的演示是只有用户 yulin
可以访问。如果你想有多个用户可以访问共享文件夹,你可以创建一个用户组用来管理这个目录的管理权限。下面演示了如何创建Samba用户、查看Samba用户、创建一个用户组用来管理共享目录的管理权限。
创建 Samba 用户
使用 sudo smbpasswd -a username
命令创建一个新的 Samba 用户。你需要为这个用户设置一个密码。
查看 Samba 用户
可以使用 pdbedit 命令来查看 Samba 用户。在终端中输入 sudo pdbedit -L
,这将会列出所有的 Samba 用户。
创建一个用户组用来管理共享目录的管理权限
创建一个新的用户组
你可以使用 groupadd
命令创建一个新的用户组。例如,如果你想创建一个名为NAS_2T
的新组,在终端中输入sudo groupadd NAS_2T
。
向用户组添加用户
你可以使用 usermod 命令将用户添加到用户组。例如,如果你想将用户bobby、yulin、jerry添加到NAS_2T组,在终端中输入
sudo usermod -a -G newgroup bobby
,sudo usermod -a -G newgroup yulin
,sudo usermod -a -G NAS_2T jerry
。
使用 getent
命令可以查看NAS_2T组的所有成员,确保向用户组添加用户这一步骤成功完成。在终端中输入getent group NAS_2T
,如下图所示可以看到用户已经被成功添加进用户组中:
更改用户组的所有权
-
更改所有权
sudo chown :NAS_2T /mnt/sdb1
这个命令使用chown
(改变所有权)来更改指定路径/mnt/sdb1
的组所有权。这里的:NAS_2T
表示将组所有权更改为NAS_2T
。注意,这个命令中没有指定用户所有权,只更改了组所有权。在Linux中,文件和目录所有权通常由两部分组成:用户所有权和组所有权。 -
更改权限
sudo chmod 770 /mnt/sdb1
这个命令使用chmod
(改变模式)来设置/mnt/sdb1
的访问权限。权限数字770
定义了文件或目录的访问权限,具体含义如下:- 第一个数字
7
代表文件所有者的权限。数字7
是由4
(读权限)+2
(写权限)+1
(执行权限)组成,表示所有者拥有读、写和执行这三种权限。 - 第二个数字
7
代表与文件所有者同一用户组的用户的权限,同样地,数字7
表示组内用户拥有读、写和执行权限。 - 第三个数字
0
代表其他用户的权限。数字0
表示其他用户没有任何权限。
- 第一个数字
-
检查访问权限是否更改成功
ls -Ld /mnt/sdb1
这张图显示了在Linux终端执行了ls -Ld /mnt/sdb1
命令后的结果。下面是对这个输出结果的解释:drwxrwx---
:这是文件/mnt/sdb1
的权限设置。权限由10个字符组成:- 第一个字符
d
表示这是一个目录。 - 接下来的三组字符
rwx
分别代表所有者(owner)、所属组(group)和其他用户(others)的权限。这里的rwx
表示所有者有读(r)、写(w)和执行(x)权限。 - 最后的三个
---
表示其他用户没有任何权限。
- 第一个字符
7
:这个数字表示有多少个硬链接指向这个目录。bobby
:这是文件所有者的用户名。NAS_2T
:这是文件所属的组名。4096
:这是目录的块大小,通常为4KB。Apr 19 06:47
:这是目录最后修改的日期和时间。/mnt/sdb1
:这是文件的路径。
测试 Samba 共享
接下来介绍如何从本地(Windows)访问 Samba 共享。需要使用Windows中映射网络驱动器的文件夹:
- 右键点击“此电脑”选项,点击“映射网络驱动器”,在弹出的“映射网络驱动器”窗口中,选择一个驱动器字母。
- 在“文件夹”输入框中,输入网络文件夹的路径。路径通常以\开头,后面跟着网络计算机的名称或IP地址,再加上共享文件夹的名称。以我的配置为例:
\\192.168.31.25\NAS_2T
。
- 需要输入之前创建的 Samba 用户的密码。
重启 Samba 服务
使用 sudo service smbd restart
命令来重启 Samba 服务。
9. 结论
通过以上教程你就可以轻松部署Samba啦!方便在windows端可以轻松管理存放在本地NAS(Network Attached Storage)中的资料!如果对上述过程有疑问欢迎在评论区或者私信留言!
10. 可能遇到的问题
无法在 Windows 中连接到你的 Samba 共享
如果你无法在 Windows 中连接到你的 Samba 共享,你可以尝试以下步骤来检查和排查问题:
- 检查 Samba 服务是否在运行: 在你的 Linux 服务器上,运行
sudo service smbd status
命令来检查 Samba 服务的状态。如果服务没有运行,你可以使用sudo service smbd start
命令来启动服务。 - 检查 Samba 配置文件: 使用
sudo nano /etc/samba/smb.conf
命令来查看你的 Samba 配置文件。确保 share 共享的配置是正确的,包括共享的路径、用户权限等。
连接上了windows和服务器的映射,但是window这边提示没有访问权限
可以使用ls -ld /mnt/sdb1
(此处的/mnt/sdb1
是上述创建共享目录步骤中的定义共享目录绝对路径,需要根据你的情况修改) 命令来查看这个目录的权限。
如果 yulin 用户
(上述创建共享目录步骤中的允许访问此共享的有效用户列表,需要根据你的情况修改)没有这个目录的读写权限,你可以使用 chmod
和 chown
命令来修改权限和所有权。