Linux中samba共享服务的部署及安全优化详解

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中samba共享服务的部署及安全优化详解相关的知识,希望对你有一定的参考价值。

samba共享服务的部署及安全优化

1、samba服务简介

在构建主机时我们需要将主机系统的数据存储在存储服务器中(如下图所示),这样用户在需要访问系统数据资源时,可以通过不同的终端主机访问存储服务器,避免因客户端主机瘫痪导致用户数据丢失,我们将这一技术成为存储分离技术,这一技术的本质是共享文件系统的读写权限,而不是将文件系统下载到客户端主机后共享。
在这里插入图片描述
这里我们将详细介绍提供网络文件系统共享功能的samba服务。Samba是smb(Server Message Block Sum)的一种实现方法,主要用来实现Linux系统的文件共享服务。windows系统共享文件时用到的协议是smb,而Linux系统共享文件时用到的协议是cifs(Common Internet File System Miscrosoft),smb是由miscrosoft和sum组合形成的,Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。

2、samba基本信息

服务启动脚本smb.service
主配置目录/etc/samba
主配置文件/etc/smb.conf
安全上下文samba_share_t
默认使用端口139、445
服务安装包samba(软件主体)、samba-common(说明软件)、samba-client(客户端软件)

3、samba的安装与启用

a)windows下文件系统的共享

实验步骤:
1)在windows系统中完成共享资源设定,即共享westos目录的读写权限给所有人
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)在windows系统中运行cmd,输入\\\\共享主机ip即可访问到共享资源westos目录
在这里插入图片描述
3)在Linux系统的虚拟机westsoa(172.25.254.133)中安装samba-client客户端软件,即可通过smbclient命令(-L指定访问主机ip、-U指定以什么用户身份访问)输入指定用户密码访问windows系统中的共享资源westos目录(当要输入root密码时直接回车)在这里插入图片描述
在这里插入图片描述
4)也可以通过mount挂载windows系统中的共享资源到Linux中进行访问(-o指定windows系统中的用户名和密码),此时在Linux中可以在挂载点处的共享目录中执行新建、删除文件的操作,在windows系统下的共享目录中可以看到新建的文件
在这里插入图片描述
在这里插入图片描述

b)Linux下自建文件系统的共享

实验步骤:
1)在Linux中(虚拟机westsoa)建立目录,安装samba-client客户端软件、samba软件主体及samba-common说明软件
在这里插入图片描述
2)复制/etc/samba目录下的模板生成samba配置文件smb.conf,该配置文件中规定使用samba进行共享时共享文件的安全上下文标签必须为samba_share_t,因此我们必须修改新建目录的安全上下文标签(selinux是强制Enforcing模式),接着编辑samba配置文件smb.conf指定共享时显示的资源名称、对共享资源进行说明、指定共享文件系统的路径path、设置访问共享文件系统时的权限
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)完成上述操作后开启samba服务,在防火墙中设定永久允许samba服务,刷新火墙使设定生效,更改共享文件系统即新建目录的权限为777(防止文件系统本身的权限限制对共享设置造成影响)
在这里插入图片描述
4)在Linux系统中smbpasswd -a 用户为指定用户设置samba账户,这里指定用户必须是本地系统中存在的用户,也可以在系统中专门建立一个无交互界面无家目录的用户,将该用户设置为专供samba使用的账户,账户设置完成后可以通过pdbedit -L查看设置的samba账户列表,pdbedit -X 用户删除指定samba账户
在这里插入图片描述
5)此时在Linux系统中即可通过以下三种方式访问共享资源:
方法一: smbclient -L指定访问主机ip -U指定账户输入指定账户密码进行访问
在这里插入图片描述
方法二: smbclient //共享主机ip/文件路径 -U指定账户输入指定账户密码进行访问
在这里插入图片描述
方法三: mount //共享主机ip/文件路径 /挂载点 -o指定samba账户和账户密码 挂载共享文件系统到访问客户端的指定位置,此时在挂载位置处可以执行新建、删除文件等操作,卸载结束访问后在该共享文件系统中可以看到新建的文件
在这里插入图片描述
6)在windows系统中运行cmd输入\\\\共享主机ip,输入samba账户名称和密码(网络凭据)后即可访问Linux中的共享资源,此时在windows中执行新建、删除文件等操作,在Linux共享文件系统即新建目录中可以看到新建的文件
在这里插入图片描述
在windows系统中再次运行cmd输入\\\\共享主机ip,此时不需要输入网络凭据就可以直接访问共享资源,在windows命令行中net use可以查看访问记录,net use * /del可以删除所有访问记录,删除后再次访问需要输入网络凭据

c)Linux下系统创建文件资源的共享

