架一个samba服务器的事,曾经干过多次。
每次都要折腾半天,因为上次折腾过的东西又忘了……
但唯一没忘的是,每次都要小心翼翼,生怕把服务器搞坏了,因为东改西改的,又是添用户,又是改服务,特别担心影响到服务器的安全和稳定。

现在又要架了,可是有了docker,再也不怕搞坏服务器了!
全都在容器里折腾,搞错了,大不了把容器删了重来,甚至连数据都不会损失(都存在主机目录上)。

使用hub上评分最高的这个镜像:

https://github.com/dperson/samba

秒下载运行,虽然简便,却也碰到几个问题,这次要记下来,再也别忘了:

一、客户端要配置使用smb3协议

/etc/samba/smb.conf里:

1
client max protocol = smb3

二、samba user都是真正的os user

可以没有home目录,但是必须在系统里挂个号。
原因嘛:还是为了权限控制,就是说在samba权限之外(如果漏网了),还有os权限兜底!详情见下。

三、samba权限之外,还要看os权限够不够!

在这个docker环境下尤其重要,因为所有的进程和目录都是以root身份创建的,所以其它用户根本没法写,即使按smb.conf里的要求使用了

1
2
read only = no
write list = user

也没用,因为对应的目录在os这一层根本没权限写!
为什么我敢肯定是这样?因为我又attach到容器里去,用chmod o+w给共享目录加了权限之后,就能写了啊!!
但是进容器去改东西毕竟还是太麻烦,直接把user添到admin users里去就行了,这也算是合理利用smb.conf的规则了……
对该image来说,也就是把参数设成:

1
-s "private1;/example1;yes;no;yes;user1;user1;user1;howtowrite"

即所有用户位都设上!能读能控能写!

==2020.2.9更新===
注:以上问题也可过设置-p来解决:

The -p option to the container will attempt to set the permissions to be available to the users.

================

顺带记一下smb.conf参考大全:

https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

查看有哪些共享目录:

smbclient -L 192.168.1.22 -m smb3

连接到共享并进入交互式shell:

smbclient //192.168.1.22/private1 -m smb3 -U example2 //-c “ls”
在后面加-c可以不进入shell直接执行命令


==2020.2.9补充===

四、如果发现samba服务不稳定,连接时灵时不灵,去检查是否启动了两个server!

最近发现家里电视连samba莫名出问题,有时点进去不显示目录,退出重进几次又显示了。
原本以为是网络不稳定,换wifi、换有线折腾之后,感觉问题还是存在。
于是直接上server本机用smb命令行操作测试,竟然也有问题,于是确认非网络问题。
经过一顿操作,终于发现是因为本机启了两个samba服务,
一个是基于docker的,一个是apt安装的本机服务。
因为监听同一端口,会导致随机服务请求,当被那个未配置过的本机服务抢占时,自然就看不到目录了。😂