一,Samba的简单介绍
1.Samba的作用:
它能够使windows用户通过“网上邻居”,等熟悉的方式直接访问Linux上的资源,也能使linux利用SMB客户端程序访问Windows的共享资源。

2.SMB协议简介:
SMB(Server Message Block,服务信息块),看作是局域网上的共享文件夹/打印机的一种协议.

3.Samba服务的简介:
Samba属于GNU Public License (GPL)软件,任何用户都可以合法且免费的使用他可以到其官方网站http://www.samba.org 下载.

Samba的主要功能:
1,提供windows风格的文件和打印机共享。
2,在Windows网络中解析NetBios的名字
3,提供SMB客户端,linux用户可以利用smbclient利用类似于ftp的形式访问windows资源.
4, 提供命令工具,利用该工具可以有限制地支持windows的某些管理功能.

二,Samba的安装

1.Samba服务的安装:
[root@www ~]# rpm -qa |grep samba   //查看是否安装软件,我已经安装好啦.
  1. samba-common-3.0.10-1.4E.2
  2. samba-client-3.0.10-1.4E.2
  3. system-config-samba-1.2.21-1
  4. samba-3.0.10-1.4E.2
复制代码
2.rpm -ivh ....//如果没有安装将以上套件包安装上.

三,Samba服务配置

1.查看共享服务需要打开的端口
[root@www ~]# cat /etc/services | grep netbios

  1. netbios-ns      137/tcp                         # NETBIOS Name Service
  2. netbios-ns      137/udp
  3. netbios-dgm     138/tcp                         # NETBIOS Datagram Service
  4. netbios-dgm     138/udp
  5. netbios-ssn     139/tcp                         # NETBIOS session service
  6. netbios-ssn     139/udp
复制代码
注:这几个服务需要打开,否则用户将无法访问linux服务器上的共享资源,还要注意防火墙的是否允许Windows访问linux资源.

2.配置文件详细介绍:
#grep -v  '^#' /etc/samba/smb.conf  | grep -v '^$'|grep -v '^;'    //忽略注释配置samba文件

  1. [global]
  2.    workgroup = WORKGROUP
  3.    server string = Samba Server
  4.    printcap name = /etc/printcap
  5.    load printers = yes
  6. cups options = raw
  7. log file = /var/log/samba/%m.log
  8.    max log size = 50
  9.    security = user
  10.    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  11.    dns proxy = no
  12.    idmap uid = 16777216-33554431
  13.    idmap gid = 16777216-33554431
  14.    template shell = /bin/false
  15.    winbind use default domain = no
  16. [homes]
  17.    comment = Home Directories
  18.    browseable = no
  19.    writable = yes
  20. [printers]
  21.    comment = All Printers
  22.    path = /var/spool/samba
  23.    browseable = no
  24.    guest ok = no
  25.    writable = no
  26.    printable = yes
复制代码

          可以看到Samba的配置文件分为三段.
          [global] :这个小节主要包含全局参数.
       [homes]  :这个小节用于共享存储在\home中的Linux用户目录
       [printers] :用于共享本地linux打印机文件/etc/printcap中列出的所有打印机.

[global]  全局参数配置
      
  1. workgroup = WORKGROUP
  2.        netbios = dolinux.cn
  3.        server string = NetSeek's Samba Server(%h Samba Server)
  4.        hosts allow = netseek,cnseek.org,192.168.0. EXPECT 192.168.0.5
复制代码
          //允许主机名为netseek的客户端访问,允许域为cnseek.org的域访问,允许192.168.0.*所有的

主机均可访问,
       除了192.168.0.5之外.
      printcap name = /etc/printcap  //Samba启动是,将自动加载的打印机配置文件,建议默认即可.
      load printers = yes            //允许自动加载浏览列表,默认即可.
      
       log file = /var/log/samba/%m.log  samba相关的日志文件.
关于变量介绍:#man 5 smb.conf 后搜索%后可以看到很多参数介绍:
变量       说明      
客户端变量   
%a   客户端体系:
比如: Win98, WinNT, Samba ...   
%I   客户端IP地址      
%m 客户端NetBios名  
%M 客户端DNS名      
用户变量      
%g  用户%u 主要组   
%H  用户%u home 目录      
%u  Unix 当前用户名  
共享变量      
%P  当前共享的根目录      
%S  当前的共享名      
服务器变量   
%h  Samba服务器的DNS名字  
%L  Samba服务器的Netbios名字      
%v  Samba版本   
其他变量      
%T  当前日期和时间

security = user   //使用的安全等级,默认值为user,
       其安全等级分为5类:
(1)share
   当客户端连接到该等级的Samba服务器时,不需要输入账号和密码,就可以访问samba服务器上的共享
资源,但安全性无法保证.
(2)user
   用户需要输入有效的密码,通过验证后才能使用服务器的共享。
(3)server
   与user等级相同,也需要输入有效的账号和密码,但需要指定口令服务器:;   password server =  
