概要

  • 前言
  • 配置文件说明
  • 安全模式
  • 写入参数及作用
  • pdbedit
  • pdbedit使用
  • 服务搭建与使用
  • 清空windows远程连接
  • 安全考虑


前言

从基础篇中,我们了解了samba是什么,有什么用,以及简单的搭建,详情请查看===>CentOS7下的samba基础篇:了解与搭建,接下来要做的就是实际的部署和应用了。

首先是安装,yum或者rpm任意选择一种。

[root@linus ~]# yum install -y samba

开启服务,然后查看其运行状态。

[root@linus ~]# systemctl start smb.service 
[root@linus ~]# netstat -anput | grep smb
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      2446/smbd           
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      2446/smbd           
tcp6       0      0 :::139                  :::*                    LISTEN      2446/smbd           
tcp6       0      0 :::445                  :::*                    LISTEN      2446/smbd

配置文件说明

服务已经正常启动了,接下来就开始进行配置了,samba服务的配置文件位于 /etc/samba/目录下,名称为smb.conf

[root@linus ~]# ls /etc/samba/
lmhosts  smb.conf  smb.conf.example

将注释行和空行过滤掉,查看其文件内容,并对其说明

[global]	#全局生效
	workgroup = SAMBA	#工作组
	security = user		#安全模式
	passdb backend = tdbsam		#定义用户的后台类型,共三种
								#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码
								#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
								#ldapsam:基于LDAP服务进行账户验证
	printing = cups	#此项用来指定打印系统的类型
	printcap name = cups	#此项是用来设置开机时自动加载的打印机配置文件名称和路径
	load printers = yes		#设置在samba服务启动时是否共享打印机设备
	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 = root
	create mask = 0664
	directory mask = 0775

安全模式

samba服务器有share、user、server、domain和ads 五种安全模式,用来适应不同的企业服务器需求。

(1)share安全级别模式

客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。

(2)user安全级别模式

客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。

(3)server安全级别模式

客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。

(4)domain安全级别模式

如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。

(5)ads安全级别模式

当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。

写入参数及作用

对于修改samba的主配置文件来说,其实就是新增目录共享,将以下项写入到配置文件中即可,除了共享目录位置和允许访问的配置项外,其他的都能省略。

[name]:共享名称为database
 comment = test:描述
 **path = /home/test:共享目录为/home/test
public = no:关闭所有人可见
 writable = yes:允许写入操作
 valid users = user:可以访问的用户列表
 write list = user:有写入权限的用户列表

pdbedit

首先我们要知道,samba默认的认证方式是通过用户口令进行认证的,当然,若不考虑安全性,直接把验证方式改为share往下即可。

pdbedit命令是专门用来创建访问共享用户的,你以为系统中的用户就可以吗,辣怎么可能,那样岂不是所有的已有用户都可以访问共享了吗,那和无验证模式有什么区别呢?这种认证模式可以确保仅让特定用户访问资源,假如有三个部门,人事,财务,市场,这样可以创建三个目录,然后创建对应的访问用户,将各自的目录共享给各自部门的人。

使用pdbedit命令创建用户时要注意,首先,只有先建立账户信息数据库之后,才能使用用户口令认证模式。其次,samba服务的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱

pdbedit使用

pdbedit -a username:新建Samba账户。
pdbedit -r username:修改Samba账户。
pdbedit -x username:删除Samba账户。
pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit -Lv:列出Samba用户列表详细信息。

服务搭建与使用

该说的都说了,接下来就是对于samba服务的详细搭建过程了。
环境:
samba服务器IP:192.168.1.124
windows10和CentOS7的IP随意,能互通即可。

注:samba服务器需要关闭selinux和firewalld防火墙,否则会拦截访问请求

主要是在samba服务器上进行搭建,其余仅用于测试。

小需求:caiwu是财务部部长的账户,只允许他能写入文件,其余账户只能读取

1.创建测试用户caiwu

[root@linus ~]# useradd caiwu
[root@linus ~]# pdbedit -a caiwu1 
new password:
retype new password:
Failed to add entry for user caiwu1. #创建系统中不存在的用户,显示条目未能添加
[root@linus ~]# pdbedit -a  caiwu #创建已存在的用户
new password:
retype new password:
Unix username:        caiwu
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-1877094264-3563949321-3775828196-1000
Primary Group SID:    S-1-5-21-1877094264-3563949321-3775828196-513
Full Name:            
Home Directory:       \\linus\caiwu
HomeDir Drive:        
Logon Script:         
Profile Path:         \\linus\caiwu\profile
Domain:               LINUS
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          三, 06 2月 2036 23:06:39 CST
Kickoff time:         三, 06 2月 2036 23:06:39 CST
Password last set:    四, 26 3月 2020 02:29:08 CST
Password can change:  四, 26 3月 2020 02:29:08 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

