针对AD对Linux服务器进行身份验证的实用性如何?


18

我们在软件开发公司同时使用Windows和Linux服务器。

此设置的摩擦点之一是我们没有单一的登录解决方案。我们想通过AD进行身份验证,而不是Linux商店,而是Microsoft商店。

我在线阅读了几篇文章,并且我知道这是可能的。

我们当前在Linux上使用以下需要身份验证的服务:
-git服务器(通过SSH)
-Sendmail-
当前使用.htaccess文件的Apache Web服务器。
-SAMBA文件共享

我想知道这种设置有多实用?它真的有效吗?还是容易出错?


感谢大家的出色回答,这使我对现实世界中这种设置的体验有了更好的了解。这确实有帮助。由于所有人都回答问题,因此在此处选择正确的答案很困难。
菲利普·富里(Fourie)2009年

检查FreeIPA :) freeipa.org
GioMac

Answers:


11

这并不难,而且非常实用。

我们有几百个使用AD身份验证的双启动台式机,以及许多使用AD身份验证的服务器,这些服务使Windows客户端无需用户进行显式身份验证即可使用其samba共享。

在SF上还有另一篇关于您需要做什么的文章。

基本上,您需要配置kerberos,winbind,nss和pam。

然后,您执行a kinit和a net ads join并进行操作。

您可以根据需要将pam配置为使用多种方法进行身份验证,因此,如果其中一种方法不起作用,它将退回到下一个方法。

我们通常将文件,winbindd和ldap用于将文件共享提供给Windows服务器的服务器。

如果可能的话,我会使用LDAP来提供帐户信息,并严格使用windbind进行身份验证,但是我相信如果需要的话,您可以在/etc/ldap.conf中映射属性。如果最终确实使用winbindd来获取帐户信息,则可以使用RID(哈希方法)生成uid / gids,但也可以使用其他方法。我们在一个大型文件服务器上使用了RID,这确实很痛苦,因此,如果可能的话,我将尝试探索其他选项之一。在我们的例子中,上游IDM系统将所有AD用户和组反映在LDAP中,因此我们将LDAP用于较新服务器上的帐户信息,而将winbind纯粹用于身份验证。


6

使用“同时打开”进行身份验证绝对简单。http://www.likewise.com/products/likewise_open/index.php

多亏了“同等开放”,几乎我的整个Linux基础结构都具有集中式身份验证和用户管理功能。安装和实施非常简单。我不能对此说足够好。

注意,UID和GID是根据哈希函数分配的,因此在整个基础架构中它们都是相同的,因此NFS挂载可以完美地工作。


1
我同样在多台服务器上使用open,发现它运行良好。如果Apache / Sendmail是面向外部的计算机,则可能要检查是否有任何增加的延迟/负载。
凯尔·布​​兰特

3
现在链接已断开
gogaz

看起来(按网站内容)公司不再做此产品。
阿列克谢·马蒂安诺夫

4

我安装了Windows Services for Unix,并在AD中添加了一个名为“ Unix Authenticator”的用户,然后在linux计算机上进行了以下配置文件更改:

/etc/ldap.conf:
host ldap.<foo>.com
base cn=Users,dc=<foo>,dc=com
binddn cn=Unix Authenticator,cn=Users,dc=<foo>,dc=com
bindpw <password>
nss_base_passwd cn=Users,dc=<foo>,dc=com?sub
nss_base_shadow cn=Users,dc=<foo>,dc=com?sub
nss_base_group cn=Users,dc=<foo>,dc=com?sub
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_objectclass posixGroup Group
nss_map_attribute cn msSFUName
nss_map_attribute uid msSFUName
nss_map_attribute gid gidNumber
nss_map_attribute gecos sAMAccountName
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_attribute uniqueMember Member
pam_login_attribute msSFUName
pam_filter objectclass=user
pam_password ad
/etc/ldap.secret:
<password>
/etc/nsswitch.conf:
passwd: compat ldap
shadow: compat ldap
group: compat ldap
/etc/nsswitch.ldap:
host files dns
/etc/pam.d/system-auth:
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so use_first_pass
auth required /lib/security/pam_deny.so

account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix.so

password required /lib/security/pam_cracklib.so retry=3
password sufficient /lib/security/pam_unix.so nullok md5 shadow use_authtok
password sufficient /lib/security/pam_ldap.so use_first_pass use_authtok
password required /lib/security/pam_deny.so

session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so

希望这可以帮助。


这是一种有趣的方法,也感谢我也将探索这一途径。
菲利普·富里(Fourie)2009年

1
请不要按原样使用pam_ldap进行身份验证(在/etc/pam.d/system-auth中)。它将以明文形式发送您的密码。如果要通过LDAP进行身份验证,则应该使用LDAPS或GSSAPI。如果您想安全地使用LDAP,则可以使用LDAP进行NSS和Kerberos进行身份验证(请参见下文)
TheFiddlerWins 2015年

2

让Windows用户针对AD进行身份验证,但我们的大多数服务器(公共驱动器等)都是linux,并且它们是域的一部分。从Windows PoV没有人注意到。从我这边来说,使用Windows用户名感觉有点果味,但这就是它的大小。

