samba是架起windows和linux的桥梁,并且提供不同系统间的共享服务!

samba的工作原理

samba服务功能十分强大,这与其通信基于smb协议有关。smb不仅提供目录和打印机的共享,还支持认证,权限设置。在早期,smb运行于nbt协议上使用udp协议上的137,138端口及tcp协议的139端口。后期smb经过开发,可以直接运行tcp/ip协议,没有额外的nbt层,使用tcp协议的445端口!

samba工作流程:

当客户达端访问服务器时,信息通过smb协议进行传输,其工作过程可以分为4个部分:

1,协议协商:客户达端在访问samba服务器时,发送negport指令数据包,告知目标计算机其支持的什么的类型。samba服务器根据客户端的情况,选择最优的smb类型,并做出回应!

2,建立连接:当smb类型确认之后,客户端会发送session setup数据包,提交帐号和密码,请求与samba服务器建立连接。如果客户端通过身份验证,samba服务器会对session setup

报文做出回应,并为用户分配唯一的uid,在客户端与其通信时使用!

3,访问共享资源:客户端访问samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名。如果设置允许,samba服务器会为每个客户端与共享

资源的连接分配tid,客户端即可以访问需要的共享资源!

samba的主配置文件在/etc/samba/smb.conf,通过修改这个配置文件来实现我们的各种需求!

基本samba服务器搭建流程主要分为四步:

1:编辑主配置文件smb.conf,指定需要共享的目录,并未共享目录设置共享权限!

2:在smb.conf文件中指定日志文件名称和存放路径。

3:设置共享目录的本地文件权限

4:更新加载配置文件或重新启动smb服务使配置生效!

smb.conf主配置文件:

smb.conf文件大概有280行,smb.conf大致分为3部分,先简单了解一下:

smb.conf文件开头部分为samba配置简介,告诉使用者smb.conf文件的作用和使用信息!smb.conf文件中以“#”开头的为注释,为用户提供相关配置的解释信息。以“;”开头的是smb.conf配置的格式范例,默认是不生效的,我们通过去掉前面的“;”号,并加以修改来实现想使用的功能!

#======================= Global Settings =====================================

[global]

Global Settings为全局变量区域,该区域的设置是针对所有共享资源的。

samb的配置通用格式是 “字段  = 设定值”

1:设定工作组或域名称。工作组是网络中,地位平等的一计算机,可以通过设置workgroup字段,来对samba服务器所在的工作组或域名进行设置。

 workgroup = WORKGROUP    (WORKGROUP为windows的默认工作组,若想和windows通信,此处可设为此值)

2:服务器描述:在一个工作组中,可能存在多台服务器,为了方便用户浏览,可以在server string配置相应的描述,这样用户通过描述就知道自己要登录的服务器:

 server string = Samba Server Version %v

3:设置samba服务的安全级别:

 security = share/user/server/domain/ads

security为用户的安全级别,用来适应不同的企业服务器的需求!

share:客户端登录samba服务器,不需要输入用户名和密码,就可以浏览samba服务器的资源。适用于公共的共享的资源,安全性差,需要配合其它权限设置,保证samba的安全性!

user:客户端登录samba服务器,需要提×××法的帐号和密码,经过服务器验证,才可以访问共享资源。服务器默认为该级别!

server:客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问!

domain:如果samba服务器加入window环境中,验证工作由windows服务器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器特性,samba早期使用此级别登录windows域!

ads:当samba服务器使用ads安全级别加入到windows域中,其中包含domain级别的所有功能,并可以具备控制域的功能!

3:shonare definitions共享服务定义:

1)设置共享名

共享资源发布后必须为每一个共享目录或打印机设置不同的共享名,为网络用户访问时使用,并且共享名可以与元目录名不同。

[homes]           //共享名为homes

2)共享资源描述:网络中存在各种共享资源,为了方便用户识别,可以为其添加备注信息:

 comment = share for users

3)共享路径:共享路径的原始完整可以用path字段进行发布,务必指定正确:

 path = /tmp/samba

4)设置匿名访问:

  public = no/yes               //yes允许匿名,no不允许匿名访问

5)设置访问用户

如果共享资源存在重要数据,需要对访问用户进行审核,使用valid users字段进行设置

valid  users =  用户名
valid  users =  @组名       //只有被设定的用户才能访问!

6)设置共享目录:共享目录如果限制用户的读写操作,可以用readonly实现:

