如何列出组中的用户及其密码

如何列出组中的用户及其密码

如何查看特定组中的用户列表及其密码或属性?

我知道使用

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'

相关内容