<NT-Server-Name>
eg: security = server
    password server= SMB2
    smb passwd file =/etc/samba/smbpasswd_smb2
(4)Samba服务器加入到windows NT域中后,samba的服务器不再负责账号和密码的验证,统一由域控制
器负责,则使用访安全等级,同时也必须指定口令服务器。
(5)ads安全等级
Samba服务器加入到windows活动目录后,使用访安全等级。同时也需要指定口令服务器.

;  password level = 8
;  username level = 8  //用户名和密码长度限制.

encrypt passwords = yes  //使用口令加密
smb passwd file = /etc/samba/smbpasswd  //smaba账号存放文件,注意误必采用加密形式,否则要改win注册表,应为win也采用啦加密方式.

username map = /etc/samba/smbusers //用户映射
功能:将不同的用户映射成为一个用户,
#vi /etc/samba/smbusers
  1. root = administrator admin
  2. nobody = guest pcguest smbguest
复制代码
格式:
单独的linux账号 = 要映射的windows账号列表.
netseek = testok

;   interfaces = 192.168.12.2/24 192.168.13.2/24  //监听多个网卡
格式:interfaces = 网卡IP地址或网络接口.
eg: interfaces = eth0
wins support = yes  //设置samba充当wins服务器(WINS 名称服务)
wins server = w.x.y.z  //设置wins服务的IP地址.

#testparm //技巧:检查smb.conf 配置文件内是否存在语法错误:

[homes] 设置共享目录:
  1. [homes]
  2.    comment = Home Directories   //目录文字说明
  3.    browseable = no              //是否允许用户浏览homes主目录,建议使用默认值,不允许.
  4.    writable = yes               //是否允许写入个人主目录.
复制代码
comment = 文字说明内容.
browseable = no 表示禁止浏览,也就是本目录只参有权使用的用户是可以看到的.
writable = yes 允许有权限限的用户写入
vaiid users = netseek,lin,@share 只允许netseek,lin,用户share组的.

设置一个共享目录:
  1. [shares]
  2.    comment = NetSeek's share Directory
  3.    read list = netseek
  4.    write list = @share
  5.    path = /home/share
复制代码
注:netseek 这个用户可以读,share组的用户可以读写,所有testok这个用户对这个目录可读可写.

  1. [printers]  共享打印
  2.    comment = All Printers
  3.    path = /var/spool/samba
  4.    browseable = no
复制代码
                  //如果允许guest 打印,只需在末尾加入public = yes
  1. # Set public = yes to allow user 'guest account' to print
  2.    guest ok = no  
  3.    writable = no
  4.    printable = yes
复制代码
3.用户创建:
系统用户映射给samba
#cat /etc/passwd | /usr/bin/mksmbpasswd.sh > /etc/samba/smbpasswd
为用户添加SMB口令:
#smbpasswd netseek
New SMB password:*******
Retype new SMB password:*******

添加新用
为系统加用户后,再添加到samba用户中:
#adduser smb
#smbadduser smb:wsmb(可以不一样,不过管理员为啦好记忆,可以用一样的.)

给上面定义的share目录添加samba用户:
  1. #groupadd share
  2. #useradd testok
  3. #smbpasswd testok
  4. #usermod -G share testok 将test用户添加到share组中
  5. #mkdir /home/share
  6. #chown :share /home/share
  7. #chmod -c g+rwx /home/share 设置share组对该目录有读写和执行权限
复制代码
4.服务启动:
  1. /etc/rc.d/init.d/smb start
  2. /etc/rc.d/init.d/smb restart
  3. #chkconfig smb on
  4. #chkconfig --list smb
复制代码
四,访问Samba服务器:
1.Linux客房机访问Samba共享服务:
smbclient -L //主机名或IP -U 登陆名 //列出共享
smbclient -L //localhost  查看本共情况.

