如何查看特定组中的用户列表及其密码或属性?
我知道使用
cut -d: -f1 /etc/passwd
但这仅列出用户。
答案1
如果您想列出主要组为 的用户somegroup
:
gid=$(getent group somegroup | awk -F : '{print $3}')
getent passwd | awk -F : -v gid="$gid" '$4 == gid'
这个答案假设一个非嵌入式 Linux,因为它依赖于 Glibcgetent
公用事业。
您可以通过调整第二个 awk 命令来配置输出中所需的字段。例如,仅打印他们的真实姓名和电话号码:
getent passwd | awk -F : -v gid="$gid" '$4 == gid {print $5}'
如果要列出具有somegroup
补充组的用户,则需要首先从组数据库中检索用户 ID。
usernames=$(getent group somegroup | awk -F : '{print $3 "," $4}')
gid=${usernames%%,*}; usernames=${usernames#*,}
getent passwd | awk -F : -v gid="$gid" -v usernames="$usernames" '
BEGIN {split(usernames, names, /,/); for (name in names) user[name]=1}
name[$1] || $4==gid
'
您无法打印用户的密码,因为它们没有被存储。如果您有访问权限,您可以打印他们的密码哈希。如果您的密码数据库位于本地,则密码哈希值位于文件中/etc/shadow
。如果您获得用户名和其他字段的列表,您可以将其与影子文件连接起来:
… | awk … | join -t : -j 1 - /etc/shadow
答案2
#!/bin/bash
cut -d : -f 1 /etc/passwd | while read user
do
# check if user is in specific group
`groups $user` | grep -q <SPECIFICGROUP>
if [ $? -ne 0 ] ; then
continue;
fi
printf "User=${user},password=`awk -F: -v user=$user '$1 == user { print $2 ;} '`"
done
编辑:如果用户名是另一个用户名的前缀,则不处理这种情况
答案3
下面是我们可以获取组中的用户详细信息和用户密码的命令
#!/bin/bash
echo "enter the groupname"
read g
for user in `getent group $g| awk -F ":" '{print $NF}'| sed "s/,/ /g"`
do
echo $user
sed -n '/'$user'/p' /etc/passwd
done| sed '1i below are list of users in group and users password'