如何验证用户是否在组中

如何验证用户是否在组中

我们将以下用户添加到组white_house

库库、特朗普、卡特

usermod -a -G white_house kuku
usermod -a -G white_house trump
usermod -a -G white_house karter

众所周知,我们可以验证用户是否已添加到组中

grep white_house /etc/group

但是否可以通过某种命令行或更优雅的方式来验证它?

答案1

你可以使用 getent

getent group white_house 

或者如果您想检查特定的用户组,您可以使用groups

groups karter

答案2

以下 shell 函数接受两个参数:

  1. 用户名
  2. 一个组名

它使用 询问有关该组的信息getent group,然后将该结果传递给 awk。 awk 获取用户列表(字段 4,用冒号分隔),并进一步将其拆分为“用户”数组,用逗号分隔。然后,它在单独的行上打印该数组的每个元素(用户名),然后grep检查给定的用户名。如果找到用户,grep(以及整个函数)返回 0/success;否则,返回 1/失败。 grep 标志的含义是:

  • -F-- 将搜索文本视为固定字符串,而不是正则表达式
  • -x-- 要求整行与搜索文本匹配(避免误报匹配,例如“john”和“johnson”
  • -q-- 不向屏幕打印任何内容,但适当设置返回码

function useringroup {
  getent group "$2" |
    awk -F: '{split($4, users, ","); for (name in users) print users[name]}' |
      grep -Fxq "$1"
}

像这样使用它:

useringroup myuser mygroup && echo myuser is in mygroup || echo myuser is not in mygroup

答案3

你可以运行id -Gn user_name

  • -G显示该用户名的所有组;
  • -n显示名称而不是 GID。

如果您需要检查该语句是否为真,那么以下(更复杂的)构造应该会有所帮助id -Gn user_name | grep group_name && echo "We are good" || echo "user_name is not the member of group_name

相关内容