Debian 6.0 AD集成

尽pipe关于这个问题已经有很多问题了,例如Windows AD域上的Linux,我想知道如何将Debian 6.0 Squeeze与AD集成使用开源或免费的商业用途工具

编辑只有通过apt交付(安全)更新的工具是可以接受的。

到目前为止,我已经能够通过Kerberos获得实际的用户authentication工作,例如日志显示用户名/密码检查成功,但用户无法login,请参阅下面的日志摘录;

编辑 :日志更新与pamdebugging:

May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: entry (0x0) May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): (user test.linux) attempting authentication as [email protected] May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): user test.linux authenticated as [email protected] May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: exit (success) May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:account): could not identify user (from getpwnam(test.linux)) May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: entry (0x0) May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): (user test.linux) retrieving principal from cache May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: exit (success) May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!? May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!? May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: entry (0x0) May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: exit (failure) May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0) May 12 10:06:36 debian-6-master login[10601]: User not known to the underlying authentication module May 12 10:06:36 debian-6-master login[10601]: PAM 1 more authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost= 

我的ldap.conf如下所示:

 base dc=ad,dc=domain uri ldap://10.10.10.10 ldap_version 3 binddn [email protected] bindpw password scope sub pam_password ad nss_base_passwd dc=ad,dc=domain?sub nss_base_shadow dc=ad,dc=domain?sub nss_base_group dc=ad,dc=domain?sub? &(objectCategory=group)(gidnumber=*) nss_map_objectclass posixAccount user nss_map_objectclass shadowAccount user nss_map_objectclass posixGroup group nss_map_attribute gecos cn nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute uniqueMember member pam_sasl_mech DIGEST-MD5 

nsswitch.conf

 # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat group: compat shadow: compat hosts: files dns ldap networks: files ldap protocols: db files services: db files ethers: db files rpc: db files netgroup: nis ldap passwd_compat: files ldap group_compat: files ldap shadow_compat: files ldap 

所有的/etc/pam.d都是由pam-auth-update创build的,所有三种(Kerberos,Unix和LDAP)authentication方法都被选中。

我可以从数据包捕获中确认LDAPsearch结果来更正用户信息,就像下面显示的手动ldapsearch结果一样:

 dn: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA,OU=_Managed Are as,DC=ad,DC=domain objectClass: top objectClass: person objectClass: domainanizationalPerson objectClass: user cn: Linux, test sn: Linux givenName: test distinguishedName: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA, OU=_Managed Areas,DC=ad,DC=domain instanceType: 4 whenCreated: 20110407131914.0Z whenChanged: 20110511125854.0Z displayName: Linux, test uSNCreated: 4144737 uSNChanged: 4638378 name: Linux, test objectGUID:: wwZt/MX/K0S36BL4bS2w+g== userAccountControl: 66048 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 129489044965699903 lastLogoff: 0 lastLogon: 129495915807176914 pwdLastSet: 129466559550934238 primaryGroupID: 513 objectSid:: AQUAAAAAAAUVAAAAzXxBZqg31mUH5TsrkisAAA== accountExpires: 9223372036854775807 logonCount: 35 sAMAccountName: test.linux sAMAccountType: 805306368 userPrincipalName: [email protected] lockoutTime: 0 objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=ad,DC=domain dSCorePropagationData: 20110407131916.0Z dSCorePropagationData: 16010101000000.0Z lastLogonTimestamp: 129488989872488561 uid: test.linux msSFU30Name: test.linux msSFU30NisDomain: ad uidNumber: 10002 gidNumber: 10000 unixHomeDirectory: /home/test.linux loginShell: /bin/sh # refldap://DomainDnsZones.ad.domain/DC=DomainDnsZones,DC=ad,DC=domain # refldap://ForestDnsZones.ad.domain/DC=ForestDnsZones,DC=ad,DC=domain # refldap://ad.domain/CN=Configuration,DC=ad,DC=domain # pagedresultscookie= 
  1. 用正确的用户名和密码,我得到MOTD和消息User not known to the underlying authentication module
  2. 用一个错误的用户名我得到Login incorrect
  3. 用正确的用户名,但密码错误,我开始SASL/DIGEST-MD5 authentication started然后Login incorrect

AD运行的是Windows 2k8(r2)服务器,所有的debian软件包都是你从apt得到的。

任何想法非常受欢迎。

编辑2 :如下build议,我尝试了与sssd类似的结果,现在密码被问了两次,日志显示:

 May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost= user=test.linux May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): received for user test.linux: 10 (User not known to the underlying authentication module) May 12 14:53:14 debian-6-master login[11389]: pam_krb5(login:auth): user test.linux authenticated as [email protected] May 12 14:53:14 debian-6-master login[11389]: pam_unix(login:account): could not identify user (from getpwnam(test.linux)) May 12 14:53:15 debian-6-master login[11389]: pam_sss(login:account): Access denied for user test.linux: 10 (User not known to the underlying authentication module) May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!? May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!? May 12 14:53:15 debian-6-master login[11389]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux May 12 14:53:15 debian-6-master login[11389]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0) May 12 14:53:15 debian-6-master login[11389]: User not known to the underlying authentication module 

