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
2
3
4
5
6
samba
ports: 137/udp 138/udp 139/tcp 445/tcp
protocols:
source-ports:
modules: netbios-ns
destination:

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
2
3
4
5
6
7
[Share]
comment = Share (read-and-write for own, read-only for others)
path = /home/samba/share/
writable = yes
browseable = yes
public = yes

修改后完整的配置文件如下,供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

[global]
workgroup = WORKGROUP
security = user

passdb backend = tdbsam

printing = cups
printcap name = cups
load printers = yes
cups options = raw

[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes

[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No

[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775

[Share]
comment = Share (read-and-write for own, read-only for others)
path = /home/samba/share/
writable = yes
browseable = yes
public = yes

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
2
sudo mkdir /home/samba/share
sudo chmod 755 /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
2
3
cd /home/samba/share
sudo mkdir mike
sudo chown -Rf mike:mike mike/
  • 把用户共享目录的所属用户/组都交给用户,这样可以实现其他用户可读不可写,用户自己可读可写的权限隔离。

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)或其他管理方式即可,此处不再赘述。

5 参考资料

How to install and configure samba on RHEL 8 / CentOS 8