• Samba学习笔记(转载) zhumao


    Samba学习笔记

    整理:Jims of 肥肥世家

    发布时间:2005年07月08日

    最新更新:2005年07月11日

    Abstract

    Samba是Linux与Windows信息沟通的桥梁。它可使Linux系统变成Windows文件和打印服务器,供Linux用户和Windows用户共同使用。在现在Windows和Linux多操作平台共存的环境下,这种技术就更显得重要,它能帮我们实现信息的跨平台交流和平台的平稳迁移。Samba成功突破了Windows的技术封锁,是自由软件的一面旗枳和典范。


    Chapter 1. 安装

    Chapter 2. 配置

    Samba的配置文件是smb.conf,如果是debian系统,则位于/etc/samba目录下,如果从源码编译安装,则位于安装目录的lib目录下。

    2.1. 服务器角色

    Samba 3服务器可担任主域控制器、独立域服务器和域成员服务器等角色。设置方法如下:

    • 主域控制器:

      [global]
           ...
           ......
           domain master = yes
           preferred master = yes
           domain logons = yes
           security = user
           ......
           ...
      

      使用testparm命令测试一下:

      debian:~# testparm   
        Load smb config files from /etc/samba/smb.conf
        Processing section \"[homes]\"
        Processing section \"[printers]\"
        Loaded services file OK.
        Server role: ROLE_DOMAIN_PDC       #服务器角色为主域控制器
        Press enter to see a dump of your service definitions
        ......
      
    • 备份域控制器:

      [global]
           ...
           ......
           domain master = no
           preferred master = yes
           domain logons = yes
           security = user
           ......
           ...
      
      

      运行testparm测试一下:

      testparm 
        Load smb config files from /etc/samba/smb.conf
        Processing section \"[homes]\"
        Processing section \"[printers]\"
        Loaded services file OK.
        Server role: ROLE_DOMAIN_BDC        #服务器角色为备份域控制器
        Press enter to see a dump of your service definitions
      
    • 独立服务器:

      [global]
           ...
           ......
           domain master = yes
           preferred master = yes
           domain logon = no
           security = user
           ......
           ...
      

      再使用testparm命令测试一下。

      debian:~# testparm   
        Load smb config files from /etc/samba/smb.conf
        Processing section \"[homes]\"
        Processing section \"[printers]\"
        Loaded services file OK.
        Server role: ROLE_STANDALONE        #服务器的角色为独立服务器
        Press enter to see a dump of your service definitions
        ......
      
    • 域的成员服务器:

      [global]
           ...
           ......
           domain master = yes
           preferred master = yes
           domain logon = no
           security = domain
           ......
           ...
      

      运行testparm测试一下:

      Load smb config files from /etc/samba/smb.conf
        Processing section \"[homes]\"
        Processing section \"[printers]\"
        Loaded services file OK.
        Server role: ROLE_DOMAIN_MEMBER       #服务器的角色为域成员服务器
        Press enter to see a dump of your service definitions
        ......
      

    2.2. 使用openldap目录服务进行samba用户验证

    samba可把用户信息存放到ldap目录服务器上,使用目录服务器上的用户数据进行用户验证。这样做的好处是:

    1. 集中存放用户信息,多台Samba服务器可共用一套用户数据。

    2. 当用户数量多时,采用ldap目录服务器可加快用户验证的速度。因为ldap目录服务是专门为读操作而优化的,搜索数据的速度是非常快的。

    3. 维护方便,可利用ldap客户端进行可视化维护,如phpldapadmin。

    4. 用户可自由更改自已的密码,而不用经过系统管理员,可大大减轻系统管理员的工作量。

    要使samba能够使用ldap目录服务器作为用户验证的后台数据库,需在编译samba时选择了“--with-ldapsam”选项。在确保samba服务器和openldap服务器正常运行的前提下,进行以下配置。

    • 要openldap能认识samba的用户信息,我们需在openldap服务器中导入samba.schema。该文件是不包含在openldap源码中的,我们可在samba源码目录中的/examples/LDAP路径中找到该文件。把它拷贝到openldap的schema目录。接着编辑slapd.conf文件,用include指令把samba.schema导入openldap。如:

      # Allow LDAPv2 binds
      allow bind_v2
      
      # This is the main slapd configuration file. See slapd.conf(5) for more
      # info on the configuration options.
      
      #######################################################################
      # Global Directives:
      
      # Features to permit
      #allow bind_v2
      
      # Schema and objectClass definitions
      include         /etc/ldap/schema/core.schema
      include         /etc/ldap/schema/cosine.schema
      include         /etc/ldap/schema/nis.schema
      include         /etc/ldap/schema/inetorgperson.schema
      include         /etc/ldap/schema/samba.schema              #导入samba.schema文件
      

      重启服务器,使配置生效。

    • 下来我们要配置samba服务器了。打开smb.conf文件,添加以下内容:

      # You may wish to use password encryption. Please read ENCRYPTION.txt,
      # Win95.txt and WinNT.txt in the Samba documentation. Do not enable this
      # option unless you have read those documents
         encrypt passwords = true
      ;   passdb backend = smbpasswd guest              #取消smbpasswd验证
      
      ldap admin dn = "cn=admin,dc=com"                 #指定管理员
      passdb backend = ldapsam:ldap://ldapserver        #指定用户验证的ldap目录服务器
      ldap user suffix = dc=samba,dc=it                 #用户信息存放的目录路径
      ldap delete dn = no                               #不允许删除dn
      ldap suffix = dc=com                              #指定搜索后缀
      
    • 存盘退出,重启samba服务器。运行以下命令,把cn=admin,dc=com管理员的密码“secret”保存到secrets.tdb文件中,以便samba服务器与openldap服务器进行通信。

      debian:~# smbpasswd -w secret
      Setting stored password for "cn=admin,dc=com" in secrets.tdb        #成功保存的提示信息
      
    • 把Samba用户的验证信息存放到ldap目录服务器的方式有两种。一种是利用ldap里已有的目录项,不用另外增加一个目录项来专门存放samba用户验证信息,而是把samba用户的验证信息存放到目录服务器中同名的目录项。采用这种方式,sambaSamAccount对象类型需手工维护,当用户数量大的时候就很难保证sambaSID号码的唯一。另外一种是直接运行smbpasswd -a test命令,重新创建一个uid=test,dc=samba,dc=it,dc=com的目录项。sambaSamAccount对象类型会自动创建,sambaSID号会由程序自动维护。但如果要以uid=test,dc=samba,dc=it,dc=com登录目录服务器维护samba用户信息,则要手工添加一个simpleSecurityObject对象类型,增加userPassword属性才行。这两种方式各有优缺点,可满足不同场合的需求。第二种方式相对简单,这里就不具体介绍。下面详细介绍一下第一种方式的配置步骤。

      首先,我们在ldap目录服务器上要有一个叫“cn=test,dc=samba,dc=it,dc=com”的目录项,且使用该dn能正常登录ldap目录服务器。在cn=test,dc=samba,dc=it,dc=com目录项中还要添加一个sambaSamAccount对象类型,以便smbpasswd程序写入samba帐号信息。添加该对象类型时需要填两个属性,一个是sambaSID,一个是uid,sambaSID类似Windows NT中的SID,它是以S开头一串数字,由Samba服务器的SID + UID组成。当你的samba服务器成功连接到ldap目录服务器时,它已在ldap目录服务器中自动创建一个sambaDomainName=hostname的目录项。该目录项的sambaSID就是Samba服务器的SID了,类似于S-1-5-21-3129426798-1813742091-3551573396。UID手动填一个即可,如3001。每个用户的UID都是不同的。最后的sambaSID是S-1-5-21-3129426798-1813742091-3551573396-3001。

    • 配置完成,使用smbpasswd命令就可把用户信息保存到ldap目录服务器上了。

      debian:~# smbpasswd -a test
      New SMB password:
      Retype new SMB password:
      Added user test.             #成功添加用户
      

      用phpldapadmin以cn=test,dc=samba,dc=it,dc=com登录进ldapserver服务器,你会发现该用户添加了samba用户的验证信息。其中,uid属性记录的是samba的用户名,sambaLMPassword和sambaNTPassword两个属性分别记录了用户的加密密码资料,分别对应windows98和NT两种加密方式。

    • 到此为止,使用ldap目录服务器进行Samba用户验证已配置完成。但现在还是要管理员在samba服务器上使用smbpasswd命令为用户维护密码。从维护工作量和保密的角度出发,由用户自已维护自已的密码是一种最好的方法。我们借助phpldapadmin这个工具可帮我们实现该功能。具体设置方法是这样的:

      1. 首先,在设置前,需先把phpldapadmin安装好,具体的安装步骤请参考我网站上的openldap学习笔记。安装好phpldapadmin后,我们已可正常使用该工具维护目录项了。同时,通过目录服务器的权限管理,我们也可把test用户密码属性设置成只有dn是cn=test,dc=samba,dc=it,dc=com的用户和目录服务器管理员才能修改。要达到该项果,请把以下ACL加入到slapd.conf中。

        access to attrs=sambaLMPassword
                by dn="cn=admin,dc=com" write
                by anonymous auth
                by self write
                by * none
        
        access to attrs=sambaNTPassword
                by dn="cn=admin,dc=com" write
                by anonymous auth
                by self write
                by * none
        

        重启openldap服务器使配置生效。

      2. 要修改samba用户的密码,我们只要修改smbaLMPassword和sambaNTPassword两个属性值即可,但会出错,提示修改失败,要我们去修改phpldapadmin的template_config.php文件。这是因为phpldapadmin使用了一个叫mkntpwd的程序来生成samba的加密密码。在template_config.php文件中设置了mkntpwd程序的执行路径。mkntpwd程序默认是没有安装在系统中的,我们需安装它,并把它放到在template_config.php文件里指定的执行位置(/usr/bin/)。mkntpwd的源码包含在samba的源码中,我们可进入samba的源码目下的examples/LDAP/smbldap-tools/mkntpwd目录,mkntpwd的源码全部在这里了,运行make命令,就可生成mkntpwd程序。最后把mkntpwd拷贝到/usr/bin目录下即可。

        如果是debian系统,template_config.php文件就位于/etc/phpldapadmin/templates目录下。节选有关定义mkntpwd程序路径的内容如下:

        ...
        ##  SAMBA TEMPLATE CONFIGURATION       ##
        ##  ----------------------------       ##
        ##       ##
        ##  In order to use the samba templates, you might edit the following properties:     ##
        ##  1 - $mkntpwdCommand : the path to the mkntpwd utility provided with/by Samba.     ##
        ##  2 - $samba3_domains : the domain name and the domain sid.                 ##
        ##       ##
        ######################################################################################*/
        
        // path 2 the mkntpwd utility (Customize)
        $mkntpwdCommand = "/usr/bin/mkntpwd";
        ...
        
      3. 以cn=test,dc=samba,dc=it,dc=com登录进入ldap服务器,我们就可修改smbaLMPassword和sambaNTP\assword两个属性值了。其它用户的这两个属性test用户是看不到的。

      其实,不使用phpldapadmin来维护samba用户密码也可以,我们完全可以用python-ldap配合mkntpwd程序自已DIY一个用户密码管理程序。

    Chapter 3. 小技巧

    • 使用tdbdump程序可以查看samba的tbd格式文件。

  • 相关阅读:
    关于研发核心团队建设的一些思考
    无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
    自适应网页设计(Responsive Web Design)
    css浮动与绝对定位小记
    WEB进度条控件
    GitHub上整理的一些工具
    雾里看花般的迷茫--货运APP
    揭秘史上最完美一步到位的搭建Andoriod开发环境
    我是如何在SQLServer中处理每天四亿三千万记录的
    货运APP产品魔力=卓越功能×情感诉求
  • 原文地址:https://www.cnblogs.com/zhumao/p/196818.html
Copyright © 2020-2023  润新知