Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41457
  • 博文数量: 6
  • 博客积分: 250
  • 博客等级: 二等列兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-25 19:43
文章分类
文章存档

2012年(2)

2011年(1)

2009年(3)

我的朋友

分类: LINUX

2009-06-10 11:15:58

    提到samba,总是让人联想到热情奔放的桑巴舞,一个linux下的网络服务,为什么会有这样一个有点奇怪的名字呢?其实,linux下很多的网络服务都有一个很有个性的名称,并且这些名称还有各自的说法甚至故事,了解它们的由来是很有意思的事情,可以大大增 加学习这些网络应用的兴趣。
samba是在1991年由一个叫作Andrew Tridgell的澳大利亚大学生编写的,目的是为了能在unix和dos上方便地进行文件共享, Andrew Tridgell最初把自己编写的这段程序命名为Server Message Block (SMB),但是smb是个缩写,而samba中既包含了smb,又是热情奔放的桑巴舞的名称,Andrew Tridgell就选择它来命名自己的程序,也就有了先在使用很广泛的“samba”这个网络服务的名称。
在samba组织的官方页面(
)上,是用这样一段话定义samba的--“Samba is an Open Source/Free Software suite that provides seamless file and print services to SMB/CIFS clients ”
samba官方组织的定义强调了samba的开源的,并且是为SMB客户端和CIFS客户端提供文件服务和打印服务的套件。
 samba 的发展历史
最初,Unix和Unix之间进行文件共享的是nfs,在客户端可以将nfs服务提供的共享目录mount到本地,并且就像本地目录那样使用,nfs的本意也就是network file system,但是它只能在Unix和Unix之间共享文件。
后来,微软在dos中,加入了允许NetBIOS管理磁盘I/O的新特性,这样就使得可以在网络上将硬盘中的资源都共享出来。在windows中,文件共享程序就是众所周知的CIFS。Widnows和widnows之间进行文件共享使用CIFS。
为了使widnows机器和Unix机器之间也能方面的共享文件,samba应运而生。
Samba经历了几个大版本的升级,目前比较新的版本是samba3.0.23d,更多的新版本信息,我们可以通过它的官方主页了解到。

samba的基本配置

1 查询Samba
红旗linux中已经自带了samba所需的包,可以通过rpm包管理器来确认这些包的名称和版本,或者可以直接在虚拟终端konsole中使用rpm查询命令:

    #rpm -qa |grep samba
能到名称中包含samba的几个rpm包,它们通常包括samba-client、samba-common和samba,其中samba-client主要提供了linux作为samba客户端时需要使用的smbmount、smbclient命令等;samba-common主要提供了samba的配置文件(smb.conf)和调试工具(testparm);而samba则主要提供samba的主要进程、帮助文件和启停管理等资源。
2 初次体验samba共享
 修改配置文件
确认了红旗linux中已经包含了samba的包以后,就可以准备开始用samba配置自己的共享了,
实现最简单的共享功能,只需要修改几个基本的配置参数。红旗linux中,配置文件位于/etc/samba/目录中,可以看到,smb.conf配置文件中是以中括号括起的名称为一段开头的,我们在[global]中进行samba的全局配置:
[global]
        workgroup =  COMPANY    #规定加入哪个工作组或者域
        netbios name = REDFLAG  #规定共享主机名
        security = USER  #这是个重要的安全参数,有4个值;user是默认的安全级别,后面我们会再讲到这个参数

每一个登录samba server的用户都可以拥有自己的主目录,只有主目录拥有者可以登录,浏览和在自己的主目录中创建文件:
[homes]
        comment = Home
        read only = no    #read only与writables呼应,可以控制对目录的读写权限
        writable = yes
        browseable = no   #在server的共享资源中不可见
还可以配置共享打印机,通常smb.conf文件中默认带有这一段:
[print$]
        comment = Printer Drivers Download Area
        path = /var/samba/printer
        guest ok = Yes
