1.1 任务概述
1.1.1 业务场景
在局域网中,经常需要有一些部门和群组的公共文件需要共享给大家内部访问。在原来Windows环境中,常采用网络邻居的共享。在有Linux服务器的环境下,可以在服务器部署samba服务器,实现部门资料共享,开放给部门使用Windows或Linux的客户端设备访问。
图 windows的网络邻居
1.1.2 教学目标
要在CentOS 7上安装Samba服务器,将某个本地目录下的文件设置为某个范围共享,供局域网内的授权的主机客户端访问。主要解释解决以下问题。
- 了解SMB协议在局域网内文件共享中原理过程
- 理解Samba配置文件的主要配置项的设置的作用
- 能正确安装Samba和samba-client
-
1.1.3 组织评价
可以独立或结对完成,随机分组抽检
- 能完成yum软件仓库的配置和检测,截图
- 能正确安装并检测
- 实现基本的配置,可以通过Windows或Linux客户端匿名访问。
1.2 知识导学
1.2.1 SMB服务
SMB(全称是Server Message Block)是一个协议名,作为一种局域网文件共享传输协议通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,后由微软进行了重大更改和逐步完善。Microsoft 提供了面向Internet的 SMB 的开源版本,即通用 Internet 文件系统 (CIFS)。
1.2.2 Linux下的软件
需要安装的几个软件包说明
- samba 是服务器包,要先安装部署好服务器应用,才能配置共享给其他客户端访问。如果没能正确安装,以下依赖安装的工具也就不会安装
- 如smbpasswd
- 如pdbedit 等
- samba-client 和 cifs-utils 是Linux上的smb客户端软件。
1.2.3 samba的主配置文件
正确安装samba后,会在/etc/samba/
目录下找到配置文件smb.conf 和配置样例文件smb.conf.example
先重点看下 smb.conf
一、注释部分
用#
或;
开头的行,被当作注释,不用生效。
开头的几句注释,是注意事项,主要含义是
- smb.conf.example文件中有更详细的配置说明
- 也可以读 smb.conf的帮助手册
- 修改配置文件后要用
testparm
命令校验下,对照建议修改。
二、global 区块section
[global] 是section名,是全局生效的设定。具体字段说明
workgroup = WORKGROUP
, 工作组名。- Windows电脑默认工作组: WorkGroup
- 在访问链接
\\192.168.X.y\
,会默认显示同一工作组内主机设备的共享资源。
security = user
, 服务器访问验证的方式。默认是user
passdb backend = tdbsam
, samba访问用户信息保存的本地文件/var/lib/samba/passdb.tdb。可以使用smbpasswd -a xxx
来添加samb用户,samba用户首先要是Linux本地帐户。map to guest = bad user
, 将所有samba服务应用所不能正确识别的用户都映射成guest用户**guest account = nobody**
,用于设置samba服务器用guest用户登录时,所对应的Linux系统用户名。默认为nobody用户
三、其他具体分区配置
可以自定义分区名,如[public]分区,可以通过192.168.x.y\public
来访问。
部分常用字段举例,更详细可参考 smb.conf.example
comment = XXX XXX
, 是备注说明,每个共享名分区都要设置。尽可能能清晰易懂。path = /XXX/YYY
, 是Linux上真实的绝对路径,里面保存来共享的文件资料。read only = No | Yes
, 对授权用户是只读还是读写? 相当于writable = Yes | No
public = Yes
, 该共享资源是否能给游客帐号访问,或匿名访问,等同guest ok = Yes
valid users = user,@group
, 授权的用户和组write list = user,@group
, 可写权限的用户和组,白名单browseable = No
,是否显示在网上邻居中create mode = 0664
, 新建立的文件的属性directory mode = 0775
指明新建立的目录的属性1.3 业务配置
1.3.1 部署软件环境
1.3.1.1 准备yum软件仓库
具体参考 模块6的任务1。https://www.yuque.com/miaozhifeng/rrlilp/kw46ip
1.3.1.2 安装samba软件
检查samba是否安装
yum list installed | grep samba
,如果有返回的samba.x86_64
,则安装成功。如果没有,则需要安装。安装
[root@w ~]# yum install samba -y
1.3.1.3 安装samba客户端
在Linux上可选安装客户端, 用来后续测试
先验证,再安装
- 安装
yum install samba-client cifs-utils
1.3.2 子任务:实现共享匿名访问
1.3.2.1 任务描述
公司服务器中有个目录/var/pub目录,需要发布为samba的共享目录,共享地址名为 \192.168.x.y\public, 要求允许浏览,允许只读,允许匿名访问。1.3.2.2 任务分析
一是本地目录和用户权限的创建和设置,考虑目录权限,其他用户权限至少是 r-x
二是配置文件中,涉及public
配置项1.3.2.3 任务实施
一、创建共享目录并修改权限[root@w ~]# mkdir -p /var/pub
[root@w ~]# ll -d /var/pub ## ls -dl / 显示目录和文件本身的属性,不显示内部
drwxr-xr-x 2 root root 6 X月 Y 21:30 /var/pub/ ## other用户对应权限 r-x,不用修改
[root@w ~]# echo 122 > /var/pub/a1
二、检查Samba的匿名帐户guest。 【选做步骤】
samba匿名访问帐户是guest是否存在
- guest帐号默认对应的Linux本地用户是nobody。
- 在/etc/passwd用户文件中,检查确定nobody用户是否存在。
[root@w ~]# cat /etc/passwd | grep nobody ## 查看结果是存在的。
nobody:x:99:99:Nobody:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
三、备份配置文件
注意,如果不是第一次配置,目录内的文件可以有所差异。 但这三个文件原则上应该都在。
[root@w ~]# cd /etc/samba/ && ll ## 切换目录,并列表显示。
-rw-r--r-- 1 root root 20 5月 17 05:55 lmhosts
-rw-r--r-- 1 root root 892 5月 28 17:35 smb.conf ## 主配置文件
-rw-r--r--. 1 root root 11327 4月 22 06:25 smb.conf.example
[root@w samba]# cp smb.conf smb.conf.bak ## 备份主配置文件
四、修改配置文件
[root@w samba]# vim smb.conf ## 省略不相关部分,修改后,保存退出
[global]
workgroup = WORKGROUP # 修改为Windows默认的工作组
server string = File Server
security = user
passdb backend = tdbsam
map to guest = bad user ## 确保该项存在
[public] ## 新增部分
comment = Public
path = /var/pub
guest ok = Yes
;browseable = Yes ## 默认,可以不写
;read only = yes ## guest ok =yes, 本项可不写
[root@w samba]# testparm # 校验配置文件是否正确。
五、启动服务,使配置生效
[root@w ~]# systemctl status smb ## 查看smb服务器运行状态
[root@w ~]# systemctl start smb
六、设置防火墙,放行samba服务
[root@w ~]# firewall-cmd --list-all
public (active)
target: default
services: dhcpv6-client ssh [samba]
[root@w ~]# firewall-cmd --permanent --add-service=samba
[root@w ~]# firewall-cmd --reload # 重新加载配置生效
[root@w ~]# setenforce 0
七、 验证是否可以匿名访问
Linux SMBClient 测试
smbclient //192.168.10.1/sales -U sale2%12345678
1.3.3 子任务:实现指定范围用户和组群访问
1.3.3.1 任务描述
如果公司有多个部门,因工作需要,就必须分门别类地建立相应部门的目录。要求将销售部的资料存放在Samba服务器的/companydata/sales/目录下集中管理,以便销售人员浏览,并且该目录只允许销售部员工访问。
1.3.3.2 任务分析
不同于上个子任务,目录仅在一定范围的群组内共享访问。操作思路流程如下:
- 在Linux上创建要共享的目录和文件资料
- 创建群组和用户,添加成为samba共享用户
- 修改和确认新增的用户、群组对共享目录的权限。
- 修改配置smb.conf主配置文件,重点是共享section和配置项
- 重启服务,放开防火墙
1.3.3.3 任务实施
一、创建本地共享目录和文件
[root@w ~]# mkdir -p /companydata/sales
## 递归修改共享目录的访问权限
[root@w ~]# chmod 777 /companydata/sales -R
[root@w ~]# echo 123 > /companydata/sales/abc
二、创建访问的群组和用户
创建sale1/ sale2用户,是普通可登录用户。
[root@w ~]# groupadd sales
[root@w ~]# useradd -g sales sale1
[root@w ~]# useradd -g sales sale2
[root@w ~]# passwd sale1
[root@w ~]# passwd sale2
## 将创建的Linux本地用户,添加到 samba用户数据库文件
[root@w ~]# smbpasswd -a sale1
[root@w ~]# smbpasswd -a sale2
[root@w ~]# pdbedit -L # 验证是否添加到samba db
如果sales组在增加2个用户sale3/sale4不用本地登录,只是用来访问Samba,则在添加用户时,设置shell不登录,也就不用设置本地密码。
只列变更的部分。
[root@w ~]# useradd -g sales -s /sbin/nologin sale3 ## 不能登录,不用设置本地密码
[root@w ~]# useradd -g sales -s /sbin/nologin sale4 ## 同上
[root@w ~]# smbpasswd -a sale1 ## 但有设置samba访问时密码
[root@w ~]# smbpasswd -a sale2 ## 同上
三、修改主配置文件
[root@w ~]# cd /etc/samba
[root@w samba]# cp smb.conf smb.conf.bak
[root@w samba]# vim smb.conf
''' 将下面共享分区的内容添加
[sales]
comment = sales
path = /companydata/sales
read only = No
browseable = yes
valid users = @sales
'''
[root@w samba]# testparm
四、启动或重启smb服务进程
[root@w ~]# systemctl status smb ## status 查询进程运行状态的
[root@w ~]# systemctl start smb ## 如果没有启动,启动start
[root@w ~]# systemctl restart smb ## 如果正在运行,则重启 restart
五、防火墙放行 [配置过可省略]
[root@w ~]# firewall-cmd --perm --add-service=samba ## 新增规则
[root@w ~]# firewall-cmd --reload #重新加载,使得新规则生效
[root@w ~]# setenforce 0 # selinux的检查宽松状态。
六、「扩展 可选」关闭selinux和防火墙
[root@w ~]# systemctl stop firewalld #关闭防火墙
## 如何关闭selinux, 需要进到它的配置文件
[root@w ~]# cd /etc/selinux
[root@w ~]# vim config