我想在我们的一些服务器上设置 pam_ldap 以便我们可以集中管理谁有权访问哪个服务器,并且如果有人离开公司,则可以轻松撤销访问权限。
我已经做了一些研究并得到了这个工作。万岁!
但是,我还希望能够使用公钥-私钥登录 - 即允许用户将他们的公钥存储在 LDAP 目录中,并且也可以使用这些登录。
我找不到任何关于能够做到这一点的文档,但我也找不到任何不应该这样做的原因。有没有办法做到这一点,或者是否有一些根本原因使其不起作用?
我正在配置一个 subversion 存储库以使用基本的 LDAP 身份验证。我的http.conf文件中有一个条目,如下所示:
<Location /company/some/location>
DAV svn
SVNPath /repository/some/location
AuthType Basic
AuthName LDAP
AuthBasicProvider ldap
Require valid-user
AuthLDAPBindDN "cn=SubversionAdmin,ou=admins,o=company.com"
AuthLDAPBindPassword "XXXXXXX"
AuthLDAPURL "ldap://company.com/ou=people,o=company.com?personid"
</Location>
Run Code Online (Sandbox Code Playgroud)
这适用于需要登录的活生生的人。但是,我还需要提供对存储库的应用程序帐户访问权限。这些帐户位于不同的 OU 中。我需要添加一个全新的<location>元素,还是可以AuthLDAPURL在现有条目中添加第二个元素 ?
我是 LDAP 的新手,我已经使用 LDAP 配置了帐户,因此我可以使用 LDAP 在几台计算机上登录。
现在我想向 LDAP 添加一些主机名。在/etc/nsswitch.conf我改变:
hosts: files dns ldap
Run Code Online (Sandbox Code Playgroud)
但我不知道如何向 LDAP 数据库添加任何内容,以便它可以解析一些名称。我试过谷歌,但我找不到任何有用的东西。
例如,如何添加:
192.168.1.1 node1
Run Code Online (Sandbox Code Playgroud) 我已经能够让我的一些 linux 服务器根据我的 LDAP 目录服务器对用户进行身份验证,但是我在尝试使用 FreeBSD 中的 nss_ldap 和 pam_ldap 时遇到了一些麻烦。
来自此处的 FreeBSD 官方文档:http : //www.freebsd.org/doc/en/articles/ldap-auth/client.html
我安装了这两个包,并在同一目录 nss_ldap.conf 中创建了一个配置文件 /usr/local/etc/ldap.conf,以及该文件的符号链接。根据文档,他们都可以使用相同的配置文件。我保持它非常简单,直到我可以让它工作:
ldap.conf/nss_ldap.conf:
base dc=corp,dc=example,dc=org
host 192.168.0.100
ldap_version 3
binddn cn=admin,dc=corp,dc=example,dc=org
bindpw secret
Run Code Online (Sandbox Code Playgroud)
据我所知,NSS 有效。“getent passwd”显示来自 LDAP 目录的信息以及本地内容。
现在我想进行身份验证,所以我在 /etc/pam.d/sshd 中添加了一行:
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass debug
auth required pam_unix.so no_warn try_first_pass
Run Code Online (Sandbox Code Playgroud)
我重新启动 ssh(不确定是否有必要),然后尝试使用本地不存在的 LDAP 用户(coryj)登录。它静默失败,日志显示:
Sep 9 13:13:54 …Run Code Online (Sandbox Code Playgroud) 我相信你们中的一些人已经处理过同样的问题。我希望有人有比我现在正在做的更好的答案。
因此,您在 LDAP 目录中有一些用户,有一天您会说“嘿!我可以通过 SSH 验证这个东西!” 这很好。
然后有一天你意识到你只希望某些用户能够进入一台机器。比如说,开发人员应该只能进入开发箱,而不是生产箱。您进行了一些谷歌搜索,并pam_groupdn在您的 LDAP 配置 ( /etc/ldap.conf) 中找到了如下内容:
pam_groupdn CN=developers,OU=groups,DC=yourcompany
Run Code Online (Sandbox Code Playgroud)
而且,这很好。您为产品创建另一个小组,为 QA 设立另一个小组,等等。也许有一天您有第二个产品开发小组,所以他们有自己的小组。任何。
有一天,您将拥有一台服务器,开发人员和 QA 都需要能够登录该服务器。呃...事实证明它pam_groupdn不需要多个值。你做什么工作?好吧,如果你没有多想,你会说“哦,我只是建立一个开发人员和 QA 小组!”。
pam_groupdn CN=developers-and-QA,OU=groups,DC=yourcompany
Run Code Online (Sandbox Code Playgroud)
那……不好,但没关系,对吧?
然后有一天,你就会得到一个开发人员,你意识到你需要将它们添加到15组,因为有developers-and-QA,product1-and-product2,developers-who-have-access-to-prod等。废话。
必须有更好的方法来做到这一点,对吧?我给 的开发人员发了电子邮件pam_ldap,他们说不幸的是没有办法pam_groupdn获取多个值(不用修改代码)。
任何人都想分享他们如何在 LDAP 中管理组组而不诉诸复制/粘贴?
在我公司的网络上有一小部分 iMac。目前他们使用 Active Directory。我们查看了 Apple Open Directory,但 500 美元的 OSX Server 副本(更不用说运行它的 Apple 硬件)似乎有点贵。
我想知道是否有替代 Open Directory 可以完全或接近完全模拟 Open Directory。
我正在使用ldapsearchOpenLDAP 工具在我们的公司 Active Directory 中搜索我的电子邮件和电话号码。此查询是一项测试,以确保我可以针对域进行身份验证,以便我可以使用 NTLM 身份验证设置 linux wiki。我的理论是,如果我可以成功查询 AD 信息,那么我离让我的 wiki 对 AD 进行身份验证更近了一步(我有在 ActiveDirectory 下设置 moin wiki 的说明)。
问题是我似乎无法ldapsearch正确查询。我在网上看到很多教程都表明-D应该是这样的-D "Americas\John_Marsharll";但是,ldap_bind: Invalid credentials (49)当我使用Americas\John_Marshall. 我唯一一次得到有意义的结果是当我使用以下参数进行查询时。但是,即使那样,我也无法弄清楚如何获取电子邮件和电话号码。
[John_Marshall@WN7-BG3YSM1 ~]$ ldapsearch -x -h 10.1.1.1 \
-b "cn=Users,dc=Americas" mail telephonenumber -D "cn=John_Marshall,dc=Americas"
# extended LDIF
#
# LDAPv3
# base <cn=Users,dc=Americas> with scope subtree
# filter: (objectclass=*)
# requesting: mail telephonenumber -D cn=John_Marshall,dc=Americas
#
# search result
search: 2 …Run Code Online (Sandbox Code Playgroud) 我一直在使用术语“单一源”来表示使用单一身份验证源(例如单一 LDAP 服务)但不是单一登录的身份验证方案。即您必须多次登录,但您使用的是相同的凭据。
“单一来源”身份验证是否有常用的技术术语或首字母缩略词?我找不到一个。
我试图让Jenkins通过我们的活动目录组对用户进行身份验证。
如果我插入用户,他们会被正确查找。如果我插入组名,则找不到它们。
编辑:通过反复试验,我发现通过组进行的身份验证确实有效,也就是说,一旦我将组添加KS-Soft到列表中,该组中的用户就可以登录。但是,在输入用户名和组名的列表中,Jenkins 尝试显示一个图标,表明它是用户还是组。用户图标显示正确,但组图标始终是错误图标。
所以看起来 Jenkins 可以通过组成员身份验证用户,但它无法验证给定的组名字符串是否存在于目录中。这在技术上甚至可能吗?(也许只是图标显示搞砸了。)
Jenkins设置如下:(注意:mydomain和com用户名不同,其余为精确值)
Server : ldap://ks-dc01.mydomain.com:389
root DN : dc=mydomain,dc=com
User Search Base : ou=KSUser
User Search Filter : userPrincipalName={0}
Group search base : ou=KSGroups
Manager DN : CN=Placeholder Martin,OU=Benutzer,OU=KSUser,DC=mydomain,DC=com
Manager Password : *****
Run Code Online (Sandbox Code Playgroud)
通过此设置,我将用户输入martin.placeholder@mydomain.com到列表中,然后 Jenkins 可以查找该用户,然后我就可以登录了。
但是,我无法让 Jenkins 解析组名称。我使用AD Explorer来确认我的组实际上在下面OU=KSGroups。
我CN=KS-Soft在 AD Explorer 中显示了一个组,它有一个member属性列出了我感兴趣的所有用户。(用户 martin.placeholder@mydomain.comCN=Placeholder …
好的,所以我第一次学习和配置 openLDAP 部分基于本教程:
http://www.rjsystems.nl/en/2100-d6-openldap-provider.php
我正在尝试添加一个示例用户,但我想我在教程中注意到了一个类型。在示例 ldif 中,作者使用了cn: Christopher. 我认为 cn 应该是一个较短的名称,如果不完全相同,则类似于 uid。所以在我的 ldif 中,我同时设置了cn和gn(givenName),但是我收到了关于 givenName 的错误:
ldap_add: Object class violation (65)
additional info: attribute 'givenName' not allowed
Run Code Online (Sandbox Code Playgroud)
这是我的 ldif:
dn: cn=tarcuri,ou=groups,dc=example,dc=com
cn: jsmith
gidNumber: 20000
objectClass: top
objectClass: posixGroup
dn: uid=tarcuri,ou=people,dc=example,dc=com
uid: jsmith
uidNumber: 20000
gidNumber: 20000
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: jsmith
gn: John
sn: Smith
loginShell: /bin/bash
homeDirectory: /home/jsmith
userPassword: john
Run Code Online (Sandbox Code Playgroud)
我将如何修改我的 ldif 文件以正确设置“givenName”,因为它似乎person应该能够有一个名字。sn毕竟需要。 …