Users
如何確定目前使用者是否在特定組中?
如果我輸入
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 的另一個組的成員,則將其列為其成員之一。請記住,在
passwd
和group
數據庫中,關鍵是使用者/組名稱,而不是 id,並且多個使用者/組可以具有相同的 id。因此,首先通過將 id 轉換為名稱並進行比較的方法在一般情況下是錯誤的(儘管如今,很少有幾個使用者共享相同的 uid,甚至更罕見的是多個組共享相同的 gid)。