让我们一起搭建samba服务,共享文件不再痛苦
Posted Richard_LiuJH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让我们一起搭建samba服务,共享文件不再痛苦相关的知识,希望对你有一定的参考价值。
目录
日常工作中难免要和别人分享文件,现在“云端产品”的功能也非常丰富,价格也是非常感人的。针对局域网的环境,我们完全可以搭建一个小型的文件共享服务。samba是一个非常好的选择。
其实搭建samba的过程很简单,也有非常多的资料介绍。借助docker可以分分钟完成一个samba服务的搭建,所以本文是在巨人的肩膀上完成的。但网上几乎是千篇一律的过程,对于其中的配置参数反而会让人摸不着头脑。不如先从整体上了解samba的功能,然后根据需求来实现我们的搭建过程。
搭建samba需求分析
上图是我们搭建samba服务的大体框架,在samba服务中可以配置用户的访问权限。用户user1 和user2 访问自己的网络文件夹。其中samba服务需要使用系统端口139和445,139端口主要是SMB运行NBT(NetBios over TCP/IP)上使用,445是win2000后SMB直接在tcp/ip上使用的端口。所以没有特殊的NBT层,可以只使用445端口。
我们将需求简化成以下四点
1. 找一个Linux系统,搭建samba 服务
2. 配置共享文件夹的权限
3. 用户user1, user2 如何访问访问
4. 维护(更新配置、新增用户、修改密码等等)
开始搭建
根据需求,按照他们之间的逻辑关系绘制下图
使用docke
r搭建samba服务
1. 在docker hub上下载最受欢迎的dperson/samba镜像Docker Hubhttps://registry.hub.docker.com/r/dperson/samba
下载dperson/samba镜像
docker pull dperson/samba
2. 配置
在官方页面中,对配置进行了详细的介绍
sudo docker run -it --rm dperson/samba -h
Usage: samba.sh [-opt] [command]
Options (fields in '[]' are optional, '<>' are required):
-h This help
-c "<from:to>" setup character mapping for file/directory names
required arg: "<from:to>" character mappings separated by ','
-G "<section;parameter>" Provide generic section option for smb.conf
required arg: "<section>" - IE: "share"
required arg: "<parameter>" - IE: "log level = 2"
-g "<parameter>" Provide global option for smb.conf
required arg: "<parameter>" - IE: "log level = 2"
-i "<path>" Import smbpassword
required arg: "<path>" - full file path in container
-n Start the 'nmbd' daemon to advertise the shares
-p Set ownership and permissions on the shares
-r Disable recycle bin for shares
-S Disable SMB2 minimum version
-s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]"
Configure a share
required arg: "<name>;</path>"
<name> is how it's called for clients
<path> path to share
NOTE: for the default values, just leave blank
[browsable] default:'yes' or 'no'
[readonly] default:'yes' or 'no'
[guest] allowed default:'yes' or 'no'
NOTE: for user lists below, usernames are separated by ','
[users] allowed default:'all' or list of allowed users
[admins] allowed default:'none' or list of admin users
[writelist] list of users that can write to a RO share
[comment] description of share
-u "<username;password>[;ID;group;GID]" Add a user
required arg: "<username>;<passwd>"
<username> for user
<password> for user
[ID] for user
[group] for user
[GID] for group
-w "<workgroup>" Configure the workgroup (domain) samba should use
required arg: "<workgroup>"
<workgroup> for samba
-W Allow access wide symbolic links
-I Add an include option at the end of the smb.conf
required arg: "<include file path>"
<include file path> in the container, e.g. a bind mount
The 'command' (if provided and valid) will be run instead of samba
这么多配置参数,第一眼看上去肯定不知从何下手。所有先整理一下配置参数和我们需求的对应关系,如下图
docker中常见的启动参数就不介绍了,主要是看samba启动时配置的 -p -u 和 -s。如果需要进行权限管理,那么就需要加上-p,否则默认是全公开的访问。那么-u和-s就是对用户以及共享文件的管理参数设置了。
权限配置
-
-u 新增用户 user1 user2
-
-s 配置文件夹和访问权限
-s 参数看起来复杂,其实就是个填空题。按照需求填写即可,只需每项中间加分号。
例如:
启动samba服务
我们可以直接通过docker run 来启动容器
sudo docker run -it -p 139:139 -p 445:445 \\
-v /path/to/directory:/share \\
-d dperson/samba -p \\
-u "user1;badpass" \\
-u "user2;badpass" \\
-s "public;/share/public" \\
-s "share_1_2;/share/dir_1_2;yes;no;no;user1,user2;admin;admin;user1与user2专用" \\
-s "share1;/share/dir1;yes;no;no;user1;admin;admin;user1专用" \\
-s "share2;/share/dir2;no;no;no;user2;admin;admin;user2专用"
同时也可以使用docker-compose 的compose.yml配置文件
version: '3.1'
services:
samba:
image: dperson/samba
restart: always
container_name: samba
ports:
- 139:139
- 445:445
volumes:
- /path/to/directory:/share
command: '-p
-u "user1;badpass"
-u "user2;badpass"
-s "share_1_2;/share/dir_1_2;yes;no;no;user1,user2;admin;admin;user1与user2专用"
-s "share1;/share/dir1;yes;no;no;user1;admin;admin;user1专用"
-s "share2;/share/dir2;no;no;no;user2;admin;admin;user2专用"'
执行docker-compose up即可
访问
在windows中,win+R调出运行页面,输入 \\\\your-ip\\share1 即可访问对应的共享文件。例如下图
samba服务维护
常用docker命令
- 查看日志 docker logs samba
- 进入docker终端交互 docker exec -it samba /bin/bash
更改配置文件 /etc/samba/sms.conf
通过docker exec -it samba /bin/bash进入 交互模式,打开配置文件/etc/samba/sms.conf
配置完成后重启容器 docker restart ID
使用smbpasswd (进入samba终端)
- 添加用户 sudo smbpasswd -a username
- 删除用户 sudo smbpasswd -x username
- 冻结用户 sudo smbpasswd -d username
- 解冻用户 sudo smbpasswd -e username
- 更改密码 sudo smbpasswd username
- 密码置空 sudo smbpasswd -n username
其他问题
如果由于之前连接samba导致访问失败,可以尝试断开所有的smba连接,在cmd终端中输入下面命令即可
net use * /del /y
以上是关于让我们一起搭建samba服务,共享文件不再痛苦的主要内容,如果未能解决你的问题,请参考以下文章