我正在尝试设置 openLdap 服务器,在按照说明进行操作后,我卡在无法添加任何数据的地方。
我得到的错误是
ldap_bind: Invalid credentials (49)
Run Code Online (Sandbox Code Playgroud)
请帮助我解决这个问题。阅读调试数据和slapd.conf文件时要耐心,因为它们很长。
我的系统是: Red Hat Enterprise Linux 6.0
Installed openLdap using yum openldap*.
这是我的slapd.conf文件:
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2 …Run Code Online (Sandbox Code Playgroud) 我们有一个存储密码和其他用户数据的 LDAP 服务器。
尽管服务器不用于客户端计算机的身份验证,但仅用于客户端应用程序的身份验证。
所以用户在他们的客户端本地更改他们的密码。
只要我们使用 crypt,我就可以在 LDAP 中将 linux 哈希存储为 {CRYPT}$hash 并且它运行良好。
现在密码存储为加盐的 sha512 哈希值
,/etc/shadow 中的密码格式如下:
printf( "$6$%s$%s", $salt, $hash )
Run Code Online (Sandbox Code Playgroud)
$salt 似乎只是一个 ASCII 字符串,
我认为 $hash 是 $plainPW 和 $salt 串联的 sha512 摘要的 base64 编码结果,但我不确定。
LDAP 存储密码哈希是这样的:
printf( "{SSHA512}%s", $_96byteString )
Run Code Online (Sandbox Code Playgroud)
其中 $_96byteString 是 $saltedPWhash 和 $salt 的 512 位连接的 base64 编码结果
我试图对 $hash 进行 base64_decode,附加 $salt,base64_encode 结果并将其存储为上述 LDAP 格式的 $_96byteString。
唉 LDAP 无法通过此验证,一个简单的 ldapbind 就失败了。
有人知道如何转换 linux sha512 哈希值以便 LDAP 服务器接受它为有效吗?
我发现 linux crypt 使用与标准 mime …
我需要创建 UNIX 组的层次结构。像下面这样:
A
|\
| \
B c
|\
D e
|\
f g
Run Code Online (Sandbox Code Playgroud)
...其中 A、B 和 D 是 UNIX 组,而 c、e、f 和 g 是作为这些特定组成员的 UNIX 帐户。我用谷歌搜索了很多,但似乎这是不可能的。
目前,我们有以下几点:
更新:
@John 的帖子让我意识到我需要重新构建我的需求以消除歧义。
我需要的是:
但组 B 的成员需要与组 A 的成员具有相同的权限。(因此,如果组 A 是目录组所有者,则组 B 自动成为目录组所有者)。
顺便说一下,这是一个现实世界的问题,我可以完全控制 B 组及其成员;对其他团体及其成员的控制有限或无法控制。因此,我无法创建新组并向 A 组或 D 组中的成员授予成员资格。
在 LDAP 客户端上,有两个用户具有相同的用户名,例如“abc”。一个是 UID 1000 的本地用户,另一个是 UID 1001 的 LDAP 用户。如果我运行getent passwd 1000,返回的输出是
abc:x:1000:1000:本地用户:/home/abc:/bin/bash
如果我运行getent passwd 1001,返回的输出是
abc:x:1001:100:LDAP 用户:/home/abc:/bin/bash
主目录存储在NFS服务器中,并且我的主目录中的文件都是由LDAP用户创建的,因此主文件的UID都是1001。在passwd、group和shadow字段中,“files”位于“ldap”之前/etc/nsswitch。根据我的理解,这个顺序意味着 LDAP 客户端首先检查本地数据库,因此使用的是 abc 的本地用户。结果,当我运行 command 时ls -al ~,由于主文件的所有者 UID 是 1001,由于 UID 不匹配而无法映射到本地用户“abc”,因此上述 ls 命令输出的所有者应该是数字 1001 (这是未配置LDAP客户端的情况)。然而,实际输出是正确的“abc”。所以,我不明白为什么会发生这种情况。当我明确指定“files”位于“ldap”之前时,LDAP 机制如何设法解决 LDAP 客户端上的重复用户名?
LDAP 计算机正在运行 Ubuntu 22.04.3 LTS 服务器。
我已经通过 YaST GUI 在 OpenSuSE 11.2 中实现了一个 Open LDAP 服务器。我通过 LDAP 从本地机器和其他机器成功登录。我可以通过以下方式更改 LDAP 用户密码
passwd
在命令行上。但是,我无法通过命令行执行任何其他操作,例如
passwd -e username.
我收到以下错误
验证失败。LDAP 信息更新失败:操作错误 更改密码到期信息时出错。
这同样适用于任何其他有关密码到期或通过 锁定帐户的参数-l。这仅仅是 LDAP 服务器的限制,还是我的配置不正确?
我需要一种通过基于文本的界面进行 LDAP 查询的方法。我在自己的机器上使用 jXplorer,但那是一个图形客户端。顺便说一句,我正在运行 Ubuntu 服务器 14.04。
背景:
我环境中的服务器无法为其正在运行的系统同步用户数据库。主机名是正确的,它解析为正确的 IP,我可以进行连接测试,但是当我尝试执行用户查询时,它失败并显示错误“没有到主机的路由”。所以我需要一种方法来测试这个查询命令行。
我正在尝试在 Debian Jessie 上使用 OpenLdap 自动化设置 Kerberos MIT 身份验证。
身份验证部分运行良好,因为我可以使用我的 kerberos 帐户登录到 SSH。
我什至可以使用 pam_mkhomedir.so 创建用户主目录
但是,我不能使用 Ldap posixGroup 来允许访问我的 SSH 服务器:
这是输出 getent group
getent group | grep tupac
adminsLinux:*:3000:uid=tupac,ou=people,dc=maytacapac,dc=inc
Run Code Online (Sandbox Code Playgroud)
这是 sshd_config 的摘录:
AllowGroups adminsLinux
Run Code Online (Sandbox Code Playgroud)
以下是日志文件:
sshd[3305]: User tupac from a.b.c.d not allowed because not in any group
sshd[3305]: input_userauth_request: invalid user tupac [preauth]
sshd[3305]: Connection closed by a.b.c.d [preauth]
Run Code Online (Sandbox Code Playgroud)
这是id tupac输出
uid=20003(tupac) gid=20003 groups=20003
Run Code Online (Sandbox Code Playgroud)
tupac 用户不属于任何 Unix 组,但我想允许基于 OpenLdap posixGroup 的访问。我认为 /etc/nsswitch.conf 配置和 getent 组解析足以根据 posixGroups …
使用这个 cli:
$ ldapdelete -ZZ -W -D "cn=Manager,dc=site,dc=fake" -r ou=People,dc=site,dc=fake
Run Code Online (Sandbox Code Playgroud)
我删除了 People 的所有 UID,但问题是它也删除了 People OU。我知道重新创建空 OU 很容易,但我想删除 People OU 的所有 UID,但保留实际的 People OU?
我能够使用objectClass的userPrincipalName属性登录到 Active Directory user;(例如foo@mydomain.com)
我还设置了一个OpenLDAP服务器实例,我只能使用dn,例如
"cn=somecn,cn=anothercn,ou=someou,dc=mydomain,dc=com"
如何OpenLDAP使用另一个字段进行身份验证,例如,例如的mail属性inetOrgPerson?
更重要的是,即使这样的事情是可能的,任何人如何确保该领域的独特性?(我假设 AD 在该userPrincipalName领域提供了一个功能)
最重要的问题是:
潜在/隐含的问题:
/etc/sddm.conf?也就是说,在使用 Debian Jessie 的 LDAP/Kereberos 客户端上,有时 SDDM 登录屏幕会提供所有用于登录的 LDAP 用户的列表 - 有时则不会。
即,如何更改 SDDM 的登录屏幕以允许输入用户名并使用 LDAP/Kereberos 进行验证?
Samba 在 ubuntu 服务器 14.04 上运行良好。升级到 16.10 后,它不再启动。我还尝试在新的 16.10 虚拟机上安装 samba,但它不起作用。
这里的服务错误信息:
root@srvvm:~# systemctl restart smbd
Job for smbd.service failed because the control process exited with error code.
See "systemctl status smbd.service" and "journalctl -xe" for details.
root@srvvm:~# systemctl status smbd
? smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2017-01-30 17:27:42 CET; 2s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Process: 3075 ExecStart=/usr/sbin/smbd $SMBDOPTIONS (code=exited, status=1/FAILURE)
Main PID: 3075 (code=exited, status=1/FAILURE) …Run Code Online (Sandbox Code Playgroud) 我一直在 RHEL 6 上配置 OpenLDAP,似乎您已经运行以下命令来重建配置目录。我没问题,但我的问题是,假设我想更改服务器密码,每次更改配置时都必须完成整个过程吗?有没有办法在使用 RHEL6 方法构建后更改 slapd 配置?
以下是我在网上找到的建议。
此示例假定要从旧 slapd 配置转换的文件位于 /etc/openldap/slapd.conf 并且 OpenLDAP 配置的新目录位于 /etc/openldap/slapd.d/。删除新的 /etc/openldap/slapd.d/ 目录的内容:
rm -rf /etc/openldap/slapd.d/*运行slaptest检查配置文件的有效性并指定新的配置目录:slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
配置新目录的权限:chown -R ldap:ldap /etc/openldap/slapd.d
chmod -R 000 /etc/openldap/slapd.d
chmod -R u+rwX /etc/openldap/slapd.d
澄清一下:我正在寻求有关如何使用较新版本的 openldap 编辑 slapd 配置的帮助,其中配置保存在架构中而不是原始slapd.conf.
在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser,在几个不同的程序中,目录的路径$HOME不会被替换~(相反,本地用户会发生这种情况)。
举几个例子:
在 中bash, 的值为PS1默认值:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Run Code Online (Sandbox Code Playgroud)
但它显示为
testuser@myhost:/home/testuser$
Run Code Online (Sandbox Code Playgroud)
代替
testuser@myhost:~$
Run Code Online (Sandbox Code Playgroud)
在 中neomutt,在列出邮件目录的左栏中,显示其完整路径
/home/testuser/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)
代替
~/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)
然而,在bash,
$ echo $HOME
/home/testuser
Run Code Online (Sandbox Code Playgroud)
所以这个env变量HOME在某种程度上是被认可的。
这可能是什么问题?
更新
我用来sssd管理 LDAP 用户的身份验证:
$ grep passwd /etc/nsswitch.conf
passwd: files systemd sss
Run Code Online (Sandbox Code Playgroud)
LDAP 用户和本地用户的条目看起来非常相似:
$ getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash
$ getent passwd localuser
localuser:x:<uid>:<gid>:,,,:/home/localuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)
和
$ echo $HOME
/home/testuser/
Run Code Online (Sandbox Code Playgroud)
与 …