Raspberry Pi 计算模块 4 和 5(以下简称 CM4 和 CM5)也可以作为文件服务器,使用 Samba 服务从 Windows 和 macOS 访问。
它的功能是服务器,允许多台客户端 PC 同时访问文件。
仅 Samba 服务就可用于家庭内的快速文件共享,也可用于内部使用。
文件权限设置可能看起来有点复杂,但我们已根据实际示例尽量使其简单易懂。
如果按文章顺序运行代码,就能正常工作,请尝试一下。
当时的环境
安装 Samba 的前提条件是 Raspberry Pi 操作系统已经启动,并已完成初始设置向导。
- Raspberry Pi CM4 (eMMC32GB, 8GB RAM) Raspberry Pi OS bookworm
Raspberry Pi CM5 (eMMC64GB, 8GB RAM) Ubuntu 24.04LTS - 用有线局域网电缆连接路由器
- 连接键盘和显示器
共享文件夹的设置条件如下
- 共享文件夹直接创建在 eMMC 的 /home 下
这是一个通过定义的用户身份验证访问的环境。
,这次它不在需要加载的驱动器(如外置硬盘)中,因此可以在安装操作系统后立即测试操作。
建议使用有线局域网进行网络连接,因为只需连接一根网线即可。
对于 Wi-Fi,请预先配置您的家庭(内部)路由器参与。
最简单的方法是提供键盘、鼠标和显示器,并通过有线局域网连接到网络。
也可以使用 Raspberry Pi OS lite,仅在 Wi-Fi 环境和 SSH 连接下工作。不过,精简版中缺少许多模块和库,因此与文章中相同的方法将无法使用。请小心操作。
文章内容使用 CM4+Raspberry Pi OS 进行解释。
此外,还在 CM5+Ubuntu24.04LTS 上进行了测试。
在 Ubuntu 中,共享文件的授权部分有所不同,但其余操作与文章内容相同。只需执行命令即可构建它。请尝试一下。
安装 Samba
首先,在命令行上安装 Samba。
如果您有桌面环境,请在终端应用程序中工作;CUI 环境(仅限命令行)或 SSH 连接也是如此。
apt update是你唯一需要先做的事情。保持安装源最新以避免不必要的错误非常重要。
在这种情况下,我们还将在安装 Samba 软件包之前运行full-upgrade。
sudo apt update
sudo apt full-upgrade
sudo apt install samba samba-common-bin smbclient cifs-utils
虽然 Samba 安装本身只需要apt install samba ,但如上所述,将其作为一个套件安装也很方便。
这次确认的 Samba 版本是 4 系列。
samba --version
Version 4.17.12-Debian
创建专用共享目录
Raspberry Pi 操作系统安装在 CM4/5 内部 eMMC 上。我将分享其中的文件。
创建一个共享目录(文件夹),以便可以从其他机器上查看和编辑。
,为了清楚起见,我将其命名为 “共享”。
在这里,它直接创建在 /home 下,与 home 目录处于同一级别。
在本例中,为清楚起见,Raspberry Pi 使用了/home/share,但使用/srv/samba/share 更为合适。

