简单认识Samba服务以及Linux操作系统下部署案例解析

1.首先在介绍Samba服务之前我们先来简单的认识一下SMB协议SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。
SMB协议最初是IBM的贝瑞•费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。后来微软对这个发展进行了重大更改,这个更改后的版本也是最常见的版本。微软将SMB协议与它和3Com一起发展的网络管理程序结合在一起,并在Windows for Workgroups和后来的Windows版本中不断加入新的功能。SMB一开始的设计是在NetBIOS协议上运行的(而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上),Windows 2000引入了SMB直接在TCP/IP上运行的功能。在这里我们必须区分SMB协议和运行在这个协议上的SMB业务,以及NetBIOS和使用SMB作为认证隧道的DCE/RPC业务。此外我们还要区分主要(但不仅仅)直接使用NetBIOS数据报的“网络邻居”协议(在Windows操作系统中我们最常见的就是通过网上邻居可以看到同一互联网上连接的其他用户)。1996年,Sun推出WebNFS的同时,微软提出将SMB改称为Common Internet File System。此外微软还加入了许多新的功能,比如符号链接、硬链接、提高文件的大小。微软还试图支持直接联系,不依靠NetBIOS,不过这个试图依然处于尝试阶段,并需要继续完善。微软向互联网工程工作小组提出了部分定义作为互联网草案。不过这些提案现在均已过期。由于SMB协议对于与占主要地位的Microsoft Windows平台通讯时的重要性,而目前该平台使用的SMB协议与初始的版本相比有巨大的改变,因此Samba项目就是被创立来逆向工程来提供一个与SMB软件兼容的自由软件,使得非微软操作系统也能够使用它。
2.简单介绍Samba:
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
3.Samba服务的由来:
在服务器端,Linux与Window Server相比其稳定性、安全性、执行效率以及性价比都是较高的。所以好多Window Server下运行的一些服务都会切换到Linux服务上运行,但是对于一些桌面用户来说用的较多的就是文件共享协议。而在Linux操作系统中我们可以使用FTP、NFS等类型的文件共享协议,但是对于Windows上比较简单的可以直接打开的服务,对Linux操作系统中的NFS协议来说是不能在Windows上使用的,而这种直接将文件系统共享出来无论是什么操作系统和都能使用的协议是SMB协议。但是SMB协议是Windows的一种私有协议,所以我们的开源技术团队通过抓包分析Window下SMB协议所产生的数据包来实现搞清楚SMB协议的工作原理,从而开发出来了Linux操作系统上的Samba服务。也就是说SMB协议是Windows下所使用的文件共享协议,我们在Linux系统或者其类Unix系统当中可以通过Samba服务来实现SMB的功能。
我们也可以简单的理解Samba服务是SMB的一个开源实现,而SMB协议的一些主要功能如下