只是用普通的老桑巴舞。


2

您不需要使用Samba,AD直接支持Kerberos和LDAP。您没有理由在大多数发行版上使用任何外部软件。

对于Debian / Ubuntu,您可以使用libnss-ldap和libpam-krb5来完成。有一些技巧可以使其达到100%。这假设您为Linux用户填充了“ unixHomeDirectory”,您的Linux机器使用的是Windows系统通用的NTP(由Kerberos要求),并且可以使用纯文本NSS查找(不是密码,而是组成员信息等)-您也可以使用TLS,但设置起来比较复杂)。除非您设置为使用TLS,否则不应在pam中使用pam_ldap作为密码或身份验证源。

/etc/ldap.conf

# LDAP Configuration for libnss-ldap and libpam-ldap.
# Permit host to continue boot process with out contacting LDAP server
bind_policy soft
# Define LDAP servers to use for queries, these must be Global Catalog servers
uri ldap://ldap.site.company.local
# Define root search location for queries
base dc=company,dc=local
#debug 1
# LDAP version, almost always going to be v3, it is quite mature
ldap_version 3
# Username used to proxy authentication. You can have this in a separate file owned by root for security OR use TLS/SSL (see man page)
# Do NOT use LDAP for authentication if you are using plain text binds, use Kerberos instead (and LDAP for authorization only). See libpam-krb5.
binddn cn=ldap-auth-svc,ou=ldap,ou=services,dc=site,dc=company,dc=local
# Password for proxy acct
bindpw SooperSekeretPazzwerd
#  TCP port to perform queries on, 3268 is a Global Catalog port which will reply for all users in *.company.local
port 3268
# Search range scope (sub = all)
scope sub
# Tell the client to close TCP connctions after 30 seconds, Windows will do this on the server side anyways, this will prevent errors from showing up in the logs.
 idle_timelimit 30
# Expect queries for group membership to return DN for group members instead of usernames (lets you use MSAD group membership seamlessly)
nss_schema rfc2307bis
# Filters - User accounts must have a UID >= 2000 to be recognized in this configuration and must have a unixHomeDirectory defined.
nss_base_group dc=company,dc=local?sub?&(objectClass=group)(gidNumber=*)
nss_base_user dc=company,dc=local?sub?&(objectClass=user)(!(objectClass=localputer))(uidNumber>=2000)(unixHomeDirectory=*)
nss_base_shadow dc=company,dc=local?sub?&(objectClass=user)(!(objectClass=localputer))(uidNumber>=2000)(unixHomeDirectory=*)
# Object Class mappings.  You may want to have the posixAccount to map to "mail" and have users login with their email addresses, i.e.  "nss_map_objectclass posixAccount mail".
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
# Attribute mappings.
nss_map_attribute uniqueMember member
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
# Attribute in LDAP to query to match the username used by PAM for authentication
pam_login_attribute sAMAccountName
# Filter for objects which are allowed to login via PAM
pam_filter objectclass=User

假设您的Linux机器使用的是知道AD的DNS服务器(可以解析带有适当SRV记录的_msdcs区域),则无需编辑/etc/krb5.conf。

/etc/nsswitch.conf应该为用户,组,影子提供“文件ldap”。

对于使用SSSD的Red Hat:

/etc/sssd/sssd.conf

[domain/AD]
id_provider = ldap
auth_provider = krb5
chpass_provider = krb5
access_provider = ldap

ldap_uri = ldap://ldap.company.local:3268/
ldap_search_base = dc=company,dc=com
ldap_default_bind_dn = cn=ldap-auth-svc,ou=ldap,ou=services,dc=site,dc=company,dc=local
ldap_default_authtok = SooperSekeretPazzwerd
ldap_schema = rfc2307bis
ldap_user_object_class = user
ldap_group_object_class = group
ldap_user_name = sAMAccountName
ldap_user_home_directory = unixHomeDirectory
enumerate = true
ldap_tls_reqcert = never
ldap_tls_cacertdir = /etc/openldap/cacerts

ldap_id_use_start_tls = False
cache_credentials = True
krb5_realm = SITE.COMPANY.COM
case_sensitive = false
[sssd]
services = nss, pam
config_file_version = 2

domains = AD
[nss]
filter_users = root,named,avahi,nscd

在这种情况下,您是否需要在AD端进行任何更改?我记得使用SAMBA时看到需要安装一些“用于Windows的Unix工具”吗?
马丁·尼尔森

此解决方案不依赖于SAMBA,而是使用本机LDAP / Kerberos。使用Unix工具的唯一原因是获得GUI来编辑POSIX用户/组属性。如果您使用的是SSSD,则不需要这样做。SAMBA(在Winbind中)使您可以安装使系统模拟Windows客户端的软件。上面的设置仅使用标准LDAP / Kerberos。
TheFiddlerWins 2015年

啊,该死,我想写“ ldap / kerberos”,我不知道发生了什么。我的错。但是,LDAP / Kerberos实际上并不需要AD的Unix工具吗?
马丁·尼尔森
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.