1

我想知道如何识别当前在 Solaris 中登录的用户是 LDAP 用户还是本地用户。
有什么命令吗?
或任何 C 运行时函数,如 getpname、getpwnam,它在用户登录后返回一个属性,说明它是 LDAP 用户还是本地用户?

4

5 回答 5

2

ldaplist 将告诉您用户是否在 ldap 数据库中有条目。但是,它并没有解决用户在 /etc/passwd 文件中也有条目的情况。

ldaplist passwd username
于 2009-12-07T10:08:12.283 回答
1

这并不容易。您可以打开密码文件并查找它们。如果它们不存在,则结束 LDAP。当然,除非它是 NIS。或 Kerberos。如果您的 Solaris 版本具有 PAM,您可以阅读它以查看它是否可以提供任何缓解。

于 2009-12-05T15:02:52.560 回答
1

我假设“本地”的 UID 与“LDAP”在不同的范围内。我还假设 nsswitch 配置为使用文件和 ldap 用于 passwd、shadow 和/或组。命令 'getent' 应该出现在 GNU libc 系统上。我将假设本地“文件”数据库小于 ldap 源,因此我们将要测试两个源中更小和/或更快的。

如果您想确定给定的 UID 是否存在数据库之一,您可以运行类似于

$ getent --service=files passwd | grep 655

这可能与文件中的默认 GID 匹配,因此可能需要更有创意的 grep。

$ getent --service=files passwd | grep -e $.*:.*:655

如果您希望将其变成可编写脚本的项目,那么您将需要在最后添加“wc”以进行整数测试。

$ getent --service=files passwd | grep -e $.*:.*:655 | wc -l

如果未找到,则应返回 0,如果找到,则应返回 1(或更多)。我们只会测试一个源,因为我们假设我们正在测试一个有效的 UID,并且如果它不在此处,它将在另一个源中。

最后,只要您使用 nsswitch,您应该能够使用任何支持此功能的 C 库来检查它们是否有效。我对它们没有任何第一手经验,但我认为您可以像我们在这里所做的那样传递一个选项,只使用特定的来源。或者,您可以使用与上述相同的逻辑,只使用 cat /etc/passwd。再次假设如果他们不在这里,他们就在 ldap 中。

于 2010-12-27T08:26:18.673 回答
1

如果您sss作为ipaclient包的一部分使用,

getent --service=sss passwd $USER | wc -l

将告诉您用户是否存在于 FreeIPA 服务器的 LDAP 数据库中。

于 2016-08-27T19:26:13.347 回答
0

我不知道如何判断他们用于实际身份验证的凭据,但在 LDAP 数据库中查找它们并查看它们是否存在应该更容易。我一直使用 ldap_client 实用程序来查找人员。您需要知道 ldap 服务器的名称以及其他一些详细信息。检查它的手册页。例如,如果用户有一个本地帐户,并且他们在 LDAP 中,那么登录时检查的密码将取决于系统配置。

于 2009-12-06T12:36:14.050 回答