samba - 基于CentOS8搭建多用户文件共享服务
在CentOS8上搭建Samba服务,配置实现多用户之间的文件共享和权限隔离。
samba - 基于CentOS8搭建多用户文件共享服务
校园网前阵子对公网流量开始5元10G按量计费了,刚好导师给了台不再使用的07年产的老联想。想起了之前在博世实习的时候,公司共享硬盘挺好用的。所以我安装了CentOS8,并部署了samba,这样就可以在校园网内相互之间共享大文件,无需借助公网,既可以节省校园网的公网流量费,而且内网传输可以做到数据保密。另外,实验室的网络是六类线(CAT6),全千兆的网速传输起来非常快(超过了一般的USB 3.0)。
本文介绍如何基于CentOS8搭建samba服务,并配置实现多用户共享,实现用户对自己目录可读可写,用户对他人目录可读不可写的权限隔离。
另外,CentOS8自带了cocopit,挺好用的Web管理平台。本文涉及的SELinux、防火墙、用户管理操作都可以用cocopit实现。
1 介绍
官方网站:Samba.org
About Samba
Samba is the standard Windows interoperability suite of programs for Linux and Unix.
Samba is Free Software licensed under the GNU General Public License, the Samba project is a member of the Software Freedom Conservancy.
Since 1992, Samba has provided secure, stable and fast file and print services for all clients using the SMB/CIFS protocol, such as all versions of DOS and Windows, OS/2, Linux and many others.
Samba is an important component to seamlessly integrate Linux/Unix Servers and Desktops into Active Directory environments. It can function both as a domain controller or as a regular domain member.
2 安装
2.1 yum安装
首先,安装samba:
1 | sudo yum install samba |
2.2 systemctl启用
安装完成后,设置samba为启用(enable),这样samba就可以开机自启动:
1 | sudo systemctl enable smb |
- samba的服务名为
smb
3 配置
3.1 防火墙
安装完成后,需要为samba服务打开防火墙。
CentOS8采用的不再是iptables
,而是firewall
。
3.1.1 检视防火墙规则
可以查看samba服务对应的防火墙信息:
1 | sudo firewall-cmd --info-service samba |
显示形如:
1 | samba |
3.1.2 防火墙放通服务
确认信息后,在防火墙中放通samba服务:
1 | sudo firewall-cmd --permanent --add-service=samba |
3.1.3 重新加载防火墙
设置为--permanent
后,需要重新载入防火墙,使配置生效:
1 | sudo firewall-cmd --reload |
3.1.4 检视防火墙设置结果
重新载入完成后,可以检视防火墙是否已加入samba服务:
1 | sudo firewall-cmd --list-services |
显示形如:
1 | cockpit dhcpv6-client http samba ssh |
- 包含samba
3.2 配置samba
对samba的配置文件进行设置,配置文件位于/etc/samba/smb.conf
。
1 | cd /etc/samba/ |
3.2.1 备份原始配置文件
首先,备份原始配置文件以便恢复:
1 | sudo cp smb.conf smb.conf.bkup |
3.2.2 修改配置文件
随后,修改配置文件:
1 | sudo vim smb.conf |
我增加了一个名为Share的section,且设置为可读、可浏览、可写,这意味着每个用户登陆后都会看到一个名为Share的文件夹:
1 | [Share] |
修改后完整的配置文件如下,供参考:
1 | # See smb.conf.example for a more detailed config file or |
3.2.3 重启samba服务
修改完成后,为使配置文件生效,需要重启samba服务:
1 | sudo systemctl restart smb |
或
1 | sudo service smb restart |
3.3 存储目录
因为Linux的权限管理中,出于安全考虑,每个用户的目录是无法被其它用户读取的,只有用户自己的rwx
权限,而因为硬盘挂载的原因,/home
目录是独立挂载分区的,容量大,而诸如/var
这类公共目录都挂载在/
根目录下,容量仅50GB。
因此,为了实现多用户的共享,且充分利用硬盘空间,我的方案是创建一个公共用户samba
用于存储共享目录:
1 | sudo adduser samba |
为了共享,需要使samba目录能够被其它用户浏览,需要添加权限:
1 | sudo chmod 755 /home/samba |
在samba
的目录/home/samba
下,建立公共的共享目录/home/samba/share
,并确保其权限被其他用户可读:
1 | sudo mkdir /home/samba/share |
注意:因为目录在/home
下,SELinux有严格的权限控制,会拦截访问,我就采取简单的做法,关闭SELinux。
当然,也可以对SELinux进行配置,参考:How to install and configure samba on RHEL 8 / CentOS 8
4 多用户
samba的多用户基于Linux的用户,因此,首先需要创建Linux用户。
4.1 创建Linux用户
通过adduser
创建Linux用户,如mike
:
1 | sudo adduser mike |
如果不打算给用户私有目录和登陆权限,可以使用:
1 | sudo adduser -M mike -s /sbin/nologin |
-M
表示--no-create-home
-s /sbin/nologin
无登陆权限
4.2 加入samba用户
随后,把Linux用户mike
加入samba用户,并初始化设置密码:
1 | sudo smbpasswd -a mike |
-a
权限表示把用户加入到samba用户列表中。
4.3 创建用户共享目录
在3.3节介绍的/home/samba/share
目录中,创建用户目录,如mike
:
1 | cd /home/samba/share |
- 把用户共享目录的所属用户/组都交给用户,这样可以实现其他用户可读不可写,用户自己可读可写的权限隔离。
4.4 查看所有samba用户
pdbedit - manage the SAM database (Database of Samba Users)
通过pdbedit命令可以管理samba用户的数据库,当然也就可以查看samba用户。
1 | sudo pdbedit -L |
-L
与--list
相同,表示列出全部用户。
4.5 删除samba用户
按照创建时的操作,将Linux用户mike
从samba用户列表中删除:
1 | sudo smbpasswd -x mike |
-x
表示删除本地samba用户表中的用户。
删除Linux用户的操作按操作系统提供的命令(如:userdel
)或其他管理方式即可,此处不再赘述。