SAMBA的介绍
SAMBA是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件
SMB(Server Message block)协议是window下所使用的文件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。
SMB协议又称为CIFS(Common Internet File System)协议
SAMBA服务是SMB的一个开源实现,而smb的一些主要功能如下:
1. 在网络上共享目录,决定访问权限。
2. 在网络上共享打印机,决定访问权限。
3. 加入一个windows域环境
4. 通过windows域环境进行认证操作。这个相比于NFS是安全的。NFS缺乏认证机制,在局域网当中没有得到更安全的保障。
SAMBA的安全级别
从低到高分为四级:share,user,server,domain。它们对应的验证方式如下:
* share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。我在Linux7版本中配置此模式,系统一直报错。
* user:samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。
* server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级。
samba的安装
samba拥有两个主服务(相关服务),对于一般使用的服务他只有一个主服务:
1、smbd (提供samba核心功能也是使用最多的一种功能) 提供文件及打印共享服务功能,使用 139、445端口
2、nmbd 提供Netbios(解析协议慢慢的被淘汰)支持,使用137、138端口,而对于这种协议使用较少,现在都是dns进行解析
一般作为文件共享使用samba,则只需要smbd服务
标注:samab服务开启之前需要关闭两个服务,iptables防火墙,selinux服务。
这是为了放行smb的端口。(samba服务需要占用TCP端口139,445 UDP端口 137,138)
samba软件结构
/etc/samba/smb.conf #samba服务的主要配置文件
/etc/samba/lmhosts #samba服务的域名设定,主要设置IP地址对应的域名,类似linux系统的/etc/hosts
/var/log/samba #samab服务存放日志文件
/var/lib/samba/private/{passdb.tdb,secrets.tdb} #存放samba的用户账号和密码数据库文档
samba工作过程
step1、首先客户端发送一个SMB请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可以使用的协议则返回0XFFFFH,结束通信。
step2、协议确定后,客户端进程向服务器发起一个用户或共享的认证 ,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。
step3、当客户和服务器完成了协商和认证后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。
step4、连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,read SMB读取一个文件,write SMB写入文件,close SMB关闭文件。
SAMBA配置文件
Samba的配置文件为/etc/samba/smb.conf
配置文件分为三个部分:
[global] 定义全局性配置(配置samba服务的相关参数)
[homes] 定义对用户家目录的共享配置(其实在默认情况下不做任何设置,直接启用服务我们就可以通过smb协议访问所有用户的家目录)
[printers] 定义打印机共享配置
1、简单实现public目录的直接访问,无需用户名和口令,类似于share安全等级。但是在Linux version 3.10.0-327.el7.x86_64版本下是无法直接启用share等级的
[root@localhost ~]# vim /etc/samba/smb.conf
123 security = user //此版本share等级会一直提示SMB.daemon启动失败。
124 passdb backend = tdbsam //使用TDB数据库模式
125 map to guest = Bad User
255 load printers = no //关闭分享打印功能
322 [public] //共享的资源名
323 comment = Public Stuff
324 path = /samba //实际Linux上的目录
325 public = yes
326 writable = yes
:wq
[root@localhost ~]# testparm
[root@localhost ~]# chcon -t samba_share_t /samba/ //共享服务器端/samba目录,设置目录上下文
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl restart nmb
本地文件访问 \\192.168.11.128
清除本地连接访问记录 C:\Users\xizai>net use * /del
用户控制:
public = 匿名用户访问,需要下面的指令配合
map to guest = Bad User 匿名访问
browseable = 可浏览
valid users = 有效用户
writable = yes 可写,还要看目录权限
writable list = maomao,@GROUPNAME,+GROUPNAME
readonly = yes 只读设置
create mask = 0744 客户机创建文件权限
directory mask = 0744 客户机创建目录的权限
访问控制