基于 CentOS 7.6 + Samba 搭建文件服务器
出于产品、解决方案同事的诉求,需要搭建一个用于共享文件的平台,因此基于 Samba 搭建了一个共享文件服务器,这里记录一下,以便用于后续维护参阅。
Samba 是 SMB/CIFS 网络文件共享协议的免费开放源重新实现,该协议允许最终用户访问文件,打印机和其他共享资源。
环境
- CentOS 7.6
- Samba 4.10.16
- 能够访问互联网环境
安装 Samba
执行安装
1 | sudo yum install samba samba-client |
安装完成后,开机启动,并且启用服务:
1 | sudo systemctl start smb.service |
smb
服务提供文件共享和打印服务,并侦听 TCP 端口 139 和 445。nmb
服务向客户端提供基于 IP 命名服务的 NetBIOS,并侦听 UDP 端口137。
配置防火墙
执行如下命令,允许 samba 服务访问
1 | [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=samba |
创建Samba用户和目录结构
在确定文件或者用户目录之前要看下磁盘的空间情况
1 | /dev/mapper/centos-root 50G 1.4G 49G 3% / |
我的系统在 /home 分配的空间最大,因此这里将所有 Samba 目录和数据都放在 /home 空间下;新建一个 /home/samba
1 | mkdir /home/samba |
创建一个名为sambashare
的新组。然后,我们将所有 Samba 用户添加到该组中。
1 | sudo groupadd sambashare |
将/home/samba
目录组所有权设置为sambashare
:
1 | do chgrp sambashare /home/samba |
Samba 使用 Linux 用户和组权限系统,但它具有与标准 Linux 身份验证分开的身份验证机制。下面将使用标准的 Linux useradd
工具创建用户,然后使用smbpasswd
实用程序设置用户密码。
创建 Samba 用户
创建名为glmapper
的新用户,命令如下:
1 | sudo useradd -M -d /home/samba/glmapper -s /usr/sbin/nologin -G sambashare glmapper |
useradd
选项的含义如下:
-M
不创建用户的主目录。(将手动创建此目录)-d /home/samba/glmapper
将用户的主目录设置为/home/samba/glmapper
。-s /usr/sbin/nologin
禁止该用户访问 shell。-G sambashare
将用户添加到sambashare
组。
创建用户的主目录,并将目录所有权设置为用户 glmapper 和组 sambashare:
1 | sudo mkdir /home/samba/glmapper |
以下命令将 setgid 位添加到/home/samba/glmapper
目录,以便该目录中的新创建文件将继承父目录的组。这样,无论哪个用户创建一个新文件,该文件都将具有sambashare
的组所有者。例如,如果您未将目录的权限设置为2770
,并且sadmin
用户创建了一个新文件,则用户glmapper
将无法读取/写入该文件。 165]
1 | sudo chmod 2770 /home/samba/glmapper |
设置用户密码将glmapper
用户帐户添加到 Samba 数据库:
1 | #系统将提示输入并确认用户密码。 |
如果再需要创建其他用户,流程就是和创建 glmapper 的流程是一样的了。
创建 用户和组 sadmin
sadmin 组的所有成员将具有管理权限,如果期望其他用户也具备管理权限,则可以将用户加入到 sadmin 这个组中。创建管理用户:
1 | sudo useradd -M -d /home/samba/users -s /usr/sbin/nologin -G sambashare sadmin |
上面的命令还创建了一个组sadmin
,并将用户添加到sadmin
和sambashare
组中。
设置密码并启用用户:
1 | # 设置密码 |
创建Users
共享目录
1 | # 创建目录 |
所有身份验证的用户都可以访问此目录。以下命令配置对/home/samba/users
目录中sambashare
组成员的写/读访问:
1 | sudo chmod 2770 /home/samba/users |
配置 Samba 共享
编辑 Samba 配置文件 vi /etc/samba/smb.conf
,并将下面的配置添加到配置文件中
1 | [users] # 登录时将使用的共享名称 |
配置完成后,重新启动 Samba 服务
1 | sudo systemctl restart smb.service |
使用 win 配置连接到 Samba 共享
下面是使用 Windows File Explore 访问共享的步骤:
- 1、打开文件管理器,右击 “此电脑”
- 2、选择 “添加一个网络位置”,然后点击下一步
- 3、在 “Internet 或者网络地址” 中,输入 Samba 共享的地址
\\192.168.1.136\glmapper
(192.168.1.136 是我的主机 IP,glmapper 是我的共享目录) - 4、单机下一步,这里会提示你输入登录凭证(然后输入前面创建用户所设置的用户名和密码即可)
- 5、下一步… 完成
至此就可以在本地磁盘看到映射的服务器了。
问题
在配置完成之后,可以正常连接到文件服务器,并且也可以看到相应的目录,但是当我创建文件时,提示没有权限。从前面的用户/组授权来看,完全是没有问题的。最后咨询了下 IT 部门的同事,猜测可能是 SELinux 禁止网络上对 Samba 服务器上的共享目录进行写操作导致;尝试执行 setenforce 0
之后无写权限的问题解决了。
SELinux 的作用:
- 1、通过对进程和文件资源采用 MAC 控制方式,为 Linux 系统提供了改进的安全性;
- 2、赋予了主体最小的访问特权,最大限度地减小系统中服务进程可访问的资源,可以防止主体对其他用户或进程产生不利的影响;
- 3、每个进程都有自己的运行区域,各进程仅运行在自己的域内,无法访问其他进程和文件;
- 4、SELinux 能最大程序上限制 Linux 系统中的恶意代码活动。
setenforce 设置
- 1 设置 SELinux 成为 enforcing 模式
- 0 设置 SELinux 成为 permissive 模式
基于 CentOS 7.6 + Samba 搭建文件服务器
http://www.glmapper.com/2023/05/31/tools/tool-samba-file-server/