在文件最后定义想要共享出去的文件夹,例如是/opt/files目录,而希望被看到的共享名称是music:
[music]
         path = /opt/files #本地文件夹路径
         read only = yes  #目录是只读共享
         public = ok  #所有用户都可以访问
好了,保存配置文件。
现在可以使用刚才提到的调试工具testparm来检测配置文件:
    #testparm
    Load smb config files from /etc/samba/smb.conf
    Processing section "[homes]"
    Processing section "[print$]"
    Processing section "[music]"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    Press enter to see a dump of your service definitions
提示我们“Loaded services file OK.”,说明配置文件没有错误,如果按下enter键,还可以列出去除注释语句的配置文件,这样看起来更加一目了然。
修改配置文件后,还需要启动samba服务。
     #service smb start
      Starting SMB services:                                     [  OK  ]
      Starting NMB services:                                     [  OK  ]
Samba的主配置文件的参数超过200个,篇幅有限,我们只列举了几个比较常用的参数,随着后文的深入,我们会逐渐接触到更多的功能,遇到配置文件中的新参数,我们会以注释的方式进行说明。
 使用samba客户端访问共享资源
smbmount可以用来将samba server提供的共享资源挂在到本地,使用方法类似于mount,   
mount -t smbfs -o username=tridge,password=foobar //fjall/test /data/test
这是不加任何参数输入smbmount命令后,给出的一个命令使用示例;其中,username后面写samba用户名,password后面写samba用户口令,//后面写samba server的名称或者ip地址,当然samba server的名称要经过解析才能使用,然后/后面是共享文件夹的名称,最后写本地的一个挂载目录。如果使用过mount命令,对这个命令就会很容易理解,它也相当于是mount命令的一种扩展。
如果在/etc/fstab文件中定义一行,在linux启动的时候就挂载samba server上的资源,则有点类似widnwos上的网络映射驱动器了。
smbclient -L hostname <-U username>
可以列出指定samba server上的的共享资源。
smbclient \\\\server\\共享名 <-U username>
登录samba server,使用网络共享资源;登录后的指令类似ftp,这里就不再详述。

关键词security
security控制了samba服务器的验证方式,它有4个值,分别是share、user、server和domain, 这4个安全级别的定义如下:
share:所有用户都可以不用提供用户名和密码,就可以访问samba服务器上的共享资源,安全级别是最低的。
user:用户在访问samba服务器上的共享资源时,需要先提供用户名和密码进行验证,通常情况下,samba都运行在这个级别上。 samba有单独的用户帐号,系统用户不一定都是samba用户,但是要添加samba用户,首先要添加系统帐号,然后再使用smbpasswd将系统帐号添加到samba用户帐号中。
例如,已经建立了系统帐号work,现在需要将这个帐号添加到samba中:
    #smbpasswd -a work
    New SMB password:
    Retype new SMB password:
    Added user work.
samba的密码不需要与系统帐号的密码相同。
samba的密码文件是/etc/samba/目录下的smbpasswd,添加一个系统帐号为samba帐号后,都会在这个文件中生成一行,记录了帐号与口令的对应信息。
server:普通用户不会感觉到server极和user级有什么不同,用户在访问samba服务器上的共享资源时,仍然需要提供用户名和密码,但是可以由另外的服务器来进行统一验证,如果验证失败了,那么降到user级,进行本地验证,如果成功,可以访问共享资源。
domain:samba把用户名和密码windows域控制器(PDC)进行验证,同样,如果验证失败了,那么降到user级,进行本地验证。 在后面,我们会讲samba是如何在这个级别上加入windwosPDC并实现文件服务器功能的。在实际中,有些项目提出linux是否可以实现类似widnowsPDC的功能,我们的解决方案是使用linux的ldap进行统一验证,将ftp文件服务器、samba文件服务器、邮件等等资源管理起来,可以替代windows实现域管理功能,这种实现方式是很具有实际意义的。

samba的安全关键词

关键词encrypt passwords

