그룹의 사용자 및 해당 비밀번호를 나열하는 방법

그룹의 사용자 및 해당 비밀번호를 나열하는 방법

특정 그룹의 사용자 목록과 해당 비밀번호 또는 속성을 보는 방법은 무엇입니까?

나는 사용하는 것을 안다

cut -d: -f1 /etc/passwd

하지만 이는 사용자만 나열합니다.

답변1

기본 그룹이 다음과 같은 사용자를 나열하려는 경우 somegroup:

gid=$(getent group somegroup | awk -F : '{print $3}')
getent passwd | awk -F : -v gid="$gid" '$4 == gid'

이 답변은 Glibc에 의존하기 때문에 임베디드 Linux를 가정합니다.getent유용.

두 번째 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'

관련 정보