2.创建测试目录/caiwu_test,属主为caiwu

[root@linus ~]# mkdir /caiwu_test
[root@linus ~]# chown caiwu:caiwu /caiwu_test
[root@linus ~]# chmod +777 /caiwu_test/

3.修改samba的主配置文件,写入共享信息

[root@linus ~]# vim /etc/samba/smb.conf
....	#将下列配置写入到文件最后,但要注意排列,否则会报错
[caiwu]
        comment = test	#描述
        path = /caiwu_test	#共享目录位置
        public = No		#不支持来宾访问
        read only = Yes	#只读权限
        valid users = caiwu	#可以访问用户,可以把财务部所有的组成员写入此项中
        write list = caiwu	#有可写入权限的用户

4.重载配置,并创建测试文件。

[root@linus ~]# systemctl reload smb
[root@linus ~]# touch /caiwu_test/test.txt
[root@linus ~]# chmod +777 /caiwu_test/test.txt 	#为什么还要给文件设置权限?此文件为root用户创建,若不给予其权限,即使服务搭建没有问题,也无权限使用此文件

5.windows访问samba服务的共享目录

samba配置指定用户登陆_linux


然后将你使用pdbedit创建的访问用户caiwu登录

samba配置指定用户登陆_服务器_02


samba配置指定用户登陆_samba配置指定用户登陆_03


samba配置指定用户登陆_samba配置指定用户登陆_04


windows访问成功,并且可以写入数据,接下来看看linux访问

[root@linus ~]# smbclient //192.168.1.124/caiwu_test -U caiwu
Enter SAMBA\caiwu's password: 
Domain=[LINUS] OS=[Windows 6.1] Server=[Samba 4.6.2]
tree connect failed: NT_STATUS_BAD_NETWORK_NAME

诶,好像报错了,没有连接上,网上很多人都遇见了tree connect failed: NT_STATUS_BAD_NETWORK_NAME的报错,就是因为名称错误,是共享名,写在配置文件中的共享名。千万要注意格式。

smbclient //samba主机IP/共享名【而不是共享目录名】 -U 登录用户

我们按照这个格式试一下

[root@linus ~]# smbclient //192.168.1.124/caiwu -U caiwu
Enter SAMBA\caiwu's password: 
Domain=[LINUS] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
  .                                   D        0  Thu Mar 26 03:06:22 2020
  ..                                 DR        0  Thu Mar 26 02:55:50 2020
  test.txt                            A       12  Thu Mar 26 03:21:41 2020

		52403200 blocks of size 1024. 47782212 blocks available
smb: \>

这样就访问成功了。

清空windows远程连接

可以使用net use * /del /y清空网络连接,默认一台windows中只允许一个用户访问共享,若要且换用户,需要重启系统,刷新网络配置,而使用net use * /del /y可以直接刷新,不需要重启

C:\Users\Administrator>net use * /del /y
你有以下的远程连接:

                    \\192.168.1.124\IPC$
继续运行会取消连接。

命令成功完成。

C:\Users\Administrator>net use * /del /y
列表是空的。

6.再创建一个用户caiwu2,修改配置文件,允许其访问共享资源,但不允许其写入

[root@linus ~]# useradd caiwu2
[root@linus ~]# pdbedit -a caiwu2

使用caiwu2访问samba共享,然后将其共享文件进行修改,在保存的时候,报错就来了。

samba配置指定用户登陆_linux_05


这就是我们想看到的效果,权限已经放行了,但还是不能修改文件,因为我们没有把caiwu2加入可以写入的列表。

安全考虑

服务是搭建完成了,没什么问题,访问也需要密码了,还有什么问题呢?我们忽略了一点,现在用户使用的账户名和密码,是linux中实际存在的账户吗?是的,因为samba数据库不允许创建不存在的用户,也就是说,能访问samba1的用户在linux中实际存在,而这恰恰就是安全隐患。

为了安全考虑,通常都会使用samba中的一个叫用户名称映射的功能。

1.创建用户别名文件

[root@linus ~]# vim /etc/samba/samba_user_map	#在哪里创建都可以
caiwu = zhangsan
caiwu2 = lisi

2.修改主配置文件,启动用户名称映射功能

[global]
	workgroup = SAMBA
	security = user
	passdb backend = tdbsam
	username map = /etc/samba/samba_user_map	#只需要加入此项即可,路径是别名文件的路径
	printing = cups
	printcap name = cups
	load printers = yes
	cups options = raw

3.重载服务,然后开始验证

[root@linus ~]# systemctl reload smb

samba配置指定用户登陆_运维_06


密码为samba数据库创建的账户密码

samba配置指定用户登陆_linux_07


通过设置别名的方式,也可以访问共享,并且具有一定的安全性.