Samba文件服务器

Samba服务器和FTP服务器都是资源共享的两种文件服务器,但Samba服务器通常用于局域网共享,而FTP服务器则用与internet中,

Samba在linux/unix系统中实现了SMB/CIFS网络协议,使的跨平台文件共享变的更加方便,适用Samba可以很好的解决不同系统之间的文件互访问题。

samba的工作原理:

步骤1协议协商:

客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应。

              --------negprot请求------->

客户端                                              服务器

              --------negprot响应------->

步骤2.建立连接

当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用。

              --------session setup &X请求------->

客户端                                                服务器

              --------session setup &X响应------->

步骤3.访问共享资源

客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源哈。

              --------tree connect &X请求------->

客户端                                                 服务器

              --------tree connect &X响应------->

步骤4.断开连接

共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接。

              --------tree disconnect请求------->

客户端                                                  服务器

              --------tree disconnect响应------->


下面我就来搭建下Samba文件服务器:(在这里我忽略了防火墙,特简单就是把udp137-138端口,tcp139端口和445端口开放就可以)

(一)挂载光盘并安装Samba包:

[root@localhost Server]# mount /dev/cdrom /mnt/

安装下面四个包: rpm -ivh samba-*

samba-3.0.28-0.el5.8.i386.rpm(samba服务器端包)       

  samba-common-3.0.28-0.el5.8.i386.rpm(samba C/S都需要适用的公共文件)

samba-client-3.0.28-0.el5.8.i386.rpm(samba客户端包)

samba-swat-3.0.28-0.el5.8.i386.rpm(web方式管理工具包)

samba主配置文件分析:vim /etc/samba/smb.conf


# SELINUX NOTES:(selinux选项,特别要注意也是不可访问原因之一)
#
# If you want to use the useradd/groupadd family of binaries please run:
# setsebool -P samba_domain_controller on
#
# If you want to share home directories via samba please run:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory you want to share you should mark it as
# "samba-share_t" so that selinux will let you write into it.
# Make sure not to do that on system directories as they may already have
# been marked with othe SELinux labels.
#
# Use ls -ldZ /path to see which context a directory has
#
# Set labels only on directories you created!
# To set a label use the following: chcon -t samba_share_t /path

[global]                                                                                                                        //全局设置对整个samba服务器生效

        workgroup = MYGROUP                                //samba所在的 工作组或者是域

        server string = Samba Server Version %v            //服务器描述

;       hosts allow = 127. 192.168.12. 192.168.13.

我把这注释行也拿出来因为我觉得这行非常重要,“hosts allow”可以设置仅允许访问共享的客户机(ip地址、网络地址的形式,多个地址之间用空格或者是逗号隔开),“hosts deny”可以设置仅拒绝访问共享的的客户端。例如仅允许192.168.168.0/24、173.17.0.0/16网段客户段访问可以设置成:hosts allow =192.168.168.  173.17. 0.

         security = user               //设置服务器的安全模式其共有五种

  这五种模式是:

1. share安全级别模式:可以匿名访问     

2. user安全级别模式:需要提交合法的用户名和密码

3. server安全级别模式:提交到指定的一台samba服务器上进行验证,如出错客户端就会一user级别访问,

4.domain安全级别模式:验证工作服将由windows域控制器负责

5. ads安全级别模式:当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。

       passdb backend = tdbsam

[homes]用户目录共享设置
        comment = Home Directories(共享目录的注释和说明信息)
        browseable = no(在网上邻居中是否可见,如是no则是隐藏共享)
        writable = yes(是否可写,read  only相反)
;       valid users = %S(设置访问用户,@组名)
;       valid users = MYDOMAIN\%S

[printers]

        comment = All Printers            //共享目录的注释和说明信息

        path = /var/spool/samba          //共享目录在服务器中的路径

        browseable = no                  //在网上邻居中是否可见,如是no则是隐藏共享

        guest ok = no                    //是否可以匿名访问
        writable = no                    //是否可写

        printable = yes                 //每一个打印服务必须定义为 printable = yes


案例一:将“/var/public/movies"目录发布为共享文件夹,共享名为movie(其实就是匿名访问)

1.建立配置文件如下:

[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        # logs split per machine
        # max 50KB per log file, then rotate
        security = share     //将安全级别设置为share
        passdb backend = tdbsam
        # the login script name depends on the machine name
        # the login script name depends on the unix user used
        # disables profiles support by specifing an empty path
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes
[movie]
        comment = this is a share file
        path = /var/public/movies
        browseable = yes
        guest ok = yes

        writable = yes

2.建立共享目录:[root@ns1 samba]# mkdir -p /var/public/movies

为了便于测试我们在目录中建立多个文件mkdir /var/public/movies/{aa,bb,cc}.file    //我们在此建立了aa,bb,cc文件

3.检查配置文件格式是否正确:

[root@ns1 samba]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE

说明配置没有错误!!!

启动samba服务:

[root@ns1 samba]# service smb restart

4因为selinux为强制,所以设置如下:



修改共享文件夹selinux上下文: chcon -t samba_share_t /var/public/movies/

5.在windowns下测试匿名效果:

22fc8dc871fedd6f9d163dcc.jpg

我们刚才不是在配置文件中设置writable = yes了吗?我们测试下看我们能不能写入??

25382f0919c8f5b97b8947ac.jpg
结果是不能写入!!!

原因在与网络共享权限是有写入权限了,但是本地权限中我查看了下只有执行和读取,我们加写入权限给本地目录:

[root@ns1 ~]# chmod o+w /var/public/movies/

在看看结果:

fdd12e6c5415f6a9e7113ad3.jpg

匿名验证成功了!!!


案例二:将“/var/public/movies"目录发布为共享文件夹,共享名为movie,授权只能vina、test1和root组访问,并将test1用户映射为aa、bb等用户,root用户有写入权限,通过访问建立的文件夹的默认权限是744,文件夹的默认权限为600


1.建立配置文件如下:

[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        # logs split per machine
        # max 50KB per log file, then rotate
        security = user                   //设置安全级别为user
        passdb backend = tdbsam
        # the login script name depends on the machine name
        # the login script name depends on the unix user used
        # disables profiles support by specifing an empty path
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
          username map = /etc/samba/smbusers              //用户名称映射时必须由此项

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

[movie]
        comment = this is a share
        path = /var/public/movies
        guest ok = no                         //相当于是public,是否可以匿名访问
        read only = no
        valid users = vina,test1,@root        //授权用户和组
        write list = root                     // 设置只有root用户可写
        directory mask = 0744                 //建立文件夹的默认权限是744
         create mask = 0600                   // 创建文件的默认权限是600

检查配置文件的格式是否正确:

[root@ns1 public]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
说明配置文件的格式上不存在任何问题!

2.建立samba用户数据库:

[root@ns1 public]# useradd vina
[root@ns1 public]# smbpasswd -a vina
New SMB password:
Retype new SMB password:
Added user vina.

------依次添加root等用户

smbpasswd 参数:

-h显示smbpasswd的帮助命令

-a添加指定的samba用户

-d禁用指定的samba用户

-e启用指定的用户帐号

-x删除指定的用户帐号

不加任何参数时是修改samba用户密码

3.做别名映射,将test1映射成aa,bb,cc等用户

[root@ns1 samba]# vim smbusers

# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
test1 = aa bb cc

4重新启动服务:service smb restart

5验证效果:(我刚开始服务器是192.168.0.1后来我改了服务器IP地址为192.168.0.60~~)

vina登录samba服务器

0b2b605efec0e416853524fd.jpg

我们接下来在windowns上做测试,如果先是在windowns上做的必须断开共享:

C:\Users\jia>net use file://192.168.0.60/movie /delete
\\192.168.0.60\movie 已经删除。

用root登录:

f1ba7928e3f82f638a82a1ff.jpg
可以创建文件和文件夹,在来看看文件和文件夹的权限:

ceca761ea9190975203f2ee3.jpg

哈哈~文件夹默认权限的权限是744,文件默认权限是600,成功了!!

接下来验证名称映射:(注意别名aa和bb等不是系统中的用户)

aa登录

00a42bac91f200d9cbefd0f9.jpgaa登录成功!

bb登录

400c45071891c6506a60fbed.jpgbb登录成功
到此就做完了实现了案例中的描述~~


你可能感兴趣的:(服务器,文件,samba)