它是 Microsoft 和 Intel 在 1987年开发的,该协议可以用在TCP/IP 之上,也可以用在其他网络协议(如 IPX 和 NetBEUI )之上。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序还可以访问远程服务器端的文件和打印机等资源。
Linux 使用一个被称为Samba 的程序集来实现SMB 协议。通过 Samba ,可以把Linux 系统变成一台SMB 服务器,使Windows 用户能够使用 Linux 的共享文件和打印机,同样的 Linux 用户也可以通过 SMB 客户端使用 Windows 上的共享文件和打印资源。
它的主要功能如下。
( 1 )提供 Windows 风格的文件和打印机共享。 Windows XP 、 Windows 2003等操作系统可以利用 Samba 共享 Linux 等其他操作系统上的资源,而从外表看起来和共享 Windows 的资源没有区别。
( 2 )在 Windows 网络中解析NetBIOS 的名字。为了能够利用局域网上的资源,同时使自己的资源也能被别人所利用,各个主机都定期地向局域网广播自己的身份信息。负责收集这些信息,提供检索的服务器也被称为浏览服务器,而 Samba 能够实现这项功能。同时在跨越网关的时候 Samba 还可以作为 WINS 服务器使用。
( 3 )提供 SMB 客户功能。利用Samba 程序集提供的 smbclient 程序可以 在Linux 中以类似于 FTP 的方式访问 Windows 共享资源。
( 4 )提供一个命令行工具,利用该工具可以有限制地支持 Windows 的某些管理功能。
Samba服务工作原理
①首先客户端发送一个 SMB negprot 请求数据报,并列出它所支持的所有 SMB 协议版本。服务器收到请求信息后响应请求,并列出希望使 用的协议版本。如果没有可使用的协议版本则返回 0XFFFFH ,结束通信。
②协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送 SesssetupX 请求数据报实现的。客户端发送一对用 户名和密码或一个简单密码到服务器,然后服务器通过发送一个 SesssetupX 应答数据报来允许或拒绝本次连接。
③当客户端和服务器完成了磋商和认证之后,它会发送一个 Tcon 或 TconX SMB 数据报并列出它想访问网络资源的名称,之后服务器会 发送一个 TconX 应答数据报以表示此次连接是否被接受或拒绝。
④连接到相应资源后, SMB 客户端就能够通过 open SMB 打开一个文件,通过 read SMB 读取文件,通过 write SMB 写入文件,通过 close SMB 关闭文件。
Samba服务器安装
在RedHat Enterprise Linux 5系统中,默认时没有安装Samba服务的,不过系统光盘给我们提供了rpm安装包。由于在安装Samba软件包时,需要依赖其它的软件,所以最好使用本地yum来安装。
一旦Samba服务开启之后,就会通过别的主机搜索到Samba服务器主机。搜索主机的方式有四种:
1、搜索计算机
2、网上邻居
3、UNC路径\\IP或名称\共享资源
4、在cmd命令行模式下。net use,net share。
Samba服务的主配置文件
smb.conf的几个常用变量
①客户端变量
%a | 客户端的体系结构(例如Samba,NT,Win98,或者Unknown)
%I | 客户端的IP地址(例如:192.168.2.200)
%m | 客户端的NetBios名
%M | 客户端的DNS名
---------------------------------------------------------------------
②用户变量
%g | %u的基本组
%G | %U的基本组
%H | %u的Home目录
%u | 当前的unix用户名
%U | 被请求的客户端用户名(不总是被samba使用)
---------------------------------------------------------------------
③共享变量
%p | 如果和%p不同,automounter的路径对应共享的根目录
%P | 当前共享的根目录
%S | 但前共享的名称
---------------------------------------------------------------------
④服务器变量
%d | 当前服务器进程的ID
%h | Samba服务器的DNS主机名
%L | Samba服务器的netbios名
%N | Home目录服务器,来自automount的映射
%v | samba版本
---------------------------------------------------------------------
⑤其他变量
%R | 经过协商的SMB协议
%T | 当前的日期和时间
Samba服务的主配置文件/etc/samba/smb.conf 由两部分构成。
1、Global Settings
该设置都是与 Samba 服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
①设置 Samba 服务器所属的群组名称或 Windows 的域名
workgroup= MYGROUP
②设置 Samba 服务器的简要说明
serverstring = Samba Server Version %v
③设置可访问 Samba 服务器的主机、子网或域
hostsallow = 192.168.1. 192.168.2. 127.
④设置 Samba 服务启动时,将自动加载的打印机配置文件
printcap name = /etc/ printcap
⑤设置是否允许打印配置文件中的所有打印机开
loadprinters = yes
⑥设置 guest 账号名
guestaccount = pcguest
⑦指定 Samba 服务器使用的安全等级
security= user
Samba服务器的安全等级共有以下 5 类。
(1)share安全等级
用户不要账号及密码即可登入SAMBA服务器
(2)user安全等级
由提供服务的SAMBA服务器负责检查账户及密码(默认的安全等级)
(3)server安全等级
检查账户及密码的工作由另一台Windows NT/2000或SAMBA服务器负责
(4)domain 安全等级
使用windows域中的服务器来验证用户和密码
(5)ads安全等级
当samba服务器使用ads安全级别加入到windows域环境中,其中包含有domain中的所有功能,并且可以具备域控制器的功能
⑧有多个网卡的 Samba 服务器设置需要监听的网卡
interfaces= 网卡 IP 地址或网络接口
bindinterfaces only=yes
⑨设置 Samba 服务器同时充当 WINS 服务器
winssupport = yes
⑩设置 WINS 服务器的 IP 地址
wins server = w.x.y.z
2、Share Definitions
该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。
[homes]
comment = Home Directories //目录文字说明
browseable = no //是否允许用户浏览homes主目录,建议使用默认值,不允许
writable = yes //是否允许写入个人主目录
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
创建Samba帐号库
samba将用户名和密码存放到了/etc/samba/smbpasswd中,在客户端提交用户名和密码资料后,samba回将其与该文件中的信息做比较,如果相同并且samba服务器其他安全设置允许,客户端与samba服务器连接才能成功。
建立samba账号:
samba账号不能直接建立,必须在系统中存在同名的系统账号,如建立一个user1的账号那么在系统中必须提前有一个user1的系统账号,一般的话Samba帐号库中的用户都不作为系统登录用户。
建立方式如下:
useradd -s:/bin/bash/nologin user1 #建立系统账号
passwd user1 #设置系统账号密码
smbpasswd -a user1 #建立samba账号
两个密码可以不一样
访问Samba服务器:
1.Linux客房机访问Samba共享服务:
smbclient -L //主机名或IP -U 登陆名 //列出共享
smbclient -L //localhost//查看本地情况.
smbclient //主机名或IP -U 登陆名%密码
应用案例:
要求:
1.所有的员工在公司都能流动办公,都能把自己的文件保存到Samba服务器上.
2.技术部和市场部都有各参的目录,同一个部门的人拥有一个共享目录,共它部门的人都只能访问在
3.所有的用户都不允许使用服务器上的shell,只能通过Samba访问服务器.
4.要求提供一个软件共享目录,存放一个常用软件,供公司员工使用.
5.提供临是文件目录,任何用户都可以对其进行读写(谁创建的,谁可以删)
分析:
1.要求员工都能流动办公,都能把文件保存Samb服务器上,这个利用home目录就可以实现.
2.创建market,tech组,创建组共享目录.
3.利用不可用的shell就可以如,/bin/false.
4.软件共享:software公司任何人都可以访问, 不能写.
5.TmpUpload:临时上传文件:
公司员工名单:
总经理:boss
技术部: tec (wj)
市场部:mkt(dom)
创建两个公共的目录,其中tmpupload的权限是所有用户可以访问并且可以操作文件。
在windows主机上显示的内容,如果一个用户登录过之后,就不允许另一个用户在同一台主机上进行连接。不过可以使用smaba服务器自带的工具smbclient来进行测试。
本文出自 “人生在勤,不索何获” 博客,谢绝转载!