搜索具有完全匹配的特定用户组成员资格

搜索具有完全匹配的特定用户组成员资格

一个用户拥有多个包含空格的组成员身份。例子:

  • mydomain\员工
  • mydomain\员工管理员
  • mydomain\staff 超级

可以使用以下方式返回用户组:

id -Gn username | grep -i -o '\bstaff\b'

不幸的是,如果用户是“mydomain\staff admin”或“mydomain\staff super”的成员,而不是“mydomain\staff”的成员,则此操作会返回命中。如何仅搜索“mydomain\staff”组成员身份?


根据要求,示例输出来自

id -Gn username

如下(均为一行):

mydomain\staff mydomain\staff admin mydomain\staff super mydomain\其他一些组

答案1

由于id -Gn输出是空格分隔的,因此您不能使用它。

id自 coreutils 8.22 起,GNU 实现可以-z选择输出以 nul 分隔的列表,而不是以空格分隔的列表,因此您可以这样做(使用grep您似乎已经在使用的 GNU):

id -Gzn username | grep -Fxz 'mydomain\staff'

或者:

id -Gzn username | grep -z '\\staff$'

对于staff任何在领域(无论那是什么)。

否则,如果你有getent命令,你可以逆向解决问题:

staff_members=$(getent group 'mydomain\staff' | cut -d : -f 4-)
case ",$staff_members," in
  (*,username,*) printf '%s\n' 'username is member of mydomain\staff'
esac

相关内容