如何针对Active Directory验证Linux帐户并在登录时挂载Windows共享?


Answers:


27

[编辑]此后,我已经测试了Ubuntu 10.04 Server的完整版本(2010年5月21日)

我已经将Windows网络上的Ubuntu 10.04 Server LTS配置为使用活动目录对登录进行身份验证,然后挂载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

    有人认为您应该通过禁用root登录来“锁定sshd”。我想如果你足够聪明,破解SSH会话root密码,你可能不会通过加受挫PermitRootLogin no的在/etc/ssh/sshd_config文件中。如果您是否偏执,或者根本不相信,请编辑文件或进行以下旋转:

    # (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. 做一些基本的网络房屋清洁工作,为即将到来的特定包装配置做准备。

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

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

      如果您想弄清楚您的域和DNS服务器是什么(我是承包商,不知道网络),请查看此有用的参考资料

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

    3. 我们还应该告诉即将安装的服务,在哪里可以找到领导者:某些网络将具有netbios名称查找服务,但以防万一,在您的/etc/hosts文件中添加一个显式条目,在我的配置中,我在第三个(3)上添加了该条目线:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Windows和Linux机器的身份验证和文件共享过程需要使它们的时钟一致。使用NTP服务执行此操作,然后在Ubuntu版本的服务器上安装并配置(1)个NTP服务器的NTP服务。在Ubuntu之前添加您的(或完全替换)。我加入的网络也有DNS服务器提供NTP服务。
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      重新启动NTP守护程序:
      # sudo /etc/init.d/ntp restart

  6. Kerberos配置。
    此处的说明不照原样进行:在编辑文件时,值MYDOMAIN.LOCALsrv1.mydomain.local需要替换为适合您网络的值,但请注意,在使用UPPERCASE的地方需要UPPERCASE
    如果在apt-get installKerberos认证期间您有能力正确地回答“默认域”问题,那么对您有好处,否则,您必须执行以下操作。

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

      1. 找到该[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. 此时,一个不错的测试是查看您的AD控制器是否会向您颁发kerberos票。这不是必需的,但会使您有些头晕:
        # kinit <some_windows_domain_user>
        然后看票:
        # klist
        您将看到有关票证缓存以及过期和续订的内容。一旦头晕消退,您也可以释放/销毁票证:
        # kdestroy

  7. 配置samba。
    根据以下内容: 有时无法使用CIFS或选择其他网络文件系统更好。如果需要kerberos(krb5 / SPNEGO)身份验证支持以增强安全性,则必须使用Samba的smbclient或smbfs代替cifs
    Alas,cifs内核中对ubuntu 10.04(基于内核版本2.6.32.9的支持)的版本为1.61,并且根据内核文档,从1.54版本开始就存在实验性的kerberos实现。
    所以你在那里。我不知道是否cifs可以工作,所以我给你提供了samba配置:

    1. 替换/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. 设置身份验证。

    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. 将计算机加入域。我不认为这是必要的;特别是由于smb.conf文件(security = ads)中的安全性选项。也许有人可以对此进行权衡...
    # sudo net ads join -U any_domain_user_account
    您可能会出错DNS update failed!,但是您将加入该域。如果收到关于无法找到服务器的错误,则需要修改您的DNS记录。在Ubuntu安装过程中,名称服务器通常会指向您的网关:大多数路由器都会提供DNS服务。Windows服务器管理的最佳做法是ADC也应运行DNS。在我的情况下,我/etc/resolve.conf看起来像这样:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    8.8.8.8是一个google DNS,一种相当可靠的备份,以防Windows崩溃。

此时,我可以登录(也许在重启后),主目录不存在,但是我可以登录。

  1. CIFS登录时安装对
    我来说,下一步是樱桃。我不希望备份每个人的工作目录,而且从可靠性的角度来看,Ubuntu即将运行的盒子值得怀疑。通过执行以下操作,用户可以登录并自动查看其Windows用户目录。

    1. 下载pam_mount模块:
      # sudo apt-get install libpam-mount
      我希望挂载点在传统/home/<user>位置:该部分由/etc/samba/smb.conf文件(template homedir = /home/%U)配置。但是我需要它来浏览共享并指向自己的Windows目录。这是通过编辑/etc/security/pam_mount.conf.xml文件来完成的(尽管有此意图,但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>

      这样,将自动创建用户目录(用于安装点)并找到该行:

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

      remove="false"位非常重要:如果将其设置为true,则pam_mount.so尝试删除用户多次登录后无法执行的目录安装点。在这种情况下,最终会导致系统上出现许多杂散的安装。

      pam_mount.so仍然无法如期交付。在当前形式下,坐骑不断堆积,并且没有创建主目录。在此处与先前的Beta 2版本10.04服务器之间的某个位置,它可以正常工作。我不能重新创建这个。
      在此期间,我依赖于目录创建pam_mkhomedir.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
      

而已。它对我有用,希望您发现它有用。

考虑了大量资源,因此我可以弄清楚。这是一个简短列表(这些链接中的许多链接都指向我自己对此主题的疑问):


1
必须关闭远程root ssh登录。暴力/字典攻击有时会成功。如果root用户受到威胁,请与您在计算机上信任的所有内容说再见。
JR Lawhorne 2010年

1
ubuntu不会激活root帐户...一切都是sudod,或者我缺少什么?
杰米

“万事皆有sudo -更好...以哪种方式?(如果有权使用sudo的任何用户帐户遭到破坏,则基本上是同一回事。对于bruteforce根用户帐户或用户帐户,它基本上同样简单(也可能不是简单)。最好是设置仅pub-key登录,并禁用所有密码-基于登录)。
库尔特Pfeifle

我明白了,但请考虑:“最好是只设置pub-key登录”,这将完全违背本文的目的。
杰米

1
您也可以使用sudoed或root帐户并更改root用户的名称,使其不是root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.