通过全名/gecos 字段查找用户名?

通过全名/gecos 字段查找用户名?

给定一个系统,其中用户数据来自 OpenLDAP 数据库,并且不在文件中/etc/passwd。是否可以getent passwd通过指定(部分)全名来搜索数据库并查找用户 ID/名称?

例如getent passwd newbie给我以下条目

newbie:x:1000:1000:firstname lastname:/home/newbie:/bin/zsh

如何找到所有具有“姓氏”的用户?有没有类似的东西getpwnam对于 gecos 领域?

注意:我不能只使用getent passwd(没有用户名)然后解析它,因为我的数据库太大了。

答案1

我还没有找到搜索数据库的方法,但在 OpenLDAP 中查找条目直接对我有用。

$ ldapsearch -x -h ldap.example.com -ZZ \
             -D cn=lookup,dc=example,dc=com -W \
             -b ou=People,dc=example,dc=com -LLL \
             sn=lastname uid
dn: uid=newbie,ou=People,dc=example,dc=com  
uid: newbie

$

答案2

您可以使用类似以下sed命令的命令:

$ SURNAME=Smith
$ getent passwd | sed -n '/'$SURNAME'/s/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([[:alpha:]]\+ '$SURNAME'\):\([^:]*\):\([^:]*\)$/\1 (\5)/p'
$ fps (Finnbarr Smith)
  jms (James Smith)
$

根据您的问题,上面的“sed”正则表达式假定 GECOS 字段恰好包含 <FIRSTNAME><SPACE><LASTNAME>,例如“James Smith”。它可以轻松修改以适应其他 GECOS 现场布局。

答案3

您可以在以下输出上使用 awk getent passwd

getent passwd | awk -F: '$5 ~ /lastname/ {print $1}'

相关内容