实验步骤:
1)samba共享自建文件时需要修改文件的安全上下文标签,但当我们编辑samba配置文件设定共享系统目录/mnt,重启smb服务后,在smbclient //共享主机ip/文件路径 -U指定账户输入指定账户密码进行访问时无法列出共享系统目录下的文件资源,这是因为此时selinux为强制Enforcing模式,由于系统目录会被其他程序所使用,所以selinux会使用安全开关对系统目录进行访问权限控制;当selinux为警告模式时,smbclient //共享主机ip/文件路径 -U指定账户输入指定账户密码进行访问时可以列出共享系统目录下的文件资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)我们可以取消selinux对samba服务的文件读写限制,即开启selinux中的对于samba可读写/可读控制的安全开关setsebool,此时在强制Enforcing模式下smbclient //共享主机ip/文件路径 -U指定账户输入指定账户密码进行访问时可以列出共享系统目录下的文件资源
在这里插入图片描述

4、samba的访问控制

a)全局访问控制

实验步骤一:全局白名单
1)在另一台Linux系统的虚拟机westosb(172.25.254.233)中安装samba客户端软件,此时在westosa、westosb中都可以挂载samba服务器westosa中的共享目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)编辑westosa中samba配置文件smb.conf,在全局模块【GLOBAL】中设置允许访问列表(hosts allow),重启smb服务后只有全局白名单中的主机可以挂载访问所有samba服务的共享目录(对samba整体生效),此时只有westosa可以挂载samba服务器westosa中的共享目录,westosb不能挂载samba服务器westosa中的共享目录,westosb在访问时系统提示非法连接请求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验步骤二: 全局黑名单
1)编辑samba配置文件在全局模块中设置禁止访问列表(hosts deny),重启smb服务后全局黑名单中的主机不能挂载访问所有samba服务的共享目录,此时只有westosb可以挂载samba服务器westosa中的共享目录,westosa不能挂载samba服务器westosa中的共享目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

b)局部访问控制

实验步骤:
1)编辑samba配置文件,注释掉全局samba访问控制设定(全局控制设定的优先级最高),如果是在某单个共享目录语句块中设置允许访问列表(hosts allow)/禁止访问列表(hosts deny),那么此时(只有局部白名单/局部黑名单)中的主机(可以/不能)挂载访问该共享目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、samba的常用配置参数

writable = yes 				##可写

write list = westos 		##指定用户可写
write list = +westos 		##指定用户组可写
write list = @westos

valid users = lee 			##指定访问用户
valid users = +lee|@lee 	##指定访问用户组

browseable = yes|no 		##是否隐藏共享

map to guest = bad user 	##写到全局设定中
guest ok = yes 				##允许匿名用户访问

admin users = lee 			##指定此共享的超级用户身份

实验步骤:
1)在进行参数设置之前,为了不使共享的本地文件系统的权限设定限制我们写入文件,需要将共享目录的权限设置为777,使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下可以新建文件,卸载/mnt目录下的共享目录,编辑samba配置文件,将可写参数注释掉后重启smb服务,重新使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下不能新建文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)smbpasswd -a为指定westos用户设置samba账户,编辑samba配置文件,指定只有westos用户可写,重启smb服务,使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下不能新建文件,卸载/mnt目录下的共享目录,使用westos账号挂载共享目录到/mnt目录下,此时westos用户在/mnt目录下可以新建文件
在这里插入图片描述
在这里插入图片描述
3)编辑samba配置文件,指定westos用户组(@和+含义一致,都表示组)可写,重启smb服务,使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下不能新建文件,卸载/mnt目录下的共享目录,添加用户lee为westos的组成员,重新使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下可以新建文件
在这里插入图片描述
在这里插入图片描述
4)编辑samba配置文件,指定只有westos用户可以访问,重启smb服务,使用lee账号挂载共享目录到/mnt目录下时提示无法挂载,使用westos账号挂载共享目录到/mnt目录下可以成功挂载
在这里插入图片描述
在这里插入图片描述
5)编辑samba配置文件,指定westos用户组可以访问,重启smb服务,添加用户lee为westos的组成员,使用lee账号挂载共享目录到/mnt目录下可以成功挂载
在这里插入图片描述
在这里插入图片描述
6)编辑samba配置文件,指定隐藏WESTOS共享目录,重启smb服务,此时smbclient -L指定访问samba服务器ip在所有显示的共享资源中看不到WESTOS共享目录,但不影响该共享目录的挂载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7)smbclient //共享主机ip/共享目录即以匿名用户身份访问共享资源时无法访问,编辑samba配置文件,在全局模块中将所有访问samba服务器的未知用户身份映射为匿名用户,在某单个共享目录语句块中设置允许匿名用户访问,重启smb服务,此时smbclient //共享主机ip/该共享目录以匿名用户身份访问可以看到指定的单个共享目录下的文件资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8)使用lee账号挂载共享目录到/mnt目录下,此时lee用户在/mnt目录下可以新建文件,查看新建文件属性信息可以看到文件的拥有者和拥有组为root用户,卸载/mnt目录下的共享目录,再次查看共享目录下新建文件的属性信息可以看到文件的拥有者和拥有组实际为使用samba服务的访问账户lee
在这里插入图片描述
编辑samba配置文件,设定共享账号lee的超级用户身份,重启smb服务,此时使用lee账号挂载共享目录到/mnt目录下创建的文件其文件拥有者固定为root用户
在这里插入图片描述
在这里插入图片描述