sudo mkdir /home/share
我们将首先创建与 Samba 一起使用的用户和组,然后更改所有权,以授予安全性更高的权限。
创建用户和设置密码
如果在 smb.conf 中配置的共享文件夹出现在其他机器的网络列表中,则表示可以访问该文件夹。
可以让他们以访客身份访问,但这次我们要创建一个需要经过身份验证的新用户。
让我经常感到困惑的是,Samba 的登录名往往与 Raspberry Pi 操作系统的登录名相同(如 pi),这可能会让人非常困惑。
Raspberry Pi 操作系统上的用户可以使用同一个用户,但最好为 Samba 专门创建一个单独的用户,并让用户使用该用户名和密码访问系统。
不过,必须先在 Raspberry Pi 操作系统上创建该用户。
在系统端添加用户
创建一个新用户,作为与 Samba 一起使用的专用用户。
由于是专用用户,它不需要能够登录 Raspberry Pi 操作系统,因此我创建了它,并提供了选项(无主目录、无登录选项)。
sudo adduser --system --group --no-create-home ユーザー名
执行后,它将看起来像这样。
sudo adduser --system --group --no-create-home cm4smb
システムユーザ `cm4smb' (UID 111) を追加しています...
新しいグループ `cm4smb' (GID 123) を追加しています...
新しいユーザ `cm4smb' (UID 111) をグループ `cm4smb' に追加しています...
Not creating `/nonexistent'.
将登录用户(如 pi)设为 Samba 用户是可行的,但这样做会使权限分离或查看日志变得复杂。当然,这也不适合安全目的。
如果只在一个封闭的家庭中由一个人使用,那就很容易,我在开始时也经常使用。
虽然一开始很麻烦,但不建议将登录用户设为 Samba 用户,因为如果用户分开,就更容易理解相反的情况。
为 Samba 设置用户和密码
既然我们已经在操作系统端添加了一个新用户(本例中为 cm4smb),现在就可以将其添加到 Samba 中。
sudo smbpasswd -a cm4smb
执行后,系统会要求您设置一个密码。
设置新密码时最好与登录用户分开。
New SMB password:
Retype new SMB password:
Added user cm4smb.
继续激活已创建的用户。
sudo smbpasswd -e cm4smb
添加到群 sambashare
将本地用户(本例中为 raspida)和您创建的用户(本例中为 cm4smb)添加到sambashare组。
sambashare 从一开始就存在于此安装中。如果没有,请创建。(sudo addgroup sambashare)
sudo usermod -aG sambashare raspida
# 現セッションを変更して反映
newgrp sambashare
# もしくはログオフ、再起動
这样,使用 Raspberry Pi 操作系统(本例中为 raspida)登录的用户就可以访问本地目录,即使该目录的权限为 0770,因为他属于同一个组。
为创建的目录授予权限
你刚刚创建的/home/share目录的权限(permissions)应该是 0770。
如果您处于完全本地的环境中,0777 的完整权限可能不会对您产生影响,但我们将继续使用 0770,因为它不会只给您其他人的权限。
如果你稍后在smb.conf 设置了一个 sambashare 组,你将拥有所有者组的全部权限。
权限是 0770,所有者是新创建的用户,所有组是 sambashare。
sudo chmod 0770 /home/share
sudo chown cm4smb:sambashare /home/share
现在,我们已经完成了初步工作。
接下来,让我们编辑配置文件 (smb.conf)。
添加到 Samba 配置文件 (.conf)
Samba 配置说明见smb.conf 。通常没有图形界面。
备份从一开始就存在的默认 conf 文件。
如果你犯了错误,后来又失去了踪迹,可以一次性撤销。
备份配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
smb.conf 中的描述
我们将在smb.conf 上描述如何访问共享文件夹。
sudo nano /etc/samba/smb.conf
设置以下条件
/home/share → 我希望能够使用添加的用户和密码连接并读写
在打开的 conf 文件最后一行添加以下配置。
[share]
comment = Share
path = /home/share
browseable = Yes
read only = No
valid users = cm4smb
force group = sambashare
create mask = 0666
; force create mode = 0666
directory mask = 0777
之所以将共享目录设置为valid users = cm4smb,是因为我们希望将其设置为只允许创建该目录的用户(cm4smb)进行连接。
不过,由于它也在 sambashare 组 (force group = sambashare) 中,本地用户(本例中为 raspida)也可以访问它,Samba 上的其他用户将无法访问它。
我将按照从上往下的顺序进行解释。
这一次,由于文件夹设置为 SHARE,因此部分名称也设置为相同的[share] 。
| 设置 | 说明 |
|---|---|
comment= | 在文件浏览器中查看文件时显示的注释。可以省略。 |
path = | 创建的 SHARE 文件夹由绝对路径指定。 |
browsable = | 设置为 “是 “可在文件浏览器中显示(浏览)。如果不想显示文件,则设置为否。 |
read only = | writable = yes read only基本设置是通过以下方式设置 |
valid users = | 指定用户需要进行身份验证。 |
force group = | 被归入同一组群的本地用户也可以访问系统。 |
create mask = | 这是计算权限后可授予的最大值。 |
directory mask = | 这是一个目录侧设置,与创建掩码的含义相同。 |
;force create mode = | 如果要强制要求权限(如 0666),请设置此项。 |
*smb.conf 中的分号(;)注释了一个设置。Sharp (#) 是对字符串的注释。
force group = sambashare到 sambashare。这样,被归入同一个组的本地用户就可以访问它。
create mask = 0666和directory mask = 0777是掩码,因此它们的含义与实际文件权限略有不同。
如果要强制要求权限(如 0666),必须另外写入force create mode = 0666 。
此处用分号注释,但必要时可以将其删除以启用。
创建掩码还必须根据所创建共享文件夹的权限和你希望授予的权限规则进行更改。
*smb.conf 中的分号(;)注释了一个设置。Sharp (#) 是对字符串的注释。
检查配置文件
检查您添加的smb.conf文件是否有错误。testparm该命令是一个非常简单的配置文件检查程序。
testparm
Loaded services file OK.如果出现错误信息,则说明没有问题。
如果有错误,请更正。您可能会发现双空格、拼写错误等。这样做的目的是发现错误。
至此,整个设置完成。
重启 Samba 服务
现在一切都已就绪,只需重启服务,不要重启系统。重启系统是没有问题的。
sudo systemctl restart smbd nmbd
从另一台 PC/Mac 访问,看看是否能正常工作。
尝试从另一台机器访问
在 Windows 资源管理器的地址栏中指定已安装 Samba 的 Raspberry Pi 的地址。
如果您使用的是 macOS,请在 Finder 中使用命令键 (⌘) + K 进入地址栏以连接服务器。

Windows:¥¥192.168.1.12
macOS:smb://192.168.1.12
或者,也可以使用主机名而不是 IP 地址。
Windows:¥¥rpicm4.local
macOS:smb://rpicm4.local
smb.conf如果已将browsable = no设置为 ,则可直接指定相应的路径(path)进行连接。(¥¥rpicm4.local¥share)
尝试写入文件
我从 PC/Mac 复制了每个相应的文件。
至于权限和所有者,现在文件的所有者是cm4smb:sambashare,文件权限是 666。
目录权限为 777。
本地用户 (raspida) 创建的目录的所有者和组为raspida,权限为 755。

也请尝试在本地环境中浏览。browsable = Yes然后,您应该可以查看和读取内容。
如果无法访问共享文件夹并出现错误,很可能是设置不够详细,或者您创建的共享文件夹的权限不同。
请再次检查。

在 CM5 + Ubuntu 24.04 上,即使设置相同,文件权限也是 664,虽然可以在 Samba 和本地使用组权限读写,但结果还是有些不同。
文件权限汇总 (rwx)
在 Mac 和 Linux 系统中经常出现的文件权限(文件权限)是很难实现的。
例如,rw-rw-rw-在这里的数字表示法是 666。这是一种任何人都可以读写的状态。
请参阅以下简要概述。
许可符号的含义
| 符号 | 内涵 | 文件 | 如果是目录 |
|---|---|---|---|
| 半长轴 | 阅读 | 可读(显示内容) | 可以显示 |
| 傻子 | 写道 | 可写(更改和删除) | 可在内部创建和删除文件 |
| 不为人知 | 执行 | 可执行(如程序) | 可以运行程序 可以 “进入 “目录 |
授权主题和ls -l 显示
| 被征收人 | 说明 | ls -l 显示示例 |
|---|---|---|
| 所有者(用户) | 文件创建者/所有者 | rwx------ 的前 3 个字符 |
| 组别 | 所有者所属的组员 | ---rwx--- 中间的三个字母 |
| 其他 | 所有其他用户 | ------rwx 的最后 3 个字符 |
数字表达式(用于 chmod 命令等)
| 符号 | 数值 | 内涵 |
|---|---|---|
| 半长轴 | 4 | 读取 |
| 傻子 | 2 | 条目 |
| 不为人知 | 1 | 执行 |
数字可以相加并表示为三位数
例如rwx = 4+2+1 =7
例如rw-rw-rw-= 666
数字表达式示例
| 数字示例 | 内涵 | 命令示例 |
|---|---|---|
| 755 | 所有者:所有、组及其他:读取 + 执行 | chmod 755 ファイル名 |
| 644 | 所有者:读/写,其他人:只读 | chmod 644 ファイル名 |
| 700 | 所有特权仅限业主 | chmod 700 sample.txt |
/home/share 中出现 0770 的原因。
在本例中,/home/share 被授权为 0770,因此所有者和组拥有所有权限,而其他人没有权限。
这是在操作系统方面,同样与 Samba 不同。这就是问题变得复杂的地方。
0770,所以原本其他用户权限为 0,无法读取或写入,但这次 Samba 强制将其加入了 sambashare 组。
写入文件时,文件被覆盖到 sambashare 组,770 中的组权限(rwx=7)可用于读写,因此甚至本地用户(本例中为 raspida)也可以读写。
如果将权限设置为 0777,任何人都可以拥有完全控制权限,这并不麻烦,但从安全角度考虑,仍然不建议这样做。我们希望本地端(操作系统端)的权限尽量不要设置为 0777。
在本例中,位于 0770 的共享目录(其他用户无权访问)也被添加到了本地用户的 sambashare 组中,因此在 Samba 上,只有需要身份验证的 cm4smb 才能访问该目录,但在本地端,即使是登录用户也可以编辑该目录的内容。在本地端,即使是登录用户也可以编辑目录内容。
根据使用方式的不同,该权限有多种可能的使用模式。如果本地端不需要任何权限,那么这个概念就相对简单,因为只需要考虑 Samba 端。
如果更改了 smb.conf,每次都需要重新启动服务以应用更改。
Garbled Characters
最后,如果您的 Samba 文件在 Windows 或 macOS 上出现乱码,请在[global]部分添加以下内容。
描述没有问题,因此建议添加。
#[global]の下に2行を追加。Unix系、Win系用の文字化け対策
unix charset = UTF-8
dos charset = CP932
如果你想在 Raspberry Pi 上安装文件共享服务器,只需安装 Samba 就足够了。
考虑到文件访问权限,Samba 服务文件共享有点深奥。
参考资料: https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
文章由拉斯必达提供
非工程师也能愉快使用的 Raspberry Pi 信息网站 raspida.com一个非工程师也能享受和使用的 Raspberry Pi 信息网站。他还为 PiLink 网站提供有关工业用 Raspberry Pi 的技术博客文章。

