概要
- 前言
- 配置文件说明
- 安全模式
- 写入参数及作用
- 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服务的共享目录
然后将你使用pdbedit创建的访问用户caiwu登录
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共享,然后将其共享文件进行修改,在保存的时候,报错就来了。
这就是我们想看到的效果,权限已经放行了,但还是不能修改文件,因为我们没有把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数据库创建的账户密码
通过设置别名的方式,也可以访问共享,并且具有一定的安全性.