Learning together

Learning together with open source fans. QQ群:8021887


  • 网站首页

  • 站内留言

  • 关于本站

  • 我的相册

  • 联系羽飞

  • 内容订阅
  • 第二章:Samba服务全攻略

    作者: 羽飞 | 发布时间: 星期天, 01/31/2010 - 23:46 |

    内容简介
    Samba的概述
    Samba服务的安装
    启动和停止Samba服务
    Samba服务的配置文件
    Linux客户端的访问
    实例操作
    Samba服务的排错方法

    SMB协议
    它是Microsoft和Intel在1987年开发的,该协议可以用在TCP/IP之上,也可以用在其他网络协议(如IPX和NetBEUI)之上。通过SMB协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过SMB协议,应用程序还可以访问远程服务器端的文件和打印机等资源。(如图)

    图片1.png

    Samba服务
    Linux使用Samba的程序集来实现SMB协议。通过Samba,可以把Linux系统变成一台SMB服务器,使Windows95以上的Windows用户能够使用Linux的共享文件和打印机,同样的Linux用户也可以通过SMB客户端使用Windows上的共享文件和打印机资源 。

    Samba它的主要功能
    (1)提供Windows风格的文件和打印机共享。Windows操作系统可以利用Samba共享Linux等其他操作系统上的资源,而从外表看起来和共享Windows的资源没有区别。
    (2)在Windows网络中解析NetBIOS的名字。为了能够利用局域网上的资源,同时使自己的资源也能被别人所利用,各个主机都定期地向局域网广播自己的身份信息。负责收集这些信息,提供检索的服务器也被称为浏览服务器,而Samba能够实现这项功能。同时在跨越网关的时候Samba还可以作为WINS服务器使用。
    (3)提供SMB客户功能。利用Samba程序集提供的smbclient程序可以在Linux中以类似于FTP的方式访问Windows共享资源。

    Samba服务工作原理(图)

    图片2.png

    ① 首先客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回0XFFFFH,结束通信。
    ② 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。
    ③ 当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。
    ④ 连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

    Samba服务的安装
    rpm -qa |grep samba
    samba-common:通用的工具和库文件
    samba-client:Samba的客户端工具
    Samba: Samba服务的主程序包
    samba-swat:通过浏览器对Samba服务器进行图形化管理

    启动和停止Samba服务
    1.启动Samba服务
    /etc/rc.d/init.d/smb start
    2.停止Samba服务
    etc/rc.d/init.d/smb stop
    3.重新启动Samba服务
    /etc/rc.d/init.d/smb restart
    4. 重新加载Samba服务
    /etc/rc.d/init.d/smb reload
    5.chkconfig -level n smb on/off
    6. ntsysv

    Samba服务的配置文件
    Samba服务的主配置文件/etc/samba/smb.conf由两部分构成。
    1.Global Settings
    该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
    2.Share Definitions
    该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。

    建立独立的配置文件
    拷贝 smb.conf > user.smb.conf
    在[global]中加入
    include = /etc/samba/%U.smb.conf
    include = /etc/samba/%G.smb.conf

    用户控制
    public = no 不允许匿名用户访问
    browseable = no 隐藏目录(知道目录同样可以访问)
    valid users =用户或列表或@用户组
    writable = yes 可写(目录本身要可写)
    writable list =用户或列表或@用户组
    readonly = yes 只读设置
    create mask = 0744 控制客户机创建文件的权限
    directory mask = 0744控制客户机创建目录的权限

    访问控制
    max connections = 最大连接数目
    deadtime = 断掉连接时间(分钟)0为不限制
    hosts deny = ip 地址、域名、EXCEPT
    hosts allow = ip 地址、域名、EXCEPT 允许优先

    注:在全局里增加
    hosts deny = .sale.com .net free 表示禁止.sale.com域和.net域及主机名为free的客户端访问
    hosts deny = All 表示所有客户端,并不是说允许主机名为ALL的客户端可以访问。常用的通配符还有”*”,”?”,”LOCAL”等
    hosts allow = 192.168.0. EXCEPT 192.168.0.100 192.168.0.78 表示允许192.168.0.0网段IP地址访问,但是192.168.0.100和192.168.0.78除外
    注:在可在全局与局部里增加

    Linux客户端的访问
    smbtree 显示局域网中的所有共享主机和目录列表
    smbtree -D 只显示局域网中的工作组或域名。后面可以加上-U username%passwd ,则表示是相关用户的访问权限
    nmblookup 某个主机的netbios主机名或工作组。 # 显示相应的IP

    smbclient命令格式
    smbclient -L //主机名或IP地址 -U 登录用户名 # 列出目标主机共享资源列表
    smbclient //主机名或IP地址/共享目录名 -U 登录用户名 # 使用共享资源

    mount命令格式
    mount //目标IP地址或主机名/共享目录名称 挂载点 -o username=用户名 # 挂载共享
    umount 挂载点 # 卸载共享
    smbtar -s server -u user -p passwd -x shareneam -t output.tar # 把远程的内容备份到本地
    tar tvf *.tar # 查看TAR文件包里面的的内容

    Samba服务排错
    (1)错误信息
    (2)配置文件
    (3)日志文件
    testparm #查看配置文件
    testparm /etc/samba/smb.conf 主机名 IP #测试具体机器能否访问及访问的范围
    netstat -tlunp | grep service #显示服务的对应端

    几个关键字段
    根据需要增加在全局里面。虽然简单,但功能不简单,大家在用到的时候慢慢来体会。
    include = /etc/samba/%G.smb.conf 调用用户组相关的配置文件
    include = /etc/samba/%U.smb.conf 调用用户相关的配置文件
    username map = /etc/samba/smbusers 调用映射用户账号的配置文件

    和Samba有关的一些命令
    批量增加SMB用户(很多人想要的东东)
    # for user in 用户列表
    >do
    >useradd -g group -s shell $user
    >smbpasswd -a $user
    >done

    编辑SMB的用户账号相关命令
    smbpasswd
    smbpasswd -a 增加一个账号
    smbpasswd -d 禁用一个账号
    smbpasswd -e 启用一个账号
    smbpasswd -x 删除一个账号
    smbpasswd 更改用户密码

    pdbedit
    pdbedit -L 列出SMB中的账号
    pdbedit -a 增加一个账号
    pdbedit -x 删除一个账号

    注:上面两个命令,大家根据需要选择

    案例详解
    【案例1】员工可以在公司内流动办公,无论在任何一台机器上工作,都能把自己的文件放到服务器里,同时不能使用服务器上的SHELL。(注解:SMB中有关于用户家目录的默共享设置,我们只要设置USER级别,然后再增加用户和指定不可用的SHELL)

    smb.conf配置文件更改的内容如下
    security = user
    [homes]
    comment = Home Directories
    browseable = no
    writable = yes
    valid users = %S

    配置好后,就重新启动SMB服务
    useradd user -s /dev/null
    smbpasswd -a user

    增加好用户和密码后,就可以直接测试了!这个不用重新启动SMB服务了哦!

    【案例2】建立共享目录student,它的本机路径为”/home/student”,只有teachers组的用户可以读写该目录,students用户组只能读取。(注解:这个关键是不同组对同一个目录的权限设置,student这个目录属于students用户组,并设置他的OTHER 权限为7,我们通过这个OTHER权限来实现teachers组对student目录的访问,通过SMB的配置文件来限制用户访问)

    # mkdir /home/student
    # groupadd students
    # groupadd teachers
    # useradd -g students user
    # useradd -g teachers user
    # smbpasswd -a user
    # chgrp students /home/student
    # chmod 757 /home/student
    # chmod g+s /home/student

    smb.conf配置文件更改的内容如下
    security = user
    [student]
    path = /home/student
    comment = student
    write list = @teachers
    valid users = @teachers @students

    重新启动SMB服务,进行测试。

    【案例3】公司有二个部门( sales market ),销售部和市场部有自己单独的共享目录,只可以总经理和相应部门员工访问,并且公司员工禁止访问非本部门的共享目录。(注解:这一个内容与第二个类似,只是用户组变成用户,多了一个用户组,只需要把文件夹所有者给总经理,所属组为用户组就OK)
    # mkdir /home/sales
    # mkdir /home/market
    # groupadd sales
    # groupadd market
    # useradd -g sales user
    # useradd -g market user
    # smbpasswd -a user
    # chgrp sales /home/sales
    # chgrp market /home/market
    # chown ceo /home/sales
    # chown ceo /home/market
    # chmod 770 /home/sales
    # chmod 770 /home/market
    # chmod g+s /home/sales
    # chmod g+s /home/market

    smb.conf配置文件更改的内容如下
    security = user
    [sales]
    path = /home/sales
    comment = sales
    write list = @sales ceo
    valid users = @sales ceo
    create mask = 0770
    directory mask = 0770
    [market]
    path = /home/market
    comment = market
    write list = @market ceo
    valid users = @market ceo
    create mask = 0770
    directory mask = 0770

    重新启动SMB服务,进行测试。

    【案例4】实现在登陆的时候只能看到自己的共享目录,没有权限访问的看不到。

    (注解:其实实现这个主要靠加载独立的配置文件来实现,只要把独立的文件设置好相应的权限就OK,SMB主配置文件中加入独立的配置文件,其他不用设置)
    关于用户的增加我这里就不写出来了,和上面的没有区别。(略过)
    首先把源始的smb.conf COPY 出来,后面加上相应的用户或者组,如:smb.conf.user smb.conf.group
    然后配置各己的配置文件

    如:smb.conf.ceo
    [sales]
    comment = sales
    path = /home/sales
    writeable = yes
    valid users = ceo
    create mask = 0770
    directory mask = 0770
    [markets]
    comment = markets
    path = /home/markets
    writeable = yes
    valid users = ceo
    create mask = 0770
    directory mask = 0770

    如:smb.conf.sales
    [sales]
    comment = sales
    path = /home/sales
    writeable = yes
    valid users = @sales
    create mask = 0770
    directory mask = 0770

    如:smb.conf.markets
    [markets]
    comment = markets
    path = /home/markets
    writeable = yes
    valid users = @markets
    create mask = 0770
    directory mask = 0770

    主配置文件如下:
    security = user
    include = /etc/samba/smb.conf.%G
    include = /etc/samba/smb.conf.%U

    其他的不用设置,重新启动SMB服务,然后测试!祝大家好运!!!

    ★★★★★★★★★★★★★★★★★视频观看地址★★★★★★★★★★★★★★★★★★
    http://www.boobooke.com/v/bbk3099
    http://www.boobooke.com/v/bbk3140
    http://www.boobooke.com/v/bbk3141
    http://www.boobooke.com/v/bbk3142
    http://www.boobooke.com/v/bbk3225
    http://www.boobooke.com/v/bbk3226
    http://www.boobooke.com/v/bbk3226
    http://www.boobooke.com/v/bbk3227

    相关文章

    发表评论