如何根据Active DirectoryvalidationLinux帐户并在login时装载Windows共享?

我正在使用Ubuntu 10.04服务器。

    [编辑]我已经testing了Ubuntu 10.04 Server(21 / May / 2010)的完整版本。

    我已经configuration了我的Ubuntu 10.04 Server LTS驻留在Windowsnetworking上,以使用活动目录对login进行身份validation,然后挂载一个Windows共享作为主目录。

    这是我从Ubuntu的初始安装开始做的。

    1. 下载并安装Ubuntu Server 10.04 LTS
    2. 获取更新

      # sudo apt-get update && sudo apt-get upgrade

    3. 安装SSH服务器( sshd

      # sudo apt-get install openssh-server

      有人会争辩说,你应该通过禁用rootlogin来“lockingsshd”。 我想,如果你的智能足以破解SSH密码的SSH会话,那么你可能不会因为在/etc/ssh/sshd_config文件中增加了PermitRootLogin no而受挫。 如果你的偏执或不简单,那么编辑该文件或给以下旋转:

      # (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."

    4. 安装所需的软件包

      # sudo apt-get install winbind samba smbfs smbclient ntp krb5-user

    5. 做一些基本的networking清理工作,以便准备具体的包configuration。

      1. 确定您的Windows域名,DNS服务器名称和IP地址为活动目录服务器(为桑巴)。 为了方便,我为Windows域和DNS服务器设置了环境variables。 对我来说是(我的AD IP地址是192.168.20.11):

        # WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11

        如果你想弄清楚你的域名和DNS服务器是什么(我是承包商,不知道networking)看看这个有用的参考 。

      2. 我们需要在新networking上命名Linux机器,这是通过编辑主机文件(用DNS DNS的FQDNreplaceDNS)来完成的:
        # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

      3. 我们还应该告诉即将安装的服务,他们可以在那里find领导者:一些networking将有netbios名称查询服务,但为了以防万一,在/etc/hosts文件中添加一个明确的条目,在我的configuration中,我添加了条目第三(3)行:
        # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

      4. Windows和Linux的authentication和文件共享stream程需要时钟同意。 使用NTP服务执行此操作,而在Ubuntu的服务器版本上,NTP服务将安装并configuration (1)个NTP服务器。 在Ubuntu之前添加你的(或者完全replace它)。 我join的networking也有DNS服务器提供NTP服务。
        # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
        重新启动NTP守护进程:
        # sudo /etc/init.d/ntp restart

    6. Kerberosconfiguration。
      下面的说明不能从字面上理解:编辑文件时, MYDOMAIN.LOCALsrv1.mydomain.local的值需要replace为适合networking的值,但请注意,在使用UPPERCASE的情况下,大写是必要的
      如果在Kerberos的apt-get install期间,您有洞察力正确回应“默认域”问题,那么,对你来说很好,否则你将不得不做下面的事情。

      1. 编辑(以前安装的) /etc/krb5.conf文件。

        1. find[libdefaults]部分并更改键值对:

          [libdefaults]
          default_realm = MYDOMAIN.LOCAL

        2. 将以下内容添加到文件的[realms]部分:

          MYDOMAIN.LOCAL = {
          kdc = srv1.mydomain.local
          admin_server = srv1.mydomain.local
          default_domain = MYDOMAIN.LOCAL
          }

        3. 将以下内容添加到文件的[domain_realm]部分:
          .mydomain.local = MYDOMAIN.LOCAL
          mydomain.local = MYDOMAIN.LOCAL

        4. 在这一点上的一个很好的testing是看看你的AD控制器会给你发一张kerberos票。 这不是必要的,但它可以让你们一些头晕目眩:
          # kinit <some_windows_domain_user>
          然后看到票:
          # klist
          你会看到关于票据caching和到期和续订的东西。 一旦眩晕消退,你还可以释放/销毁票:
          # kdestroy

    7. configuration桑巴
      根据以下情况: 有时CIFS不能使用或其他networking文件系统select更好。 如果需要kerberos(krb5 / SPNEGO)身份validation支持来增加安全性,则必须使用Samba的smbclient或smbfs而不是cifs
      唉,ubuntu 10.04(基于内核版本2.6.32.9)在内核中的cifs支持版本是1.61,根据内核文档,从1.54版本开始,实验kerberos的实现就在那里。
      所以你就是这样 我不知道,如果cifs将工作,所以我给你桑巴configuration:

      1. replace/etc/samba/smb.conf (记得我是从Ubuntu的一个干净的发行版,所以我不担心打破任何东西):
        [global]
        security = ads
        realm = MYDOMAIN.LOCAL
        password server = 192.168.20.11
        workgroup = MYDOMAIN
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind enum users = yes
        winbind enum groups = yes
        template homedir = /home/%U
        template shell = /bin/bash
        client use spnego = yes
        client ntlmv2 auth = yes
        encrypt passwords = yes
        winbind use default domain = yes
        restrict anonymous = 2

      2. 启动和停止各种服务。

        # sudo /etc/init.d/winbind stop
        # sudo service smbd restart
        # sudo /etc/init.d/winbind start

    8. 设置authentication。

      1. 编辑/etc/nsswitch.conf 。 我能够运行以下命令来获得我所需要的:
        # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
        这里是我的/etc/nsswitch.conf文件的内容:
        passwd: compat winbind
        group: compat winbind
        shadow: compat winbind
        hosts: files dns
        networks: files
        protocols: db files
        services: db files
        ethers: db files
        rpc: db files

      2. 启动和停止各种服务。
        # sudo /etc/init.d/winbind stop
        # sudo service smbd restart
        # sudo /etc/init.d/winbind start

    9. 将计算机join域。 我不相信这是必要的。 特别是由于smb.conf文件中的安全选项( security = ads )。 也许有人可以衡量这个…
      # sudo net ads join -U any_domain_user_account
      您可能会收到错误的DNS update failed! ,但是你会join到域中。 如果您遇到无法find服务器的错误,则需要修改您的DNSlogging。 在Ubuntu安装期间,名称服务器通常会指向您的网关:大多数路由器都会执行DNS服务。 Windows服务器pipe理的最佳实践是ADC也应该运行DNS。 在我的情况下,我的/etc/resolve.conf如下所示:
      nameserver 192.168.20.11
      nameserver 8.8.8.8
      8.8.8.8是一个谷歌的DNS,一个相当可靠的备份,以防止一个窗口出现故障。

    在这一点上,我可以login(也许重新启动后),主目录不存在,但我可以login。

    1. CIFSloginlogin
      下一步是我的樱桃; 我不想负责备份所有人的工作目录,Ubuntu的运行方式在可靠性方面是值得怀疑的。 通过以下用户可以login并自动查看他们的Windows用户目录。

      1. 下载pam_mount模块:
        # sudo apt-get install libpam-mount
        我希望挂载点位于传统的/home/<user>位置:这个部分是由/etc/samba/smb.conf文件( template homedir = /home/%U )configuration的。 但我需要它钻通共享并指向他们自己的Windows目录。 这是通过编辑/etc/security/pam_mount.conf.xml文件来完成的(尽pipe它的目的 XML 不是人类可读的):

      2. 将以下内容添加到/etc/security/pam_mount.conf.xml并进行更改以适应:
        <volume
        user="*"
        server="srv1.mydomain.local"
        path="UserShares"
        mountpoint="home"
        fstype="cifs"
        />

        <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

        由于我的愚蠢的挂载点,我不得不添加这一行:

        <umount>umount %(MNTPT)/%(USER)</umount>

        这样,用户目录(对于挂载点)将被自动创build并自动find该行:

        <mkmountpoint enable="1" remove="false" />

        remove="false"位非常重要:如果设置为true,则pam_mount.so尝试删除用户多次login时不能执行的目录挂载点。 在这种情况下,最终会导致系统中出现大量的stream浪坐骑。

        pam_mount.so仍然没有按照承诺交付。 在目前的forms中,坐骑继续堆积,而主目录没有被创build。 之间和之前的10.04服务器的Beta 2版本之间的某处,它正在工作。 我不能重新创build这个。
        在创build目录的同时,我依赖于pam_mkhomedir.so ,并在pam_mount.so行之前pam_mount.so一行以容纳。
        我还没有解决多个安装问题。 但是,直到pam_mount.so被修复,这是我在我的/etc/pam.d/common-session文件中:

         session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session required pam_unix.so session optional pam_winbind.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 session optional pam_mount.so 

    而已。 它为我工作,我希望你觉得它有用。

    考虑了大量的资源,所以我可以弄清楚。 这里有一个简短的清单(这些链接中的一些指出我自己的问题):

    • Samba Kerberos
    • 活动目录WinBind
    • 在CIFS服务器上挂载Linux用户主目录
    • 根据Active DirectoryvalidationOpenBSD
    • 如何使用Active Directory来validationLinux用户
    • 安装窗口与Active Directory权限共享
    • 在Ubuntu 9.10服务器64位上使用Samba进行Active Directoryvalidation
    • validationLinux服务器对抗AD有多实用?
    • 在Linux ADlogin上自动安装Windows共享