encrypt passwords的值可以是yes或者no,它控制了是否允许在客户端与服务器之间验证的时候,在网络上使用明文密码传输,通常现在的encrypt passwords都定义为yes,因为在Windows95R2以及WindowsNT SP3以后的版本中,都不允许进行明文密码的传送,否则将拒绝与samba server建立连接。

关键词hosts allow和 hosts deny

hosts allow和hosts deny 这一对关键词从名称来看,很显然是定义允许访问samba server的客户端和拒绝访问samba server的客户端,它们可以对主机名、某一个ip或者某一个ip段进行限制;并且还提供了参数EXCEPT来进行进一步的限制。
如果允许一台叫visitor的主机访问samba server,可以这样配置:
hosts allow = visitor
如果有多台主机,用“, ”分隔开,例如:
hosts allow = visitor1, visitor2
如果允许172.16.80/255.255.255.0这个网段访问samba server,可以这样配置:
hosts allow = 172.16.80.0/255.255.255.0
如果允许172.16.80这个网段访问samba server,但是172.16.80.166这个ip除外,可以这样配置:
hosts allow = 172.16.80. EXCEPT 172.16.80.166
hosts deny的使用规则和hosts allow的语法规则完全一样,只是它优先定义被拒绝的主机。

项目分析
某公司有研发(dep),技术(tech),财务(finance)和领导(leader)4个部门,每个部门中的每个用户有自己的主目录,对主目录,只有这个用户有完全权限;
有一个公共目录,存放每个用户都能读写的资源;
每个部门都有自己的部门目录,领导部门的目录,外人不可见,技术部门的用户tech01和研发部门的dep01以及财务部门的finance01可以访问,只有领导部门的leader01可以修改;
财务部门的目录,财务部门和领导部门都能访问,但只有财务的用户 finance01可以修改;
研发部门的目录,研发部门和技术部门的tech01的都能访问,只有研发部门可以修改;
技术部门的目录,技术部门和研发部门的用户dep01可以访问和修改。
首先我们需要建立4个系统组帐号dep、tech、finance和leader;
建立各部门的目录/home/leader、/home/finance、/home/dep、/home/tech;
建立公共目录/home/public
建立目录后,需要开放这些目录的本地权限。
再添加用户帐号,各自用户的主目录是/home下与用户名相同的目录, dep01属于dep组,tech01属于tech组,finance01属于finance,leader01属于leader组;
然后,将dep01、tech01、finance01、leader01分别添加到samba帐号中,下面就可以修改smb.conf文件:
对安全级别没有特殊要求,那么我们定义为user级:
[global]
         workgroup =  company
         netbios name = redflag
         security = user 
         server string = samba server   #关于samba服务器的描述语句
         encrypt passwords = yes
         smb passwd file = /etc/samba/smbpasswd
这个需求的主要的功能需要在各个文件夹的配置中实现,首先定义用户主目录:
[homes]
         comment = User Home Directories
         writable = yes
         browseable = no
         valid users = %S  #允许访问的用户
         create mode = 0644  #与create mask参数意思相同,在主目录中建立一个文件的默认权限
         directory mode = 0775 #与directory mask参数意思相同,在主目录中建立一个目录时的默认权限
建立每个部门的目录,并实现需求中定义的不同权限:
[leader]
         comment = leader
         path = /home/lingdao
         browseable = no
         public = no
         valid users = @leader, dep01, tech01, finance01 #可以用@来定义某一组用户
         wirte list = leader01  #对目录有写权限的用户
[finance]
         comment =  finance
         path = /home/finance
         browseable = no
         public = no
         valid users = @leader, @finance
         wirte list = finance01
[dep]
         comment =  development
         path = /home/dep
         public = no
         valid users = @dep, tech01
         wirte list = @dep
[tech]
         comment =   tech
         path = /home/tech
         public = no
         valid users = @tech, dep01
         wirte list = @tech, dep01
[public]
         comment = public
         path = /home/public
         public = yes
         read only = no
         writable = yes
上面的实例的使用samba server简单实现了新建一个部门级别的linux 文件服务器的功能。


阅读(576) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~