1>可以通过SMB协议进行文件共享;
2>通过SMB协议可以实现打印共享(我们可以通过在Linux上通过SMB配置打印服务器,为Windows提供打印服务);
3>加入一个Windows2000/2003/2008域环境(在企业环境当中应用最多,目前SMB是支持这三种主流的Window服务操作系统的,好多企业当中整个的企业环境中是使用Windows的域环境进行管理的,而所有的用户组、权限、组策略信息等都是在Windows域环境进行配置的,那么如果我们的企业又想把一些应用服务和需要用到的一些域环境进行认证或者是做权限控制的应用服务切换到Linux系统当中,那在这种情况下就涉及到如何与Windows下的这些域环境进行兼容,那么SMB是可以加入到Windows域环境当中的,并且是可以和Window下的这些域环境进行认证操作的。所以SMB这个协议是相当强大的,不仅限于只是实现文件共享。
4>通过Windows域环境进行认证操作。SMB协议又称为CIFS(Common Internet File System通用网络文件系统)协议,CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。

4.Samba进行文件共享的优势:

FTP进行文件共享最早是在Windows上运行的,然后也在Linux操作系统上可以运行(有用户控制机制),但是文件必须下载到本地才能使用;
NFS 是Linux操作系统上的共享服务,是直接通过挂载访问的,但是NFS不能控制用户,挂载之后才能使用;
Samba进行文件共享,共享的文件是可以直接在共享中打开使用的,并且Samba有用户控制机制。Samba服务可以实现Windows上的对应文件向Linux迁移的功能。就安全而言,Samba的server与domain都需要另外一台服务器去认证,所以安全级别较高。

5.Linux操作系统下Samba服务实现文件共享案例解析:
5.1首先我们需要挂载光盘镜像进行相应软件包的安装:

[root@localhost ~]# mount /dev/sr0 /mnt
[root@localhost ~]# yum install samba –y

注意: Samba拥有两个主服务(相关服务),对于一般使用的共享服务他只有一个主服务
smb(提供Samba核心功能也是使用最多的一种功能) 提供文件及打印共享服务功能,使用139/445端口;另一个主服务是nmb,它提供Netbios(这种解析协议慢慢的被淘汰)支持,使用137/138端口,而对于这种协议使用较少,现在都是DNS进行解析的。

5.2了解Samba的主配置文件:

[root@localhost ~]# vim /etc/samba/smb.conf
Samba的配置文件由以下三部分内容组成:
[global]------定义全局性配置(配置Samba服务的相关参数,全局生效);
[homes]------定义对用户家目录的共享配置(其实在默认情况下不做任何设置,直接启用服务我们就可以通过SMB协议访问所有用户的家目录);
[printers]------定义打印机共享的相关配置
Samba的主配置文件格式:
全局参数:
==================Global Settings ===================
[global]
config file = /usr/local/samba/lib/smb.conf.%m        //config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。
workgroup = WORKGROUP                                 //设定Samba Server加入的工作组或工作域
server string = Samba Server Version %v               //设置Samba Server的注释,%v表示显示Samba的版本号
netbios name = smbserver                              //设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。 
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  //设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1            //表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反,如果allow与deny同时配置了,切记允许优先
max connections = 0                                   //指定连接Samba Server的最大连接数目,如果超出连接数目,则新的连接请求将被拒绝,0表示不限制连接数
deadtime = 0                                          //deadtime用来设置断掉一个没有打开任何文件的连接的时间,单位是分钟,0代表Samba Server不自动切断任何连接
time server = yes/no                                  //time server用来设置让nmdb成为windows客户端的时间服务器
log file = /var/log/samba/log.%m                      //设置Samba Server日志文件的存储位置以及日志文件名称。%m代表主机名,表示对每台访问Samba Server的机器都单独记录一个日志文件。
max log size = 50                                     //设置Samba Server日志文件的最大容量,单位为kB,0代表不限制容量
security = user                                       //定义Samba的安全级别,按从低到高分为四级:share,user,server,domain
Samba四级安全级别对应的验证方式如下:
share:没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源;
user:Samba的默认配置,要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证;
server:和user安全级别类似,但用户名和密码是递交到另外一个服务器去验证,比如递交给一台NT服务器,如果递交失败,就退到user安全级;
domain:这个安全级别要求网络上存在一台Windows的主域控制器,Samba把用户名和密码递交给它去验证。
后面三种安全级都要求用户在本Linux机器上也要系统帐户,否则是不能访问的。
passdb backend = tdbsam                        //passdb backend就是用户后台的意思

目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account
manager(安全账户管理)的简写。
1>smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba服务器。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件;
2>tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd
–a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。例如:pdbedit
–a username:新建Samba账户、pdbedit –x username:删除Samba账户、pdbedit
–Lv:列出Samba用户列表的详细信息。
3>ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

encrypt passwords = yes/no                          //是否将认证密码加密,默认已开启
smb passwd file = /etc/samba/smbpasswd              //定义Samba用户的密码文件,smbpasswd文件如果没有那就要手工新建 
username map = /etc/samba/smbusers                  //定义用户名映射
guest account = nobody                              //用来设置guest游客用户对应的用户名
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192      //设置服务器和客户端之间会话的Socket选项,可以优化传输速度
domain master = yes/no                  //设置Samba服务器是否要成为网域中的主服务器
local master = yes/no                   //local master用来指定Samba Server是否试图成为本地网域的主服务器
preferred master = yes/no               //设置Samba Server一开机就强制进行主服务器选举
os level = 200                          //设置Samba服务器的系统等级。该参数决定Samba Server是否有机会成为本地网域的主服务器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些
domain logons = yes/no                  //设置Samba Server是否要做为本地域控制器
logon . = %u.bat                        //当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。
wins support = yes/no                   //设置samba服务器是否提供wins服务
wins server = wins服务器IP地址           //设置Samba Server提供wins服务的地址 
wins proxy = yes/no                     //设置Samba Server是否开启wins代理服务
dns proxy = yes/no                      //设置Samba Server是否开启dns代理服务。
load printers = yes/no                  //设置是否在启动Samba时就共享打印机
printcap name = cups                    //设置共享打印机的配置文件。
printing = cups                         //设置Samba共享打印机的类型
共享参数:
================== Share Definitions ==================
[共享名]                                 //用户可以根据需求自定义
comment = 任意字符串                      //comment是对该共享的描述,用户自定义
path = 共享目录路径                       //path用来指定真实共享的目录对应的路径
browseable = yes/no                      //指定该共享是否可以浏览
writable = yes/no                       //指定该共享路径是否可写
available = yes/no                      //指定该共享资源是否可用。
admin users = 该共享的管理者              //指定该共享的管理员(对该共享具有完全控制权限)
valid users = 禁止访问该共享的用户        //类似于黑名单,格式为valid users = wangcai,@xiaoqiang,@panghu(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示)
invalid users = 允许访问该共享的用户      //类似于白名单,格式为valid users类似 
write list = 允许写入该共享的用户         //指定列表中的用户可以执行写操作,格式与valid users类似
public = yes/no                         //指定该共享是否允许guest账户访问
guest ok = yes/no                       //意义等同于public

5.3Samba服务实现文件共享案例解析:
案例一: 通过Samba服务实现某公司的文件交换服务器,要求实现/public目录让所有人访问,所有人都可以写入文件。

[root@localhost ~]# mikdr /public
[root@localhost ~]# vim /etc/samba/smb.conf 
[global]
        workgroup = workgroup
[public]
		comment = public file
        path = /public
public = yes
writable = yes
配置完成重启服务:
[root@localhost ~]# systemctl restart smb nmb
注意:如果是开启SELinux的话需要进行如下配置:
[root@localhost ~]# chcon -t samba_share_t /public –R

案例二: 假设技术部需要一个文件服务器,用于存放常用的软件工具,所有人都可以访问,但是只有技术部可以写入。

[root@localhost ~]# mkdir /soft
[root@localhost ~]# touch /soft/{so1,so2,so3}
[root@localhost ~]# groupadd jishubu 
[root@localhost ~]# gpasswd -M user2,user3 jishubu
[root@localhost ~]# cat /etc/group
jishubu:x:3334:user2,user3
[root@localhost ~]# vim /etc/samba/smb.conf 
[soft]          
        path = /soft
public = yes
        comment = soft
write list = +jishubu                      //表示技术部组的人可以写添加技术部组将用户加入组,并将用户改为samba用户
配置完成重启服务:
[root@localhost ~]# systemctl restart smb nmb
[root@localhost ~]# setfacl -m g:jishubu:rwx /soft                            //设置扩展权限
[root@localhost ~]# ll -d /soft/
drwxrwxr-x+ 2 root root 6 3月   4 17:22 /soft/
[root@localhost ~]# getfacl /soft/                                            //查看扩展权限
group:jishubu:rwx
mask::rwx

案例三: 每个人都可以进入自己的独立家目录,别人不可以访问。

[root@localhost ~]# vim /etc/samba/smb.conf 
[homes]
        browsable = no                            //其他用户不能浏览
        writable = yes      
配置完成重启服务:
[root@localhost ~]# systemctl restart smb nmb

5.4Linux客户端访问Samba共享服务:
#安装客户端对于的软件包,samba-client

[root@localhost ~]# yum install samba-client -y

#列出samba服务器共享的资源目录,因为我们默认的安全级是user所以要通过-U来指定用户进行登录

[root@localhost ~]# smbclient -L //192.168.10.206 -U user1
Enter user1's password:
如果出现错误protocol negotiation failed: NT_STATUS_IO_TIMEOUT
的话,暂时可通过在客户端的/etc/hosts文件中添加客户端和服务端的地址映射
如:192.168.40.131(服务端ip)  web、192.168.40.132(服务端ip)  ldap进行解决。

在这里插入图片描述
#通过客户端进入Samba共享目录

[root@localhost ~]# smbclient //192.168.10.206/public -U user1
Enter user1's password: 

在这里插入图片描述

smb: \>                         //这里可以利用Tab键来查看支持哪些操作
smb: \> get File                //下载文件
smb: \> put File                //上传文件
smb: \> exit                    //退出

#客户端进行挂载操作
#手动挂载使用资源

 [root@localhost ~]#mount //192.168.10.206/public  /public -o username=user1,password=redhat     //挂载的时候指定用户名及密码

#自动挂载使用资源

[root@localhost ~]# vim /etc/fstab 
//192.168.10.206/public       /public        cifs        defaults,username=xixi,password=redhat      0(开机是否检查)  0(开机是否备份)  

注意:

1.添加的Samba用户必须是当前系统上真实存在的用户; 即添加samba用户先useradd添加普通用户,例如:

[root@localhost ~]# useradd panghu
[root@localhost ~]# smbpasswd -a panghu
New SMB password:
Retype new SMB password:
Added user panghu.
查看samba用户的用户信息:
[root@localhost ~]# pdbedit -L
panghu:3336:

2.通过Window资源连接进行测试的格式是\+Samba服务器的ip地址;
3.默认Windows上通过资源连接访问Samba服务也是有缓存的,如果需要再次访问查看的话需要在DOS界面中通过net use * /delete命令清除缓存信息。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值