1991年,Andrew Tridgwell通过对数据包的分析,而编写了Samba这个自由软件(Samba官方网站:http://www.samba.org),只要在类UNIX启用Samba服务,类UNIX系统就好像变为了Windows甜系统,可以利用SMB协议与Windows系统之间实现资源共享等功能。
Samba是开放源代码的GPL自由软件,可以说又是自由软件界的一个重大贡献。Samba的出现彻底解决了类UNIX与Windows之间的资源共享与访问,它以其简洁、实用、灵活配置、功能强大的特点受到越来越广泛的关注。也是因为这个原因,现在几乎所有的类UNIX都可以使用Samba服务。
由于Samba作为类UNIX系统和Windows的通信桥梁,在设计上是让类UNIX系统加入到Windows网络中,而不是让Windows加入类UNIX网络中,因此需要了解一下Windows网络的工作原理。Windows 9x、Windows Me、Windows NT中SMB使用137(UDP)、138(UDP)、139(TCP)、端口,Windows 2000以后的版本中使用445(TCP)端口。
Samba服务主要提供以下功能:
(1)共享UNIX系统上的资源(目录、打印机)。
(2)使用Windows上的共享资源(目录、打印机)。
(3)通过Windows对使用Samba资源的用户进行认证。
(4)使用WINS服务进行名称解析及浏览。
(5)通过SSL实现安全的数据传输。
Samba服务主要由以下两个进程组成:
(1)nmbd:进行NetBIOS名称解析,提供浏览服务显示网络上的共享资源列表。
(2)smbd:管理Samba服务器上的共享目录、打印机等。主要是针对网络上的共享资源进行管理服务。当要访问服务器时,要查找共享文件,这时要靠smbd这个进程来管理数据传输。
Samba服务与Samba客户端的工作流程如下:
(1)协议协商:客户端在访问Samba服务器时,发送negprot命令包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端情况,选择最优的SMB类型,并做出回应。
(2)建立连接:当SMB类型确认后,客户端会发送session setup命令数据包,提交账号、密码,请求与Samba服务器建立连接。如果客户端通过身份验证,Samba服务器会对session setup报文做出回应,并为用户分配唯一的UID,在客户端与其通信。
(3)访问共享资源:客户端访问Samba共享资源时,发送tree connect命令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户与共享资源的连接分配TID,客户端即可以访问需要的共享资源。
(4)断开连接:共享完毕,客户端向服务器发送tree disconnect报文关闭共享。
samba服务器安装
IP地址: 192.168.1.53
1、安装samba
登录系统检查是否安装了samba软件包,检查命令如下:
[[email protected] ~]# rpm -qa | grep samba
samba-winbind-clients-3.5.10-125.el6.x86_64
samba-3.5.10-125.el6.x86_64
samba-common-3.5.10-125.el6.x86_64
如果有输出则表示已经安装好了,没输出可以用 yum -y install samba 安装。
samba安装完会生成配置文件目录/etc/samba。
2、核心配置文件smb.conf
添加共享目录,内容如下:
[[email protected] ~]# cd /etc/samba/
[[email protected] samba]# cp smb.conf smb.conf.bak20121130 //对配置文件进行备份
[[email protected] samba]# vim smb.conf
[global] //表示以下的内容为全局配置,必须要有
workgroup = WORKGROUP //用来定义工作组,
netbios name = chlinux.net //用来定义windows中显示出来的计算机名
server string = my linux samba server //定义samba服务器的说明信息
log file = /var/log/samba/%m.log //定义samba的日志文件,%m表示客户端主机名,samba服务器会在指定的目录中为每个登录主句建立不同的日志文件
security = share //定义数据共享的方式,常用的有user和share,user表示需要密码验证后才能共享数据,share表示可以直接共享数据,
[sharing] //定义在windows中显示出来的共享目录
path = //data //共享数据的路径
writeable = yes //指定设置是否可写,yes为可写,no为不可写
browseable = yes //定义是否可以再windows下看到共享文件夹,如果要隐藏共享文件夹设置为no就是
guest ok = yes //定义匿名用户是否可写
3、建立共享目录:
[[email protected] samba]# mkdir /data //创建共享目录
[[email protected] samba]# chown nobody:nobody /data/ //由于要设计匿名用户可以上传和下载,需要给/data木授权为nobody
[[email protected] samba]# cp /etc/passwd /data/ //拷贝测试文件到共享目录
4、samba服务的组成和使用:
组成samba运行的有两个服务,一个是SMB,另一个是NMB,SMB是samba的核心,只有启动SMB服务才能实现文件的共享,而NMB服务的负责解析用的,类似于DNS实现的功能,NMB可以把linux系统共享的工作组名称与其IP对应起来。如果NMB没有启动,就只能通过IP访问共享文件。
可以通过/etc/init.d/smb start/stop/restart 来启动、关闭、重启,方法如下:
[[email protected] samba]# /etc/init.d/smb start
启动 SMB 服务: [确定]
[[email protected] samba]# /etc/init.d/nmb start
启动 NMB 服务: [确定]
[[email protected] samba]#
5、访问samba服务器的共享文件,在运行输入\\192.168.1.53
6、授权登录samba服务器:
1,添加系统级用户
首先添加share1、share2两个系统用户,并分别指定工作目录为/share1 和share2,操作如下:
[[email protected] samba]# useradd -d /share1 -s /sbin/nologin share1 //创建用户,指定home目录和shell
[[email protected] samba]# useradd -d /share2 -s /sbin/nologin share2
[[email protected] samba]# cp /root/install.log* /share1/
[[email protected] samba]# cd /share1
[[email protected] share1]# ll
总用量 56
-rw-r--r--. 1 root root 41933 12月 1 07:35 install.log
-rw-r--r--. 1 root root 8206 12月 1 07:35 install.log.syslog
2、创建samba登录用户,系统用户是linux上面对应的用户,而samba用户是客户端连接samba服务器时所需的用户。创建samba用户使用的命令是smbpasswd,而smbpasswd是通过读取/etc/passwd文件中存在的用户名,进而设置密码的。
下面分别为share1 和 share2设置samba服务器的登录密码,操作如下:
[[email protected] share1]# smbpasswd -a share1
New SMB password:
Retype new SMB password:
Added user share1.
[[email protected] share1]# smbpasswd -a share2
New SMB password:
Retype new SMB password:
Added user share2.
[[email protected] share1]#
3、配置smb.conf文件
[global]
workgroup = WORKGROUP
netbios name = chlinux.net
server string = my linux samba server
log file = /var/log/samba/%m.log
max log size = 50
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = 192.168.1.254/24 192.168.2.254/24
os level = 33
[share1]
path = /data
comment = This is share1
valid users = share1
writeable = yes
browseable = yes
[share2]
path = /data
comment = This is share2
valid users = share2
writeable = yes
browseable = yes
create mask = 664
directory mask = 755
writeable = yes
browseable = yes
max log size //定义日志文件的大小,设置为0代表不限制,默认单位是KB上面这段配置与上面那个例子基本相同,只是增加了一些权限控制的东西,新增各个选项的含义如下:
encrypt passwords //设定用户密码是否加密,yes表示加密,no表示不加密
smb passwd file //指定samba用户的密码文件
os level //定义samba server的OS level,OS level的值从0-255 ,windows NT的值为33 ,windows 95/98的值为1,samba server的os level值至少要大于33
comment //共享目录的说明
valid users //定义客户端访问的用户
create mask //定义客户端用户创建文件的默认权限为644,表示可读可写
directory mask //定义客户端用户创建目录的默认权限为755,表示可读可写可执行