如何查明当前用户是否属于特定组?

如何查明当前用户是否属于特定组?

如果我输入,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,但它可能会说它$user是 的成员$group,即使它们不是如果他们碰巧是具有相同 gid 的另一个组的成员,则被列为其成员之一。

请记住,在passwdgroup数据库中,钥匙是用户/组名称,而不是 id,并且多个用户/组可以具有相同的 id。因此,首先通过将 id 转换为名称并进行比较的方法在一般情况下是错误的(尽管如今,多个用户共享相同的 uid 的情况很少见,甚至多个组共享相同的 gid 的情况就更少了)。

答案2

一种选择是使用

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

相关内容