readonly = yes /no

7)设置目录可写:

 writeable = yes/no

samba服务日志文件:

日志文件对samba非常重要,它存着客户端访问samba服务器的信息,以及samba服务的错误日志提示信息!

在/etc/samba/amb.conf文件中,log.file为设置samba日志的字段!

samba服务的日志文件默认存在/var/log/samba/中,其中samba会为每个连接到samba服务器计算机分别建立日志文件。

nmbd.log记录nmbd进程的解析信息

smbd.log记录用户访问samba服务器的问题,以及服务器本身的1错误信息,可以通过该文件获取大部分的samba维护信息。当客户端访问samba服务器后,会自动添加客户端的相关日志!

安装系统时如果没有安装samba服务,请用以下命令安装:

yum install -y samba samba-client /安装samba-clinet插件是为了在Linux系统中访问分享的目录

设置一个共享目录,使用用户名和密码登录

1)配置smb.conf配置文件:

   修改配置文件
         workgroup = WORKGROUP
        server string = Samba Server Version %v
         security = user

然后在文件最后加上:

[shares1]
        comment = share for users
        path = /tmp/samba
        browseable = yes
        public = no
        writeable = yes

如果共享目录不存在,则需要创建共享的目录:

[root@nulifendou ~]# cd /tmp         
[root@nulifendou tmp]# ls              //共享目录已存在
samba  yum.log

添加用户

注意添加的用户必须时系统中存在的用户,因此在添加用户之前必须先创建系统用户。

添加账户所使用的命令为pdedit;

pdedit [-axL] username
-a:为添加账户
-x:为删除账户
-L:为列出当前的samba账户
[root@nulifendou tmp]# useradd test2        //在服务端创建一个用户,用来映射samba服务的虚拟用户
[root@nulifendou tmp]# pdbedit -a test2     //把创建的用户加入samba、服务
new password:
retype new password:
Unix username:        test2
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-1414275737-2304374364-3016793499-1001
Primary Group SID:    S-1-5-21-1414275737-2304374364-3016793499-513
Full Name:
·····

启动samba服务

[root@nulifendou tmp]# service smb start
启动 SMB 服务:                                            [确定]

在windows端打开运行窗口,输入“\\服务器ip地址”,弹出界面输入用户名和密码即可看到分享的目录!

wKioL1Z1aLiC1xqoAABI3iQerAQ437.png

wKiom1Z1aKzBXrHiAABIQSKQqPM773.png


在linux端查看samba服务:

在linux上安装samba-client软件,然后利用smbclient命令来访问samba服务器。

[root@slave ~]# yum install -y samba-client
[root@slave ~]# smbclient //192.168.1.120/lianxi -U user1    //使用smbclient命令
Enter user1's password:                                    //输入密码
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> ?                                          //输入?号,显示可以使用的命令
?              allinfo        altname        archive        blocksize      
cancel         case_sensitive cd             chmod          chown          
close          del            dir            du             echo           
exit           get            getfacl        geteas         hardlink       
help           history        iosize         lcd            link           
lock           lowercase      ls             l              mask           
md             mget           mkdir          more           mput           
newer          open           posix          posix_encrypt  posix_open     
posix_mkdir    posix_rmdir    posix_unlink   print          prompt         
put            pwd            q              queue          quit           
readlink       rd             recurse        reget          rename         
reput          rm             rmdir          showacls       setea          
setmode        stat           symlink        tar            tarmode        
translate      unlock         volume         vuid           wdel           
logon          listconnect    showconnect    ..             !              
smb: \> help rd                                      //用help显示命令的帮助信息
HELP rd:
	<directory> remove a directory

smb: \> ls
  .                                   D        0  Sun Dec 18 12:27:40 2016
  ..                                  D        0  Mon Dec 19 07:01:30 2016
  share.txt                           A       21  Sun Dec 18 12:27:40 2016
  share                                        5  Sun Dec 18 12:25:29 2016

		35889 blocks of size 524288. 27827 blocks available
smb: \> get share
getting file \share of size 5 as share (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec)
smb: \>

还有一种方式就是用挂载的方式

mount -t cifs //ip地址/[共享目录]  /【当前一个目录】
[root@lianxi2 11]# mount -t cifs //192.168.1.120/share /mnt -o username=  ,password=

用之前需要安装一个工具:

yum install -y cifs-devel