Users

如何確定目前使用者是否在特定組中?

  • November 15, 2020

如果我輸入groups我會得到一個列表,

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

如何確定登錄使用者是否在特定組中?

一種選擇是使用

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

如果您想在 GNU 系統上查找目前程序的真實 gid、有效 gid 或任何與給定組名匹配的補充 gid 之一,您可以執行以下操作:

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)。

引用自:https://unix.stackexchange.com/questions/619667