zoukankan      html  css  js  c++  java
  • samba 虚拟

    实现的功能:

    1.      用Samba实现主域控制器(PDC)。并且客户端在登录到域后,可以修改密码,可以在共享文件的安全属性中可以添加组和用户;(已测试)

    2.      用一个Samba服务器虚拟多个Samba服务器;每个Samba分别以不同的安全级别(Security)运行;(已测试)

    3.      客户端可以使用Windows AD中的帐号登录Samba服务器;

    4.      实现对Samba用户进行磁盘配额。(已测试)

    附录:

    1:samba中定义的一些宏变量;

    2:如何解决Windows访问Samba服务器时文件夹及文件名乱码问题;

    3:一个完整的用Samba实现PDC的smb.conf配置文件样本;

    4:参考文章列表。

    一:用Samba实现主域控制器(PDC)

    Step 1 :修改 smb.conf 文件;

    配置Samba,将其设置为以PDC模式工作:

    [global]

        # 指定工作组或域的名称,需要和系统的hostname一致

    workgroup = smbdomain

    # 设置Samba服务器的netbios名称

    netbios name =  sambapdc

    # 对该Samba服务器的一些描述

    server string = Samba Server

    # 设置客户端与服务器端进行通信时采用加密密码

    encrypt passwords = yes

    # 指定Samba密码文件的位置

    smb passwd file = /etc/samba/smbpasswd

    # 允许哪些客户端访问

    # 0.0.0.0表示无限制;192.168.0. 表示允许整个网段访问

    ;hosts allow = 0.0.0.0

    # 信任来自哪个网卡的连接

    ;interfaces = eth0

    # 指定日志文件的位置,也可以使用Samba的宏来定义日志文件。比如:

    # log.%U,为每个访问的用户都创建一个日志。

    log file = /var/log/samba/smbd.log

    # 指定日志文件的大小,以K字节为单位

    max log size = 50

        # 设置套接字选项,在与客户端对话时使用这个选项

        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

        # 以下选项设置PDC

    # PDC 必须工作在user安全级别

    security = user

    # 设置Samba为本地主浏览器

    local master = yes

    # 设置为65,nmbd将打败任何NT服务器而在本地广播范围内成为工作组的

    # 本地主浏览器

    os level = 64

    # 设置为域主浏览器

    domain master = yes

    # 设置为首选主浏览器

    preferred master = yes

    # 允许客户端登录到域

    domain logons = yes

    # 客户端登录到域后执行的脚本

    # 将logon path设置成%U.bat(%U指登录的用户名),这样可以针对每个用户

    # 做更具体的设置

    logon script = logon.bat

    # 设置Windows客户端登录到域后的主目录位置

    logon home = \\%L\%U\.profile

    # 设置Windows客户端登录域后漫游文件(Roaming profiles)存放的目录

    logon path = \\%L\profiles\%U

    # 设置Windows客户端登录到域后,主目录将要被连接到哪个本地驱动器;

    # 这里指定的是H:。

    logon drive = H:

    # 指定Samba的管理员。用户名之间以空格隔开

    admin users = root bibby

    Step 2:为domain logon选项添加netlogon字段,为logon path添加profiles字段。并分别将他们设置正确的权限。

    [netlogon]

        path = /home/sambapdc/netlogon

        writeable = no

        browseable = no

        guest ok = no

    [profiles]

        path = /home/sambapdc/profiles

        writeable = yes

        browseable = yes

        guest ok = no

    为这两个文件夹设置正确的权限:

    Shell > chmod –R 755 /home/sambapdc/netlogon

    Shell > chmod –R 777 /home/sambapdc/profiles

    最后还需要为logon script添加logon.bat文件。该文件放在netlogon字段指定的目录下(本例为/home/sambapdc/netlogon/logon.bat):

        net use H: \\%L\%U

    logon.bat文件必须是Dos格式的,所以还需要用unix2dos这个工具来转换一下格式:

        shell > unix2dos logon.bat

    这样Samba服务器端的设置就完成了。

    Step 3 :为PDC添加管理员;

    “root”是Samba缺省的管理员。

    shell  > smbpasswd –a root

          > New SMB password: PASSWORD

            > Retype new SMB password: PASSWORD

    或者直接:

    shell > smbpasswd –a root PASSWORD

    还可以在smb.conf的”admin users =”中加上某个用户的名字,使其成为管理员。比如:

    [global]

        admin users = root ntclient

    这样就把登录名为ntclient的客户机器也设置为管理员了。

    Step 4:为PDC添加客户端;

    为了便于管理,可以先添加一个用户组:

    shell > groupadd smbtest

    然后为把客户端的机器添加到这个组中(在Novell Suse Enterprisee 9中的操作),做为可信任用户:

    1)

    # 先将Windows客户端的netbios名称添加到Unix系统中

        # 用户名(ntclient$)加$符号表示这是一个客户端机器的netbios名称,而不是

        # 实际Unix系统上的用户

        shell > useradd –g smbtest –s /sbin/nologin ntclient$

        注意:在RedHat系统中无法添加ntclient$(带$符号的用户)用户,所以你需要先添加一个ntclient用户,然后用vipw工具编辑/etc/passwd,将它修改成ntclient$用户。

    2)

    # 为这个客户端的机器在Unix系统中添加一个对应的管理用户

        # 为了方便管理,使用和客户端netbios名称相同的用户名

        shell > useradd –g smbtest –s /sbin/nologin ntclient

    3)

        # 把客户端机器加入到Samba中

        # 这里的ntclient是客户端机器的netbios名称,添加的时候不加$符号

        # smbpasswd命令的 –m 参数表示添加的是一个可信任的客户端机器

        shell > smbpasswd –a –m ntclient

    4)

        # 为客户端机器在Samba中添加一个管理员

        # 这里的ntclient是第2)步中添加的用户名,添加时需要输入密码

        # 这个用户名和密码就是客户端登陆时所使用的帐号

        shell > smbpasswd –a ntclient

    OK,重新启动samba服务。

    注:在RedHat中无法直接添加带”$”符号的用户。一种可行的方法是:

        1:先添加一个普通用户ntclient(useradd);

        2:使用vipw –p修改/etc/passwd,将ntclient改成ntclient$;

        3:同第一步一样,添加一个普通用户ntclient。

        这样就可以了。

    Step 5:从Windows客户端登录域;

        将系统注销,然后在登录框中选择要登录的域,输入已经在Samba服务器中添加的用户名和密码,OK,登录了。

    Step 6:客户端如何修改登录密码:

        登录域后,按Ctrl+Alt+Delete键,然后在“更改密码”中,选定域,再输入登录域的用户名和旧密码新密码。

        OK,密码修改成功。

    Step 7:将Unix系统上的用户和组映射到Windows域用户组中,使用户在登录域后可以为共享的文件夹添加管理用户;

    要实现此功能,Samba必须被配置为PDC,并且需要在 smb.conf 文件中添加以下选项:

    [global]

        nt acl support = yes

    1):创建NT已有用户组到Unix系统用户组的映射;

    常见的NT域的用户组有:

    Power Users

    Domain Admins

    Print Operators

    Domain Guests

    Administrators

    Account Operators

    Backup Operators

    Users

    Domain Users

    下面将创建NT域中”Domain Admins”组到Unix系统中winadmin的映射:

    1:创建用户组winadmin(也可以使用 yast à security à create user来创建)

        shell > groupadd winadmin

    2:在该用户组里添加域管理员用户,比如root,adminitrator之类的。

    可以使用yast,也可以直接直接编辑/etc/group文件。

    3:创建”Domain Admins”到winadmin的映射:

        shell > net groupmap set “Domain Admins” winadmin

    4:使用 net groupmap list 来查看是否映射成功。

    5:重新启动smbd和nmbd。

    2):创建自定义用户组smbtest到本地用户组smbtest的映射(组的名称必须相同才能做映射);

    1:在Unix系统下创建一个用户组smbtest;

        Shell > groupadd smbtest

    2:将一些用户添加到smbtest组中。

      可以用yast,也可以直接编辑/etc/group文件。

    3:创建映射:

      Net groupmap set smbtest smbtest

    4:使用 net groupmap list 来查看是否映射成功。

    5:重新启动smbd和nmbd。

    在客户端登录到域后,在文件夹的属性页上选择“安全”标签,点击“添加”,就可以看到已经做好映射的组了。

    二:用一个Samba服务器虚拟多个Samba服务器;

    要用Samba服务器虚拟出多个Samba服务器是件很简单的事,只需要在[global]中加入以下几个选项:

    [global]

        netbios name = sambaserver1

        # 虚拟另一个Samba服务器,netbios名为sambaserver2

        netbios aliases = sambaserver2 

        # include选项指定虚拟的Samba服务器使用的配置文件

        # %L宏,代表netbios name。smb.conf.%L就表示sambaserver1将使用

        # smb.conf.sambaserver1这个配置文件。

        include = /etc/samba/smb.conf.%L

    然后让sambaserver1和sambaserver2共享一部分的smb.conf文件,再配置分别配置好smb.conf.%L文件就可以了。

    以下是一个简单的例子,用一台Samba服务器,虚拟出两个Samba服务器,netbios name 分别为a和b。

    其中a被配置为PDC(关于如何将Samba配置为PDC,请参考第一部分),b被配置为文件服务器,提供一些共享文件。

    ============ File : /etc/samba/smb.conf ================

    [global]

    workgroup = sambatest

    server string = samba server %L

        # “a”为系统的hostname

    netbios name = a

    netbios aliases = b

    encrypt password = yes

    include = /etc/samba/smb.conf.%L

    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192

    password level = 8

        username level = 8

        log file = /var/log/samba/log.%L%M

        max log size = 50

    ============= File : /etc/samba/smb.conf.a ===========

        security = user

        os level = 64

        domain master = yes

        local master = yes

        domain logons = yes

        logon script = logon.bat

        preferred master = yes

    [netlogon]

    comment = "netlogon dir"

    path = /home/samba/netlogon

    writeable = no

    browseable = yes

    public = no

    [profiles]

        path = /home/samba/profiles

        writeable = yes

        browseable = yes

        guest ok = no

    ============= File : /etc/samba/smb.conf.b ===============

    security = share

    [share]

        path = /tmp

        browseable = yes

        writeable = no

        guest ok = yes

    按照如何将Samba配置为一个PDC的方法,添加和设置好相关文件和目录,然后就可以重新启动smbd和nmbd了。这时候就可以在Windows的“网上邻居”中看到配置好的Samba服务器了(或者直接在浏览器的地址栏中输入file://a/或者file://b/来测试,能访问即表示配置成功)。

    三:配置Samba,使客户端可以使用Windows AD中的帐号登录Samba服务器;

    这时候Samba必须运行在security=server或domain级别上。并且添加以下几个选项:

    [global]

        security = server

        # 指定Windows AD服务器,从它上面获取帐号信息,供客户端登录

        # 可以是IP地址,也可以是netbios名称

        # 多个AD服务器以空格分开

    password server = 192.168.0.1 192.168.0.2

        # 指定username map的映射文件

        username map = /etc/samba/user.map

    /etc/samba/user.map文件的格式为:

    root=admin administrator

    bibby=@administrators

    第1行:符号“=” 左边是单独的Unix系统账号,右边是要映射的Windows AD系统上的账号列表。服务器逐行分析映射文件,如果提供的账号和某行有右侧列表中的账号匹配,就把它替换为等号左边的账号。

    第2行:符号“=” 左边是单独的Unix系统账号,右边是要映射的Windows AD系统上的用户组。如果提供的帐号和用户组administrators中的一个用户名匹配,就被映射成用户bibby。

    四:为Samba用户设置磁盘限额;

    几个概念:

    Grace Period : 用户可被容许超过soft limit 的时间。

    假设Grace Period设定为3天,超过soft limit的user在三天内未处理超过limit的档案的话,user将无法再使用任何磁盘空间(这会造成该user无法登录系统)。

    设置Grace Period可以使用命令“edquota –t”。

    Soft Limit : 用户能使用的硬盘空间的大小。

    但如果Grace Period不是设为0的话,则Soft Limit只是一个警戒线,使用者如果使用的磁盘空间超过这个警戒线,就会开始收到系统所给的警告。

    Hard Limit : Hard Limit代表的是用户对磁盘空间使用的绝对上限。使用者使用的磁

        盘空间绝对无法超越此上限。

        只有当Grace Period不是设为0时,Hard Limit的设定才会生效。

    inode :每个文件和目录都需要使用一个inode。所以可以用来限制用户的文件数目。

    block limits是对磁盘空间使用的限制,以字节为单位,1024 blocks大概就是1M。

    每个客户端机器登录Samba PDC时都需要一个Samba帐号,而这个帐号也对应一个Unix系统帐号,而为了方便管理,这两个帐号的用户名通常都和客户端机器的Netbios Name一致。所以,当客户端机器登录到Samba域的时候,就等于是同名的Unix系统用户登录上系统,而Quota开始起作用了。

    1:设置quota(这里以/home为例);

        编辑/etc/fstab文件,在options区域加上usrquota或者grpquota。也可以同时设置用户quota和组quota。加上后的文件看起来就象这样:

        LABEL=/home  /home  ext3  defaults,usrquota,grpquota      1  2

    然后重新启动系统(也可以不重启系统,而使用mount的remount参数:

    Shell > mount –o remount /home

    )。

    第一次使用quota,需要先运行一次quotacheck命令。该命令会自动创建对用户和组进行quota时使用的两个文件:

        Shell > quotacheck –avug

    然后会在被quota的目录(这里是/home)下生成两个文件:

        Shell > ls /home/*quota*

            /home/aquota.group  /home/aquota.user

    接下来可以使用quota提供的工具来配置和监视quota:

    1):edquota;

        edquota –u USER      # 为用户“USER” 配置quota

        edquota –g GROUP    # 为组“GROUP”配置quota

        shell > edquota –u ntclient

        Disk quotas for user ntclient (uid 509):

    Filesystem blocks soft  hard  inodes soft  hard

    /dev/sda2    28    1024  2048      7      0      0

        这个例子为ntclient用户设置了quota:当总大小达到1024K(1M)的时候,会向用户发出警告,但是还可以继续添加文件(因为还未超过Hard Limit设置的值)。当总大小达到2048K(2M)时,系统将提示用户,磁盘已满,无法添加文件。

        这里blocks和inodes都不能更改,因为它们表示的是现在已经使用的数目。

    第一个soft是指对文件总大小的Soft Limit,第二个soft是对inode的Soft Limit。一个inode对应一个文件或者一个文件夹。

        这里只配置了对文件总大小的Soft Limit。你可以两个同时使用,既可以限制文件总大小,也可以限制文件和文件夹的数目。

    edquota的一些常见用法:

        # 将为ntclient用户设置的quota复制给用户bibby和king

        # 则他们的quota都是一样的

        shell > edquota –p ntclient bibby king

    2):repquota,报告分区的quota情况;

        使用方法:

          repquota /quota/path

        例如:

        Shell > repquota /home

    *** Report for user quotas on device /dev/sda2

    Block grace time: 7days; Inode grace time: 7days

                            Block limits                File limits

    User            used    soft    hard  grace    used  soft  hard  grace

    ----------------------------------------------------------------------

    root      --  36804      0      0            12    0    0

    ntclient  --      28    1024    2048              7    0    0

    bibby$    --      4      0      0              1    0    0

    bibby    --      20    1024    2048              5    0    0

    #502      --      24      0      0              6    0    0

    #504      --      4      0      0              1    0    0

    #505      --      20      0      0              5    0    0

    #506      --      4      0      0              1    0    0

    #507      --      20      0      0              5    0    0

    这就是repquota的输出,象你汇报quota的配置情况。

    另外还有quotaoff和quotaon命令,都比较简单,这里就不说了。

    3):查看为某个用户设置的quota(以用户ntclient为例):

        shell > quota –u ntclient

        你将会看到和“edquota –u ntclient”一样的结果。

    4):查看为某个用户组设置的quota(以组ntclient为例):

        Shell > quota –g ntclient

        看到的结果和edquota –g ntclient一样。

    2:设置User Quota(以ntclient用户为例):

        Shell > edquota –u ntclient

    Disk quotas for user ntclient (uid 509):

    Filesystem blocks    soft  hard  inodes    soft  hard

    /dev/sda2    556        1024  2048  85        0      0

        运行以后,将会启动编辑器(看看你的编辑器设置的是什么:echo $EDITOR)进行编辑。这里我为ntclient用户设置的Block Soft Limit是1024K(1M),Block Soft Limit是2048K(2M)。而对于inode的soft/hard limit都没有设置。

        设置好后,执行命令(本例设置Quota的FileSystem是/home(/dev/sda2)):

        Shell > quotaoff /home

        Shell > quotacheck –avug

        Shell > quotaon /home

    3:测试User Quota:

        从一台客户端的Windows 2000系统上登录到Samba域中,复制一些文件到映射的驱动器中,当超过设置的Block soft limit时,系统不会出现提示,仍然可以继续添加文件。当文件总大小超过Block hard limit时,就不能再添加文件了,会提示一个类似于“磁盘空间不足”的警告信息。

    这表明Quota正常工作。

    4:设置Group Quota(以用户组ntclient为例,该组中有两个用户:ntclient,bibby);

        Shell > edquota –g ntclient

    Disk quotas for group ntclient (gid 505):

    Filesystem blocks    soft  hard  inodes soft  hard

    /dev/sda2    580        1024  3000  91    0      0

        这里为组ntclient设置的Block Soft Limit为1024K(1M),Block Hard Limit为3000K(接近3M);对inode不进行限制。

    5:测试Group Quota:

        刚才已经为用户ntclient设置了2048K的Block Hard Limit,这里再让另一台netbios name为bibby的Windows客户端登录Samba域,并在映射的驱动器中添加文件,看看两个用户(ntclient和bibby)的总文件大小能否超过为组ntclient设置的Block Hard Limit。

    注意:如果在smb.conf中设置了“admin users = ”选项,并且添加了某个用户,则这个用户从客户端登录到Samba PDC中时,对文件的操作将是以root权限进行的,所以也不受quota设置的磁盘容量限制。

        比如,如果在smb.conf中有如下选项:

        admin users = root ntclient

        则这里所做的Quota测试将出现错误(即ntclient用户不受Quota设置的磁盘限额的限制)。

    附录:

    1:samba中定义的一些宏变量:


    %S = 当前服务名(如果有的话)
    %P = 当前服务的根目录(如果有的话)
    %u = 当前服务的用户名(如果有的话)
    %g = 当前用户说在的主工作组
    %U = 当前对话的用户名
    %G = 当前对话的用户的主工作组
    %H = 当前服务的用户的Home目录
    %v = Samba服务的版本号。
    %h = 运行Samba服务机器的主机名
    %m = 客户机的NETBIOS名称
    %L = 服务器的NETBIOS名称
    %M = 客户机的主机名
    %N = NIS服务器名
    %p = NIS服务的Home目录
    %R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)
    %d = 当前服务进程的ID
    %a = 客户机的结构(只能识别几项:Samba,WinNT,Win95)
    %I = 客户机的IP
    %T = 当前日期和时间

    2:Windows访问Samba服务器时文件夹及文件名乱码问题:

    在 smb.conf 文件中添加以下选项:

    [global]

    # dos客户端连接到Samba服务器时,Samba告诉客户端显示的字符集

    dos charset = cp936

    # Samba服务器使用的字符集

    unix charset = cp936

    3:一个完整的用Samba实现PDC的smb.conf配置文件样本:

    [global]

    workgroup = samba

    netbios name = sambabibby

    server string = Samba PDC running %v

    unix password sync = yes

    passwd program = /usr/bin/passwd %u

    nt acl support = yes

    security = user

    os level = 64

    preferred master = yes

    local master = yes

    domain master = yes

    encrypt passwords = yes

    domain logons = yes

    log file = /var/log/samba/log.%m

    log level = 2

    max log size = 50

    logon home = \\%L\%U\.profile

    logon path = \\%L\profiles\%G\%U

    logon drive = H:

    logon script = logon.bat

    admin users = root

    [homes]

    browseable = no

    writeable = yes

    [profiles]

    path = /home/sambapdc/profiles

    writeable = yes

    browseable = no

    create mask = 0600

    directory mask = 0770

    [netlogon]

    comment = Network Logon Service

    path = /home/sambapdc/netlogon

    read only = yes

    参考文章:

        Samba官方文档:http://us2.samba.org/samba/docs

        Quota Tutorial on Linux:

    http://souptonuts.sourceforge.net/quota_tutorial.html

        Quota:User硬碟管理:

    http://souptonuts.sourceforge.net/quota_tutorial.html

        磁碟空間管理(Disk Quota):

                  http://nmc.nchu.edu.tw/linux/quota.htm

  • 相关阅读:
    C#中的多态
    一个JQUERY文件
    等比例缩放图片
    WIN7 环境下 VS2012 打开某些解决方案项目 提示 【已停止工作】 解决办法
    统计字符串中字符出现的次数
    LINQ关联表查询语法和.NET扩展方法和JSON.NET时间格式化代码段
    EasyUI表格datagrid合并行单元格
    一个导出Excel的类
    一个缩略图的类
    分布式缓存MemCache
  • 原文地址:https://www.cnblogs.com/studio313/p/1751976.html
Copyright © 2011-2022 走看看