我的网络的核心用户数据库由 OpenLDAP 管理。最近,我们需要引入一种可能性,让一个用户代表第二个用户进行操作。由于所有与应用程序相关的权限和权限都存储在 LDAP 中,我们还希望将新架构存储在同一位置。
我的问题是 - 是否有常见的知名模式或最佳实践来在 LDAP 中存储此类委派权限?我听说使用 Active Directory 的 MS Exchange 中有这样的功能。
我有一个 LDAP 服务器运行在:
ldap://129.168.0.117:389
或
ldap://roshd.org:389
roshd.org = 129.168.0.117
我在 phpldapadmin 的 config.php 中有此配置:
$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','My LDAP Server');
$servers->setValue('server','host','192.168.0.117');
$servers->setValue('server','port',389);
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=Manager,dc=roshd,dc=org');
$servers->setValue('login','bind_pass','secret');
$servers->setValue('auto_number','search_base','ou=People,dc=roshd,dc=org');
Run Code Online (Sandbox Code Playgroud)
在我的 sldap.conf 中:
...
database bdb
directory /usr/local/var/openldap-data
suffix "dc=roshd,dc=org"
rootdn "cn=Manager,dc=roshd,dc=org"
rootpw secret
...
但是当我尝试登录 phpldapadmin 时,出现此错误。有什么想法吗?
Unable to connect to LDAP server My LDAP Server
Error: Can't contact LDAP server (-1) for user
error Failed to Authenticate to server
Invalid Username or Password.
我正在尝试在 Debian 7.7 服务器上设置 OpenLDAP。
虽然基本身份验证似乎有效,但我无法使“ memberof ”覆盖正常工作。
作为 LDAP 的新手,所有memberof配置对我来说似乎过于复杂 - 尽管阅读了大量教程......
在我当前的配置中,我主要遵循http://gos.si/blog/installing-openldap-on-debian-squeeze-with-olc上的教程
我说“大部分”是因为我跳过了“创建 LDAP 数据库”部分中的步骤。原因是,我无法创建数据库,因为所需的 olcRootDN ( cn=admin,dc=indunet,dc=it) 已被占用。slapd使用安装后它就已经存在了aptitude。也许这是以前安装的遗留物,但我这样做了,aptitude purge slapd甚至删除了该/var/lib/ldap/目录,并确保周围不再有 .ldif 文件,所以我不知道为什么cn=admin,dc=indunet,dc=it来自。
因此,我尝试以这种方式配置预先存在的数据库olcDatabase={1}hdb,cn=config(我添加了突出显示的条目):

作为参考,父组(“数据库”)具有以下属性:
(此处为全尺寸)
仅当使用绑定 DN 登录时我才能看到此配置cn=admin,cn=config。我无法在那里添加用户/组(可能因为这只是为了配置,对吧?)。因此,我在 phpLDAPadmin 中使用 DN 添加了一些组和一个用户cn=admin,dc=indunet,dc=it。
在 Apache DS 中,该配置如下所示:

我不确定是否memberOf应该在此屏幕中可见(我猜是这样),但无论如何该属性肯定不会发送到依赖于它的客户端。
如果我的配置完全损坏,我不会感到惊讶,但我花了 2 天尝试修复这个问题,老实说已经没有想法了......
随着时间的推移,我开始使用 LDAP,这是我当前的新树:

我配置了 OpenLDAP,今天我按照以下准则配置了 TLS 以提高安全性:使用 TLS=required 配置 OpenLDAP
使用配置文件修改 cn=config.ldif:
dn: cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1
Run Code Online (Sandbox Code Playgroud)
和: ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
现在,当我尝试创建 时ldapsearch,出现以下错误:
ldap_start_tls: Connect error (-11)
additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.
ldap_result: Can't contact LDAP server (-1)
Run Code Online (Sandbox Code Playgroud)
例子:
ldapsearch -Z -x -LLL "(uid=user1)" -d -1
Run Code Online (Sandbox Code Playgroud)
日志最相关的部分:
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172 …Run Code Online (Sandbox Code Playgroud) 我们有一个 ActiveDirectory,我们可以从中获取用户。因此 Linux 机器上的身份验证通过 pam 进行。
到目前为止,我们已经成功地完成了这部分工作,但我们需要所有用户都成为本地组“users”的一部分。据我所知,这对于组映射是有效的。
我的 SID 是:
SID for local machine MYSERVER is: S-1-5-21-1487948860-3705201071-3703638889
SID for domain MYDOMAIN is: S-1-5-21-1960408961-115176313-682003330
Run Code Online (Sandbox Code Playgroud)
我使用以下命令创建了组映射:
myserver:~# net groupmap add ntgroup="Domain Users" rid=513 unixgroup=users
Run Code Online (Sandbox Code Playgroud)
组映射如下所示:
myserver:~# net groupmap list -v
Domain Users
SID : S-1-5-21-1487948860-3705201071-3703638889-513
Unix gid : 100
Unix group: users
Group type: Domain Group
Comment : Domain Unix group
Administrators
SID : S-1-5-32-544
Unix gid : 10029
Unix group: BUILTIN\administrators
Group type: Local Group
Comment :
Users
SID …Run Code Online (Sandbox Code Playgroud) 我创建了这个自定义的非常基本的架构:
objectclass ( 2.25.2.2.1
NAME 'myObjectClass'
DESC 'myObjectClass objectclass'
STRUCTURAL
MUST ( cn )
)
Run Code Online (Sandbox Code Playgroud)
我已将其添加到 myObjectClass.ldif 文件中,没有任何问题:
dn: cn=myObjectClass,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: myObjectClass
olcObjectClasses: {0}( 2.25.2.2.1 NAME 'myObjectClass' DESC 'myObjectClass objectclass' STRUCTURAL MUST cn )
Run Code Online (Sandbox Code Playgroud)
使用 ldapmodify:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f myObjectClass.ldif
Run Code Online (Sandbox Code Playgroud)
现在我尝试用delete.ldif删除它:
dn: cn=schema,cn=config
changetype: modify
delete: objectClass
objectClass: 2.25.2.2.1
Run Code Online (Sandbox Code Playgroud)
使用ldapmodify总是得到ldap_modify:服务器不愿意执行(53):
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f delete.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=schema,cn=config"
ldap_modify: Server is unwilling …Run Code Online (Sandbox Code Playgroud) 我们已经设置了一个有效的 SSSD+Samba+Krb5 捆绑包,用于在 Linux 计算机上授权域用户。授权工作正常,但getent 组示例不会返回组中用户的完整列表。而id命令显示用户所属的特定组
\nid mshepelev命令示例(pam_nas_admins组存在):
\n ~$ id mshepelev\n uid=578290105(mshepelev) gid=1145492938(linuxadm) \xd0\xb3\xd1\x80\xd1\x83\xd0\xbf\xd0\xbf\xd1\x8b=128(vboxusers),132(libvirtd),\n6990039486(exchange_terminal),45633573(domain admins),6753567(domain users),4563345(it dept base),1019817232(printer_it),\n5673883(linuxadm),4356383822(buh),25472572456(pam_nas_admins)....\nRun Code Online (Sandbox Code Playgroud)\ngetent 组 pam_nas_admins示例(该组中没有 mshepelev):
\n ~$ getent group pam_nas_admins\npam_nas_admins:*:6969932058:nhramchihin,apyataev,\nvshuykov,isaidashev,admin,nrosnovskiy,itugunov,\nmalfereva,mdimitraki,izinoviev,gkulakov,mcherenkov,kfomchenko,mkotov,aromanovskiy\nRun Code Online (Sandbox Code Playgroud)\n\n\n更新\n
\n
同样的情况出现在另一台电脑上,但对于用户 isaidashev 来说反之亦然。Id命令返回完整列表,getent 组 pam_nas_admins返回除用户本身之外的所有人(输出有mshepelev用户但没有isaidashev用户)
以下是配置文件:\n /etc/krb5.conf
\ncat /etc/krb5.conf\n[logging] \n default = FILE:/var/log/krb5libs.log \n kdc = FILE:/var/log/krb5kdc.log \n admin_server = FILE:/var/log/kadmind.log \n[libdefaults]\n default_realm = example.com\n kdc_timesync = …Run Code Online (Sandbox Code Playgroud) 我需要绑定到 OpenLDAP 服务器来对用户进行身份验证,但我不希望这个低权限或“委派管理员”能够看到比严格必要的更多的属性。
如何使用白名单减少绑定用户可以看到的属性?哪些属性是对用户进行身份验证所必需的?
例如,这个特定的绑定用户不需要查看NTPassword,我想其他属性,如主目录等。
这是我到目前为止所做的:
我已禁用匿名绑定:
# disable anon bind
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
Run Code Online (Sandbox Code Playgroud)我创建了一个“应用程序”OU 和一个“gitlab”用户:
# file: applications.ldif
dn: ou=Applications,dc=example,dc=com
objectclass: top
objectClass: organizationalunit
ou: Applications
dn: cn=gitlab,ou=Applications,dc=example,dc=com
cn: gitlab
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {CRYPT}.....
Run Code Online (Sandbox Code Playgroud)要创建用户,我使用了 LDAP 管理员用户:
ldapadd -xvvv -f applications.ldif -D 'cn=admin,dc=example,dc=com' -W
Run Code Online (Sandbox Code Playgroud)为了限制“gitlab”权限,我试过这个:
# file: give-applications-access.ldif
dn: cn=config
changetype: modify
# allow …Run Code Online (Sandbox Code Playgroud)这是到目前为止不起作用的内容;
(&(objectCategory=Person)(objectClass=Group)(CN=group_in_question))
(&(objectClass=Group)(objectCategory=Group)(member=CN=group_in_question))
(&(samAccountName=%USERNAME%)(memberof=CN=group_in_question))
(&(objectCategory=person)(objectClass=user)(memberOf=cn=group_in_question,ou=Groups,dc=mydomain,dc=com))
我们已经在有线网络上正确配置了 LDAP+Kerberos。
现在我们希望我们的用户使用他们的普通凭据登录到我们的 WiFi 网络。我发现了很多关于 LDAP+RADIUS 的 HOWTOS,但没有一个在包中提到 Kerberos。任何人都可以向我指出有关将 RADIUS 与 Kerberos 集成的良好 HOWTO 吗?我在 Usenet 上只找到了这篇简短的文章和一些非信息性的帖子。
编辑:系统是使用 OpenLDAP 和 Heimdal (Kerberos) 的 Gentoo Linux。WiFi 硬件是几个带有 OpenWRT 的 Linksys WRT54GL。