SambaSMB/CIFS 网络协议的重新实现, 可以在 Linux 和 Windows 系统间进行文件、打印机共享。自己 DIY NAS(Network Attached Storage:网络附属存储)的时候就需要自己配置 Samba 服务。

我自己的 NAS 用的是极简的 Archlinux 系统。下面记录以下在 Archlinux 系统上开启 Samba 服务的方法。

安装 Samba

1
$ sudo pacman -S samba

配置 Samba

Samba 服务的配置文件是 /etc/samba/smb.conf,需要手动创建。

全局配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[global]
# 工作组
workgroup = WORKGROUP
# 服务描述
server string = My Samba Server
# 服务类型
server role = standalone server
# 日志
log file = /var/log/samba/%m.log
max log size = 50
# 支持 windows
wins support = yes
dns proxy = no
# 限制协议版本
server min protocol = CORE
aio read size = 1
aio write size = 1
server multi channel support = yes

共享文件夹设置

1
2
3
4
5
6
7
8
9
10
11
[myshare]
comment = myshare
# 共享文件夹路径
path = /srv/share
# 用户名
valid users = samba_user
# 是否公开
public = no
# 是否可写入
writable = yes
create mask = 0765

用户管理

添加用户

Samba 需要 Linux 账户才能使用 - 可以使用已有账户或创建新用户.

虽然用户名可以和 Linux 系统共享,但是 Samba 使用单独的密码管理,将下面的 samba_user 替换为你的用户名,用户名与上面配置文件中的用户名一致:

1
$ sudo smbpasswd -a samba_user

修改密码

用 smbpasswd 修改 samba 用户的密码:

1
$ sudo smbpasswd samba_user

用户权限

需要注意的是你的用户 samba_user 要拥有你共享文件夹的权限。

防火墙端口

Samba 服务需要使用 UDP 端口 137、138 和 TCP 端口 139、445 端口。如果使用了防火墙要注意开启端口。

启动服务

使用 systemd 启动服务。

1
2
$ sudo systemctl start smbd.service 
$ sudo systemctl start nmbd.service

设置开机启动:

1
2
$ sudo systemctl enable smbd.service 
$ sudo systemctl enable nmbd.service

开启局域网发现功能

让你的 Samba 在网域内可以被搜索到。使用 wsdd(Web Service Discovery host daemon)。项目地址:wsdd

对于 Archlinux 来说可以从 AUR 安装 wsdd。使用 AUR 工具 yay 安装:

1
$ yay -S wsdd

启动服务

1
$ sudo systemctl start wsdd.service

开机启动

1
$ sudo systemctl enable wsdd.service