- 官网:https://www.samba.org/
- 官方文档:⭐️ https://wiki.samba.org/index.php/Main_Page
- 文字:
- 配置参考
⭐️Openwrt下折腾 Samba4 配置
⭐️ Linux samba的配置和使用- 配置
samba-4.12.3版本 smb.conf 配置方式
⭐️
samba-4.12.3版本 smb.conf 详细的配置内容解释
文章目录
- 安装
- 全局共享模板
- 设置 /etc/config/samba
- # 解释/etc/config/samba参数含义
- 启停
- 检察 /etc/samba/smb.conf
- samba passwd 的几种方式
- #1 smbpasswd
- #2 tdbsam(list users 功能)
- 日志
- 远程挂载
- other
sam应该是security account manager(安全账户管理)的简写。
安装
opkg update
opkg install samba36-server
全局共享模板
Samba4 版本: 4.11.6
samba启动流程
每次启动,openwrt会读取/etc/config/samba
的配置(具体看:/etc/init.d/samba4),然后将文件/etc/samba/smb.conf.template
的管道符(“|”)包围的值进行替换,然后输出为/etc/samba/smb.conf
。
samba会根据/etc/samba/smb.conf
的文件内容进行决策。
理解samba启动流程,我们找到,/etc/samba/smb.conf.template 文件才是我们应该在后台改的文件。(其他两个文件改了是不会生效的,因为1. /etc/config/samba 会随着web保存而被覆盖;2. /etc/samba/smb.conf 会随着samba重启而被覆盖)这是将从其上生成 samba 配置的文件“/etc/samba/smb.conf.template”的内容。由管道符(“|”)包围的值不应更改。它们将从“常规设置”标签中获取其值。
设置 /etc/config/samba
+ vim /etc/config/samba4
(根据需要自行配置)
config samba
option workgroup 'WORKGROUP'
option charset 'UTF-8'
option macos '0'
option autoshare '1'
option allow_legacy_protocols 'yes'
option disable_netbios '1'
option description 'Samba on OpenWRT'
config sambashare
option 'name' 'tmp'
option 'path' '/tmp'
option 'workgroup' 'WORKGROUP'
option 'description' 'OpenWrt'
option 'homes' '1'
option 'read_only' 'no'
option 'guest_ok' 'yes'
option 'create_mask' '0750'
option 'dir_mask' '0750'
option 'users' 'root
设置完此配置后,samba服务启动后在 /etc/samba/smb.conf
中会显示,其中,name是外面设备访问用的路径,path是本设备的真实路径
openwrt的配置,其实就是读写的这里了
# 解释/etc/config/samba参数含义
- dir_mask
在客户端创建的目录在服务端的权限
例子客户端
服务端
- create_mask
在客户端创建的文件在服务端的权限
(类似dir_mask) - browseable
共享的文件夹是否能被客户端看到 - guest_ok
是否允许匿名用户 - inherit_owner
上传的文件继承父目录的所有者, 而不是使用登录的账号名, 这样上传的文件的所有者都是 root 了. - force_root
服务端文件/文件夹一律用root权限创建
启停
配置完成后,启动Samba服务即可。
/etc/init.d/samba start
启动服务: service samba4 start
停止服务: service samba4 stop
重启服务: service samba4 restart
服务状态: service samba4 status
配置文件检查: testparm -v
设置开机启动:
/etc/init.d/samba enable
检察 /etc/samba/smb.conf
这个是最终有效的配置,如必要才再这里修改(不会因重启而失效)
cat /etc/samba/smb.conf
[global]
## 网络共享名称
netbios name = OpenWrt
## 绑定到的网络接口
interfaces = br-lan
## 服务描述信息
server string = Samba on OpenWrt
unix charset = UTF-8
## 工作域
workgroup = WORKGROUP
## 加载相关功能模块(用来支持APF、弥补APF协议的一些缺陷以及一些功能扩展支持)
vfs objects = catia fruit streams_xattr
## 这个选项如在某些环境下如果不指定目录权限不会被继承
fruit:nfs_aces = no
inherit permissions = yes
[TMDisk]
## 需要共享的目录所在路径 (我这里是单独一块硬盘的文件夹)
path = /mnt/sda1/TMBackup
## 设置谁可以访问这个目录,默认配置下这个用户名来自于 /etc/samba/smbpasswd 文件.
## 使用 @前缀表示哪个用户组可以访问, 多个用户或分组使用逗号(,)间隔.
valid users = timemachine,@root
## 目录是否可以写入
writable = yes
## 目录只读(与 writable 参数互斥)
read only = no
## 文件权限掩码
create mask = 0666
## 目录权限掩码
directory mask = 0755
## 这个目录在网络中是否可以被人看到;如果设置为 no 则别人不会看到,但是可以通过路径来直接访问
#browseable = no
## 继承acl 权限控制(暂时还没搞清这个参数,设置后有问题,所以注释了)
#inherit acls = yes
## 文件或目录的所有者继承;相当于你在根目录创建一个文件夹后其他人创建的目录和文件将都属于你
inherit owner = yes
## file/dir creating rules
## 这个参数相当于是给目录绑定默认分组
#force group = timemachine
## 相当于绑定默认账户(当设置参数guest ok = yes 时这两个参数可能会发挥价值)
#force user = timemachine
#fruit:nfs_aces = no
fruit:encoding = native
## 支持MAC用户对文件或目录写入元数据
fruit:metadata = stream
## 是否否决 _ AppleDouble 文件的创建(设置为 yes 那么 苹果的 timemachine 功能可能无法使用)
fruit:veto_appledouble = no
## 官方文档中说这个参数是用来设置图标的(实际好像没有效果 - -)
fruit:model = MacSamba
## 设置这个目录作为 苹果的 TimeMachine
fruit:time machine = yes
######### Dynamic written config options #########
什么图片啊,这就违规,利害了
samba passwd 的几种方式
passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam(pdbedit)和ldapsam。
#1 smbpasswd
passdb backend = smbpasswd
该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba
目录下,不过有时候要手工建立该文件。
smbpasswd -a 用户名 #添加一个samba用户
smbpasswd -d 用户名 #禁用一个samba用户
smbpasswd -e 用户名 #恢复一个samba用户
smbpasswd -x 用户名 #删除一个samba用户
执行下面的命令将root添加为共享用户,同时按照命令提示设置共享密码。
smbpasswd -a root
必须是passwd已存在的用户
useradd -M samba
#2 tdbsam(list users 功能)
passdb backend = tdbsam
该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb 用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户并由其pdbedit管理。
用户的建立可以先用mksmbpasswd建立一个smppasswd文件,然后用pdbedit将文件里的用户导入数据库。
cat /etc/passwd | mksmbpasswd > /etc/samba/smbpasswd
pdbedit命令的参数很多,我们列出几个主要的:
pdbedit -i smbpasswd:/etc/samba/smbpasswd
pdbedit -a username:新建Samba账户。
pdbedit -x username:删除Samba账户。
pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit -Lv:列出Samba用户列表的详细信息。
pdbedit -c “[D]” –u username:暂停该Samba用户的账号。
pdbedit -c “[]” –u username:恢复该Samba用户的账号。
- smbpasswd 用法
- samba passwd 的几种方式
日志
日志路径: /var/samba/samba.log
(这个路径通过配置文件中的 ”log file“ 参数来指定,默认是不存在的)
log file = /var/log/samba/log
max log size = 1024
log level = 3 passdb:5 auth:5
远程挂载
mount -t smbfs //name:password@192.168.1.123/soft /Volumes/soft
若出现错误:mount: unknown filesystem type 'smbfs'
则改为 cifs
mount -t cifs -o username='',password='' //192.168.1.1/share /mnt/share
other
openwrt samba使用的端口号:
139
445
建议不要直接修改 smb.conf 这个文件,因为每次重启服务这个文件都会被 smb.conf.template 的文件内容给覆盖掉
挂载目录文件系统问题
共享目录最好使用 Ext4 文件系统, 因为我最开始的时候文件系统用的是 NTFS,结果按照上述配置后无法进行文件写入,在 macOS 系统下会提示 “遇到意外xxxxxxx 错误码100093”。主要原因猜测可能为 samba4 对 NTFS 文件系统使用 Windows 权限控制机制(openwrt 是基于linux 的,使用的文件系统一般为 ext4 )导致权限混乱无法正常写入文件。
挂载目录的访问权限问题
如果你是像我一样将硬盘直接挂载到openwrt 的某个目录上面并直接配置samba4进行共享,那么你很有可能会遇到服务能访问但无法上传或创建文件的问题。
- 首先需要排查挂载目录的权限; 假设你的硬盘挂载目录是 /mnt/sda1 则进入到该目录下 通过 ll 命令检查 这个目录的权限(所有者、所属组、读写权限) 是否达标。如果你很懒的话可以使用命令 chmod 777 -R /mnt/sda1 直接解放这个目录及这个挂载目录下的所有子项, 这样保证我们的挂载目录权限是ok的.
- 检查 Samba4 的配置是否正确,主要配置参数如下:
writable = yes
valid users = timemachine,@root
read only = no
create mask = 0666
directory mask = 0755
inherit owner = yes
inherit permissions = Yes
guest ok = yes
guest only = yes
Win10无法访问Samba共享文件夹问题
打开文件共享
启用不安全的来宾登录
即可