1.Samba简介
1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以SMB是没有意义的字符而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。
SMB(Samba):用于linux和windows之间的文件共享,可以实现匿名用户和本地用户之间的文件共享。
工作原理:
- smb进程 控制发布共享目录与权限 tcp 139 445
- nmb进程 主要用于名称解析 udp 137 138
2.软件包及配置文件
2.1 Samba服务程序中的参数以及作用
[global] |
|
#全局参数。 |
|
workgroup = MYGROUP |
#工作组名称 |
|
server string = Samba Server Version %v |
#服务器介绍信息,参数%v为显示SMB版本号 |
|
log file = /var/log/samba/log.%m |
#定义日志文件的存放位置与名称,参数%m为来访的主机名 |
|
max log size = 50 |
#定义日志文件的最大容量为50KB |
|
security = user |
#安全验证的方式,总共有4种 |
|
#share:来访主机无需验证口令;比较方便,但安全性很差 |
|
|
#user:需验证来访主机提供的口令后才可以访问;提升了安全性 |
|
|
#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户) |
|
|
#domain:使用域控制器进行身份验证 |
|
|
passdb backend = tdbsam |
#定义用户后台的类型,共有3种 |
|
#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码 |
|
|
#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户 |
|
|
#ldapsam:基于LDAP服务进行账户验证 |
|
|
load printers = yes |
#设置在Samba服务启动时是否共享打印机设备 |
|
cups options = raw |
#打印机的选项 |
[homes] |
|
#共享参数 |
|
comment = Home Directories |
#描述信息 |
|
browseable = no |
#指定共享信息是否在“网上邻居”中可见 |
|
writable = yes |
#定义是否可以执行写入操作,与“read only”相反 |
[printers] |
|
#打印机共享参数 |
|
comment = All Printers |
|
|
path = /var/spool/samba |
#共享文件的实际路径(重要)。 |
|
browseable = no |
|
|
guest ok = no 等于 public = no |
#是否所有人可见,等同于”public”参数。 |
|
writable = no 等于 read only = yes |
|
|
printable = yes |
|
3.安装SMB服务
测试默认情况下的共享文件,也就是安装完软件直接启动。不做任何配置文件的修改
客户端测试查看服务端共享了哪些文件
4.配置实例一
共享本地目录/data/samba/share
, 并且只允许harry
用户可写,smbadmin
组的成员只读
4.1 创建共享目录
4.2 创建用户和组方便后面测试
4.3 将创建的用户添加到smb服务的数据库并设置密码
4.4 编辑配置文件进行相应的配置并重启服务
4.5 客户端测试
测试发现harry用户能够成功访问,但是创建文件却失败了(原因分析:服务本身已经给定了harry用户写的权限,那么就应该是目录没有写的权限)
解决办法:
服务端给予harry用户读写执行的权限
客户端再次测试:
测试发现u1用户能够成功访问并且能够查看,但是创建文件却失败了。(原因:配置文件中我们只是允许了harry用户能够进行写,而sysadmin组里面的成员并没有给写的权限。所以并不能创建文件)
注意:如果不加可用用户选项,那么表示当前samba数据库里面的用户都可以访问
5.配置实例二
基于用户名密码和acl的综合访问:
需求:
公司:uplooking
1、财务部门 /data/samba/upl_cw cw01财务总监有可读可写权限,财务部门员工可读,boss01对其有管理权限。
2、市场部门 /data/samba/upl_sc 市场部门员工可读可写,公司员工可以查询资料,boss02对其有管理权限。
3、HR部门 /data/samba/upl_rs rs01HR总监可读写,HR部门员工可以对财务部查询,vip用户可以查询
4、休息区 /data/samba/upl_pub 自己管理自己的文件
思路:
1、选择哪个服务做文件共享(samba)
2、需要一台Linux服务器(rhel/centos)
3、根据部门创建不同的工作目录来保存不同部门的文件
4、将目录发布出去
5、测试验证
5.1 在服务器上创建相应的工作目录
5.2 创建相应的用户和组
5.3 编辑配置文件进行相应的配置并重启服务
5.4 将用户加入到samba数据库里
5.5 相应的acl授权
5.6 客户端测试验证:
6.Samba总结
- SAMBA 可以让 Linux 与 Windows 直接进行文件系统的使用;
- SAMBA 主要架构在 NetBIOS 上发展的,且以 NetBIOS over TCP/IP 克服NetBIOS 无法跨路由的问题;
- Samba 使用的 daemon 主要有管理分享权限的 smbd 以及 NetBIOS 解析的nmbd
- Samba 使用的模式主要有单机的 workgroup 方式,以及网域控管的 PDC 模式;
- Samba 的主配置文件之档名为 smb.conf
- smb.conf 内,主要区分为 [global] 服务器整体设定与 [share] 分享的资源两大部分
- Samba 使用者账号控管主要的设定值为 security = {share,user,domain}等
- Samba 客户端可使用 smbclient 以及 mount.cifs 进行网络的挂载
- 新版的 Samba 默认使用数据库记录帐户信息,新增账号用 pdbedit ,修改密码则用 smbpasswd
- Samba 主要支持 CUPS 的打印机服务器
- 在权限控管方面,最容易出错的为 SELinux 的规则与类型 (SELinux type)
- 默认情况下,服务端会将系统中的所有本地用户的家目录共享出去;并且不允许匿名用户访问
- 本地用户都可以通过用户名和smab数据库的密码去访问当前用户的家目录
- samba数据库里面的用户必须是当前操作系统中存在的用户
配置文件:一般放在/etc/samba/smb.conf里面,可以通过rpm -qc packagename查询;编辑完配置文件可以通过testparm来进行samba的确认。
7.常用命令
- 查看共享目录:客户端通过
smbclient
命令查看服务器共享出什么目录
.8访问权限控制