[root@oracle ~]# smbclient -L //oracle.dolinux.cn  查看Samba服务器共享情况.

  1. Password:
  2. Domain=[ORACLE] OS=[Unix] Server=[Samba 3.0.10-1.4E.2]
  3. smb: \>
  4. Password:
  5. Anonymous login successful
  6. Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.10-1.4E.2]

  7.         Sharename       Type      Comment
  8.         ---------       ----      -------
  9.         tech            Disk      Tech 's Files
  10.         market          Disk      Market 's Files
  11.         Software        Disk      Share Software
  12.         TmpUpload       Disk      Temp Files
  13.         IPC$            IPC       IPC Service (NetSeek's Samba server)
  14.         ADMIN$          IPC       IPC Service (NetSeek's Samba server)
  15. Anonymous login successful
  16. Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.10-1.4E.2]

  17.         Server               Comment
  18.         ---------            -------
  19.         IBM-5B367FC73A5      
  20.         ORACLE               NetSeek's Samba server

  21.         Workgroup            Master
  22.         ---------            -------
  23.         WORKGROUP            IBM-5B367FC73A5
  24.         smbclient //主机名或IP/共享文件夹  -U  登陆名
  25. [root@oracle ~]# smbclient //oracle.dolinux.cn/tech -U seek
  26. Password:
  27. Domain=[ORACLE] OS=[Unix] Server=[Samba 3.0.10-1.4E.2]
  28. smb: \> (ls,put,get,mput *,mget *)
复制代码

smbstatus查看Samba资源状态:
#smbstatus -d   查看目前Samba服务的使用状况.
#smbstatus -u netseek

加载资源:
       smbmount 共享资源列表 加载点 -o 参数
       smbumount 加载点
       smbmount //主机名或IP/share -o username=netseek (或者mount)
#smbmount //oracle.dolinux.cn/tech /mnt/share/ -o username=seek
#mount -t smbfs -o username=seek,password=seek //oracle.dolinux.cn/tech /mnt/share/
                   //上面的命令效果相同
#smbumount /mnt/share 或者umount /mnt/share 卸载挂载点.

2.Windows客户主机访问Samba服务器.
   通过网邻居.

五,SWAT,Samba web管理工具
1.SWAT(Samba web Administration Tool,Samba web )
# rpm -ivh samba-swat-3.0.10-1.4E.2.i386.rpm //安全WEB配置管理工具

  1. #vi /etc/xinetd.d/swat
  2. service swat
  3. {
  4.         port            = 901
  5.         socket_type     = stream
  6.         wait            = no
  7.         only_from       = 127.0.0.1 192.168.0.1
  8.         user            = root
  9.         server          = /usr/sbin/swat
  10.         log_on_failure  += USERID
  11.         disable         = no
  12. }
复制代码
#service xinetd restart
#chkconfig swat on
http://192.168.0.1:901
六,企业应用案例.

要求:
1.所有的员工在公司都能流动办公,都能把自己的文件保存到Samba服务器上.
2.技术部和市场部都有各参的目录,同一个部门的人拥有一个共享目录,共它部门的人都只能访问在
  服务器上的自己home目录.
3.所有的用户都不允许使用服务器上的shell,只能通过Samba访问服务器.
4.要求提供一个软件共享目录,存放一个常用软件,供公司员工使用.
5.提供临是文件目录,任何用户都可以对其进行读写(最好是,谁放在这里面的,谁可以删)

分析:
1.要求员工都能流动办公,都能把文件保存Samb服务器上,这个利用home目录就可以实现.
2.创建market,tech组,创建组共享目录.
3.利用不可用的shell就可以如,/bin/false.
4.软件共享:software  公司任何人都可以访问, 不能写.
5.TmpUpload:临时上传文件:
公司员工名单:
总经理:ceo
财务:finance
技术部: tech(seek,len,gao,popo)
市场部:market(jake,joe,linda,gavin)


  1. #groupadd tech
  2. #groupadd market
  3. #useradd -g tech seek -s /bin/false
  4. #useradd -g market jake -s /bin/false
  5. #smbpasswd -a seek
  6. #smbpasswd -a jake //这样一个一个添加用户,我们可以利用for添加批量的用户:

  7. #for user in seek len gao popo
  8. >do
  9. >useradd -g tech -s /bin/false $user
  10. >smbpasswd -a $user
  11. >done
  12. New...passwd:一个一个的给其添加密码,市场部同样可以利用for批量添加用户.

  13. #useradd ceo
  14. #useradd finance
  15. #smbpasswd -a ceo
  16. #smbpasswd -a finance

  17. 建立共享目录
  18. #mkdir /home/tech /home/market
  19. #ls -ld /home/tech /home/market
  20. #chgrp tech /home/tech
  21. #chgrp market /home/market
  22. #chmod 3770 /home/tech
  23. #chmod 3770 /home/market
复制代码
(并且设定SGID和粘滞位使得所有在这个目录中建立的文件都拥有tech组的权限并且组中其他的人不能
  删除该用户建立的文件。)


  1. #mkdir /software
  2. #mkdir /tmpupload
  3. #chmod 777 /tmpupload
  4. #chmod a+t /tmpupload
复制代码

#vi /etc/samba/smb.conf 添加共享目录配置文件

  1. [tech]
  2.     comment = Tech 's Files
  3.     path = /home/tech
  4.     public = no
  5.     valid users = @tech
  6.     write list = @tech
  7.     create mask = 0770
  8.     directory mask = 0770
  9. [market]
  10.     comment = Market 's Files
  11.     path = /home/market
  12.     public = no
  13.     valid users = @market
  14.     write list = @market
  15.     create mask = 0770
  16.     directory mask = 0770

  17. [Software]
  18.     comment = Share Software
  19.     path = /software
  20.     public = yes
  21.     read only = yes
  22. [TmpUpload]
  23.     comment = Temp Files
  24.     path = /tmpupload
  25.     public = yes
  26.     writable = yes
复制代码
   
#servcie smb restart 重启Samba服务开始测试,我已经在我的机子测试好啦