1.1 任务概述

1.1.1 业务场景

在局域网中,经常需要有一些部门和群组的公共文件需要共享给大家内部访问。在原来Windows环境中,常采用网络邻居的共享。在有Linux服务器的环境下,可以在服务器部署samba服务器,实现部门资料共享,开放给部门使用Windows或Linux的客户端设备访问。
image.png
图 windows的网络邻居

1.1.2 教学目标

要在CentOS 7上安装Samba服务器,将某个本地目录下的文件设置为某个范围共享,供局域网内的授权的主机客户端访问。主要解释解决以下问题。

  1. 了解SMB协议在局域网内文件共享中原理过程
  2. 理解Samba配置文件的主要配置项的设置的作用
  3. 能正确安装Samba和samba-client
  4. 掌握常用的Samba的配置文件,实现基本的开放共享

    1.1.3 组织评价

  5. 可以独立或结对完成,随机分组抽检

  6. 能完成yum软件仓库的配置和检测,截图
  7. 能正确安装并检测
  8. 实现基本的配置,可以通过Windows或Linux客户端匿名访问。

    1.2 知识导学

    1.2.1 SMB服务

    SMB(全称是Server Message Block)是一个协议名,作为一种局域网文件共享传输协议通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,后由微软进行了重大更改和逐步完善。Microsoft 提供了面向Internet的 SMB 的开源版本,即通用 Internet 文件系统 (CIFS)。

任务1 Samba软件安装和公共访问设置 - 图2

1.2.2 Linux下的软件

需要安装的几个软件包说明

  1. samba 是服务器包,要先安装部署好服务器应用,才能配置共享给其他客户端访问。如果没能正确安装,以下依赖安装的工具也就不会安装
    1. 如smbpasswd
    2. 如pdbedit 等
  2. samba-client 和 cifs-utils 是Linux上的smb客户端软件。

    1.2.3 samba的主配置文件

    正确安装samba后,会在/etc/samba/目录下找到配置文件smb.conf 和配置样例文件smb.conf.example
    先重点看下 smb.conf
    image.pngimage.png

一、注释部分
#;开头的行,被当作注释,不用生效。
开头的几句注释,是注意事项,主要含义是

  1. smb.conf.example文件中有更详细的配置说明
  2. 也可以读 smb.conf的帮助手册
  3. 修改配置文件后要用testparm命令校验下,对照建议修改。

二、global 区块section
[global] 是section名,是全局生效的设定。具体字段说明

  1. workgroup = WORKGROUP, 工作组名。
    1. Windows电脑默认工作组: WorkGroup
    2. 在访问链接 \\192.168.X.y\,会默认显示同一工作组内主机设备的共享资源。
  2. security = user, 服务器访问验证的方式。默认是user
  3. passdb backend = tdbsam, samba访问用户信息保存的本地文件/var/lib/samba/passdb.tdb。可以使用smbpasswd -a xxx来添加samb用户,samba用户首先要是Linux本地帐户。
  4. map to guest = bad user, 将所有samba服务应用所不能正确识别的用户都映射成guest用户
  5. **guest account = nobody**,用于设置samba服务器用guest用户登录时,所对应的Linux系统用户名。默认为nobody用户

三、其他具体分区配置
可以自定义分区名,如[public]分区,可以通过192.168.x.y\public来访问。
部分常用字段举例,更详细可参考 smb.conf.example

  1. comment = XXX XXX, 是备注说明,每个共享名分区都要设置。尽可能能清晰易懂。
  2. path = /XXX/YYY, 是Linux上真实的绝对路径,里面保存来共享的文件资料。
  3. read only = No | Yes, 对授权用户是只读还是读写? 相当于writable = Yes | No
  4. public = Yes, 该共享资源是否能给游客帐号访问,或匿名访问,等同guest ok = Yes
  5. valid users = user,@group, 授权的用户和组
  6. write list = user,@group, 可写权限的用户和组,白名单
  7. browseable = No ,是否显示在网上邻居中
  8. create mode = 0664 , 新建立的文件的属性
  9. 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软件

  10. 检查samba是否安装 yum list installed | grep samba,如果有返回的samba.x86_64,则安装成功。如果没有,则需要安装。

  11. 安装[root@w ~]# yum install samba -y

    1.3.1.3 安装samba客户端

    在Linux上可选安装客户端, 用来后续测试

  12. 先验证,再安装

  13. 安装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 任务实施

    一、创建共享目录并修改权限
    1. [root@w ~]# mkdir -p /var/pub
    2. [root@w ~]# ll -d /var/pub ## ls -dl / 显示目录和文件本身的属性,不显示内部
    3. drwxr-xr-x 2 root root 6 X Y 21:30 /var/pub/ ## other用户对应权限 r-x,不用修改
    4. [root@w ~]# echo 122 > /var/pub/a1

二、检查Samba的匿名帐户guest。 【选做步骤】
samba匿名访问帐户是guest是否存在

  1. guest帐号默认对应的Linux本地用户是nobody。
  2. 在/etc/passwd用户文件中,检查确定nobody用户是否存在。
    1. [root@w ~]# cat /etc/passwd | grep nobody ## 查看结果是存在的。
    2. nobody:x:99:99:Nobody:/:/sbin/nologin
    3. nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

三、备份配置文件
注意,如果不是第一次配置,目录内的文件可以有所差异。 但这三个文件原则上应该都在。

  1. [root@w ~]# cd /etc/samba/ && ll ## 切换目录,并列表显示。
  2. -rw-r--r-- 1 root root 20 5 17 05:55 lmhosts
  3. -rw-r--r-- 1 root root 892 5 28 17:35 smb.conf ## 主配置文件
  4. -rw-r--r--. 1 root root 11327 4 22 06:25 smb.conf.example
  5. [root@w samba]# cp smb.conf smb.conf.bak ## 备份主配置文件

四、修改配置文件

  1. [root@w samba]# vim smb.conf ## 省略不相关部分,修改后,保存退出
  2. [global]
  3. workgroup = WORKGROUP # 修改为Windows默认的工作组
  4. server string = File Server
  5. security = user
  6. passdb backend = tdbsam
  7. map to guest = bad user ## 确保该项存在
  8. [public] ## 新增部分
  9. comment = Public
  10. path = /var/pub
  11. guest ok = Yes
  12. ;browseable = Yes ## 默认,可以不写
  13. ;read only = yes ## guest ok =yes, 本项可不写
  14. [root@w samba]# testparm # 校验配置文件是否正确。

五、启动服务,使配置生效

  1. [root@w ~]# systemctl status smb ## 查看smb服务器运行状态
  2. [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

七、 验证是否可以匿名访问
image.png

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 任务分析

不同于上个子任务,目录仅在一定范围的群组内共享访问。操作思路流程如下:

  1. 在Linux上创建要共享的目录和文件资料
  2. 创建群组和用户,添加成为samba共享用户
  3. 修改和确认新增的用户、群组对共享目录的权限。
  4. 修改配置smb.conf主配置文件,重点是共享section和配置项
  5. 重启服务,放开防火墙

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

1.4 扩展学习