6、samba的多用户挂载

实验步骤:
1)在另一台安装有samba客户端软件的主机(westosb)中以root用户身份使用lee-samba账号认证后挂载共享目录到/mnt目录下,此时以root用户身份可以查看共享目录中的文件资源,但此时切换到另一用户westos中也可以查看共享目录中的文件资源,这显然是不合理的,因为用户westos并没有使用samba账号进行认证,我们需要安装cifs-utils软件来解决这一问题(安装cifs-utils软件后可以man mount.cifs查看帮助)
在这里插入图片描述
在这里插入图片描述
2)我们在以普通方式进行挂载时,会使用-o参数指定账户和账户密码,这种方式显然是不安全的,history查看历史命令samba账号的密码就会泄漏,为了解决这一问题,我们可以编写一个认证文件写入samba账户的账户名和账户密码,修改这一认证文件的权限为600,即只有文件拥有者才可以读写该认证文件,这样一来在挂载时我们可以使用credentials参数指定读取samba账号认证文件,避免samba账号的密码泄漏
在这里插入图片描述
3)我们可以在挂载时加入multiuser参数实现多用户挂载功能,在westosb中以root用户身份进行samba账号认证后挂载共享目录到/mnt目录下,此时以root用户身份可以查看共享目录中的文件资源,切换到另一用户westos中无法查看到共享目录中的文件资源
在这里插入图片描述
4)如果想要使客户端主机中的其他用户在多用户挂载后能够查看到共享目录中的文件资源,需要在挂载时加入sec=ntlmssp参数,即指定客户端主机中的其他用户在多用户挂载后可以通过ntlmssp这种认证方式进行samba账户认证,此时以root用户身份挂载后,切换到普通用户westos中,可以执行cifscreds add(添加认证) -u xxx(指定samba账户) samba服务器IP命令输入指定samba账户密码后,以普通用户westos身份完成认证,此时westos中就可以查看到共享目录中的文件资源(出现报错时使用cifscreds clearall清除历史认证记录重新认证即可)
在这里插入图片描述

7、samba服务客户端共享优化—autofs自动挂载

在客户端主机中挂载共享目录后,即使客户端不对挂载的共享资源进行任何操作,客户端也会一直占用samba服务器终端,这显然是不合理的,如果访问samba服务器的客户端主机数量增多,samba服务器的访问压力会增大,因此我们需要使用autofs软件对samba服务客户端的共享进行优化,即使客户端主机只有在与samba服务器进行交互时才会占用samba服务器终端的共享资源。具体实现方法如下:

实验步骤:
1)在客户端主机westosb中安装autofs软件并启动autofs服务,编辑主配置文件/etc/autofs.conf设置资源闲置时间超出多久后自动卸载挂载资源
在这里插入图片描述
在这里插入图片描述
2)这里我们将共享资源WESTOS挂载到/westos/samba下,在客户端主机westosb中编辑策略文件/etc/auto.master写入最终挂载点的上级目录(如果上级目录是根目录则写/-,且编写挂载子策略文件指定最终挂载点时要写绝对路径)、指定挂载子策略文件,编写挂载子策略文件指定将资源以指定参数方式挂载到最终挂载点,此时系统中无/westos目录,重启autofs服务后有westos目录(停止autofs服务后无westos目录)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)进入westos目录,查看目录显示目录中无内容,但此时执行cd命令可以直接进入最终挂载点samba目录中,cd命令相当于执行了挂载操作,此时df查看可以看到共享资源WESTOS挂载到/westos/samba下;cd切换出最终挂载点samba目录,等待资源闲置时间超过主配置文件/etc/autofs.conf设置的资源闲置时间限制后,df查看可以看到共享资源WESTOS自动卸载
在这里插入图片描述

以上是关于Linux中samba共享服务的部署及安全优化详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux 之 samba 部署&优化

samba 部署和优化

centos之samba共享服务

samba部署和优化(共享我们Linux系统里的目录供windows系统或者linux其它服务器访问下载等等)

samba部署和优化

Linux下安装部署Samba共享盘的操作手册