安装
sudo apt install samba
检查服务状态
systemctl status smbd --no-pager -l
检查是否启用(开机自启动)
systemctl is-enabled smbd
# enable it if inactive
systemctl enable smbd
配置
(可选)添加用户
sudo usermod -aG sambashare [username]
设置密码
sudo smbpasswd -a [username]
创建公开共享(可匿名访问)
sudo vi /etc/samba/smb.conf
按以下格式创建内容
[public]
comment = public anonymous access
path = /data/
browsable =yes
create mask = 0660
directory mask = 0771
writable = yes
guest ok = yes
说明:
[public]方括号内为share后显示的目录名
path = /data/ 为用于share的本地路径
browsable =yes 是否可以浏览
create mask = 0660
directory mask = 0771
writable = yes是否可写
guest ok = yes是否允许匿名访问
开启 SMB1
对于很多电视盒子, 运行安卓或CoreElEC, 只支持 SMB1, 连接默认配置的 Samba 服务会直接报 Timeout, 需要开启 smbd 服务对 SMB1 的支持
编辑 /etc/samba/smb.conf, 在[global]下添加
## Enable SMB1 ##
server min protocol = NT1
重启 smbd 后, 电视盒就可以连接了.
配置项
Samba可以配置的属性可以参考 https://www.samba.org/samba/docs/using_samba/ch08.html
create mask
八进制数, 每个数 3-bit 代表一组权限[rwx], 整个mask 代表 smb 客户端在创建文件时可以设置哪些bit.
默认是 0744, 对应[--- rwx r-- r--] 这代表着 unix 下的文件所有者可以 rwx [读,写,执行], 同组用户和其它可以 r [读]
对于下面的例子, create mask 限制从 smb 创建文件/目录时, 不管来自于什么客户端, 文件和目录的最大权限为 744
[data]
path = /home/samba/data
browseable = yes
guest ok = yes
writeable = yes
create mask = 744
directory mask
与create mask 相同, 八进制数, 每个数 3-bit 代表一组权限[rwx], 整个mask 代表 smb 客户端在创建目录时可以设置哪些bit.
默认是0744, 对应 [--- rwx r-- r--], 允许所有用户读, 但是只允许所有者自己浏览和修改. 建议改为 0750, [--- rwx r-x ---], 避免所有人可以访问
下面的例子中, 从客户端创建的目录, 最大权限为 755
[data]
path = /home/samba/data
browseable = yes
guest ok = yes
writeable = yes
directory mask = 755
force create mode 这个配置项用于 当文件权限发生变化时强制设置的权限位. 常用于设置文件默认的组权限. 这个配置也可以用于设置 DOS 属性: archive (0100), system (0010), or hidden (0001).
TIP
有些windows应用保存文件时, 会创建一个带.bak后缀的文件, 当这些文件在samba共享目录下时, 所有者不一定是当前用户, 为了让当前用户还可以编辑修改, 可以设置 force create mode = 0660 , 这样可以保证新文件也可以被同组用户编辑.
force directory mode
这个配置项用于 当目录权限发生变化时强制设置的权限位. 常用于设置组权限, 默认为 0000.
force group
这个配置用于给所有连接上的客户端, 只要客户端成功通过验证, 都会被指定一个固定的分组. 这个分组会体现在新创建的文件和目录上.
force user
同样的, 这个配置会给连接上的验证通过的客户端, 指定一个用户, 体现在新创建的文件和目录上.
多通道配置
为了提高性能并减少延迟,可以启用 SMB 3.0 的多通道支持。在 smb.conf
文件中添加以下内容:
multichannel = yes
重启 Samba 服务使更改生效:
sudo systemctl restart smbd
性能测试
可以使用 smbtorture
或者其他的工具来测试 SMB 服务器的性能。例如:
smbtorture -Uusername -Wworkgroup //servername/myshare
此外,还可以使用 netperf
进行更详细的性能测试:
sudo apt install netperf
netperf -H <server_ip> -t SMB2-RRD
安全最佳实践
1. 加密 SMB 通信
确保在 smb.conf
中启用了 SMB 3.0,并且启用了加密选项:
client min protocol = SMB3
server min protocol = SMB3
encrypt passwords = Yes
require client encryption = Yes
2. 使用强密码策略
确保用户账户使用强密码,并定期更改密码。
3. 限制访问权限
只允许特定的用户和组访问共享资源,并使用防火墙规则限制外部访问。
**
- 审计和监控**
启用 Samba 的日志记录功能,并定期审查日志以检测潜在的安全威胁。
常见问题
无法连接到 SMB 服务器
- 检查防火墙设置,确保 SMB 通信所需的端口(TCP 139 和 445)没有被阻止。
- 确保 SMB 服务正在运行。
用户无法访问共享文件夹
- 确认用户具有正确的权限。
- 检查
smb.conf
文件中的设置是否正确。
性能不佳
- 检查服务器硬件规格是否满足需求。
- 考虑优化网络设置或增加带宽。