编辑3

如果我在debugging级别设置为5的前台运行sssd ,日志显示:

 (Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts (Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>] (Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail! (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_cmd_authenticate] (4): entering pam_cmd_authenticate (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): command: PAM_AUTHENTICATE (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): domain: (null) (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): user: test.linux (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): service: login (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): tty: /dev/tty3 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): ruser: (null) (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): rhost: (null) (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok type: 1 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok size: 8 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok type: 0 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok size: 0 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): priv: 1 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): cli_pid: 12507 (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): pam_reply get called. (Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): blen: 8 (Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts (Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>] (Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail! 

我会build议使用sssd。 这是Debian挤压的标准软件包,使生活变得更加简单。 当你安装sssd时,它应该问你应该使用哪种validation方法。 在那里做select,nsswitch.conf和pam.d脚本将自动更新。 您需要掌握关于您的AD域名的一些细节,但无论如何,您应该知道它们(例如使用哪个DC以及Kerberos域名是什么等)。

相信我,我已经研究了很多(本网站对这方面的一些问题是从我这里得到的),sssd就是答案。 它甚至适用于笔记本电脑,因为凭证被caching,您可以确定caching的特征。

这里是我们的sssd.conf文件,带有一些注释:

 # SSSD configuration generated using /usr/lib/sssd/generate-config [sssd] config_file_version = 2 reconnection_retries = 3 sbus_timeout = 30 services = nss, pam domains = your.domain [nss] filter_groups = root filter_users = root reconnection_retries = 3 debug_level = 8 [pam] reconnection_retries = 3 debug_level = 8 [domain/<your.domain>] ; Using enumerate = true leads to high load and slow response enumerate = false cache_credentials = true #entry_cache_timeout = 60 id_provider = ldap auth_provider = krb5 chpass_provider = krb5 #access_provider = ldap ldap_uri = ldap://you.domain.controller ldap_search_base = CN=Users,DC=your,DC=domain ldap_tls_reqcert = demand ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt ldap_default_bind_dn = cn=LDAPsearch,CN=Users,dc=your,dc=domain ldap_default_authtok_type = password ldap_default_authtok = <password for LDAPsearch> ldap_pwd_policy = none ldap_user_object_class = user ldap_group_object_class = group ldap_user_home_directory = unixHomeDirectory krb5_kdcip = your.domain.controller krb5_realm = <kerberos realm name> krb5_changepw_principle = kadmin/changepw krb5_auth_timeout = 15 

这是基于在Windows Server 2008中使用UNIX服务(现在是Windows 2000的一个组成部分,曾经是2k3及更早版本的加载项)。

与其他LDAP系统不同的是,在检索任何数据之前,AD需要经过身份validation的会话。 我们已经创build了一个名为LDAPsearch的特殊用户来实现这个function,但是也可以用真正的域用户来完成。

configuration用户时,必须设置其UNIX服务详细信息(主目录,用户标识和主要组成员身份),但这非常简单。

显然你可以使用不同的search基础,你也可以添加filter,以确保用户是特定组的成员等。只需阅读sssd的手册页。

看看类似开放 。 虽然有一个模拟的Windowsregistry不是很好, 但是,更新的版本已经变得相当稳固,值得一看。

同样是受欢迎的,但是我最近在我的工作实验室中一直在使用Centrify Express来处理我的所有Linux操作系统,这真是太好了。 它带有他们自己的SAMBA版本,并且安装RPM很简单(确保你阅读PDF)。

在这个线程中有一个类似的问题, OP使用winbind来完成用户名和UID查找,而pam_krb5用于密码validation。 我现在有几个挤压服务器。

所有必要的部分都在Debian中。 不需要第三方或非安全更新的存储库。

SSSD可能是答案,虽然我还没有使用它,所以我不知道。 我用的是samba3x的winbind,工作得很好。 至less直接configurationkerberos和ldap的问题是你必须为所有现有用户回填UID / GID和主目录,并在AD / LDAP中维护两个数据世界,这似乎不是一件好事使用时间。 winbind将公开本地AD组,重新生成Kerberos中的机器帐户等。唯一的缺点是它坚持15个字符或更less的主机名来维持一些奇怪的NetBIOS兼容性,我不相信实际存在或对任何事内部的窗口,每过一段时间守护进程得到楔入,需要重新启动,这需要工作的OOB访问。 结合pam_mkhomedir和pam_access,帐户可以自动填充本地帐户,如果需要,可以限制哪些用户可以访问哪些主机。 请注意,尽pipe用户名和组中有空格的组在其数量惊人的地方工作,但它们会破坏一些工具,如pam_access access.conf不能与其中包含空格的组一起工作。