如何识别当前登录的用户是否为Solaris中的LDAP用户

时间:2009-12-05 13:55:01

标签: ldap local solaris

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

5 个答案:

答案 0 :(得分:2)

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

ldaplist passwd username

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我假设“本地”的UID与“LDAP”分开。我还假设nsswitch配置为使用文件和ldap用于passwd,shadow和or group。命令'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。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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