현재 사용자가 특정 그룹에 속해 있는지 확인하는 방법은 무엇입니까?

현재 사용자가 특정 그룹에 속해 있는지 확인하는 방법은 무엇입니까?

들어가면 groups목록이 나오는데,

$> groups
ecarroll cdrom floppy audio dip video plugdev netdev bluetooth docker

로그인한 사용자가 특정 그룹에 속해 있는지 확인하는 방법은 무엇입니까?

답변1

현재 프로세스의 실제 gid, 유효 gid 또는 주어진 그룹 이름과 일치하는 보충 gid 중 하나를 찾으려면 GNU 시스템에서 다음을 수행할 수 있습니다.

if
  gid=$(set -o pipefail; getent -- group "$group" | cut -d: -f3) &&
    id -G | grep -qwe "$gid"
then
  printf '%s\n' "current process credentials include $group's id ($gid)"
fi

또는 다음을 사용하여 perl:

perl -se 'if (@g = getgrnam($group)) {
            for (split " ", $)) {exit if $_ == $g[2]}
          }
          exit 1' -- -group="$group"

주어진 객체가 $user주어진 그룹의 구성원으로 나열되어 있는지 또는 기본 gid가 의 ID와 일치하는지 확인하려면 $group동일한 작업을 수행할 수 있지만 id -G -- "$user"대신 을 사용할 수 있습니다. 그러나 그렇지 않은 경우에도 구성원이라고 id -G말할 수 있습니다. 동일한 GID를 가진 다른 그룹의 구성원인 경우 해당 구성원 중 하나로 나열됩니다.$user$group

passwd및 데이터베이스 에서 다음을 기억하세요 group.열쇠는 ID가 아닌 사용자/그룹 이름이며, 여러 사용자/그룹이 동일한 ID를 가질 수 있습니다. 따라서 먼저 ID를 이름으로 변환하고 비교하는 접근 방식은 일반적인 경우에 잘못된 것입니다(비록 요즘에는 여러 사용자가 동일한 uid를 공유하는 경우가 드물고, 여러 그룹이 동일한 gid를 공유하는 경우가 더 많아 충분하지 않습니다).

답변2

한 가지 옵션은 다음을 사용하는 것입니다.

groups | grep -E '(^| )mygroup($| )'

관련 정보