4

澄清:

getent group | grep someGroup | grep someUser

问题:这会在企业环境中转储可能附加到 LDAP 等的整个组 db,然后使用 grep 过滤它们以查看用户是否在 someGroup 中。

这就是所有组,无处不在。哎哟。

此外,管理命令通常设置为使它们对管理员以外的任何人都完全无法使用的东西。即使是简单的“嘿,他是那个小组的成员吗?” 类型查询。无法使用这些if [ -f -d etc...]命令,因为我正在为sodu -u someUser执行做准备。这就是说脚本没有以相关用户的身份运行。

问:有没有更好的方法?

4

2 回答 2

8

如果您知道用户名和组(如您所见),则可以id这样使用:

id -Gn username | grep '\bgroupname\b'

id -Gn将显示用户所属的所有组名,grep如果该组存在则返回 0,否则返回 1。 \b仅在单词边界上匹配,这使您无法匹配组名的子字符串(例如everyfor everyone)。

我相信id在所有 Unix 和类 Unix 系统上都可用。它在 Linux、OS X 和 OpenBSD 上肯定存在并且功能相同。但是,\b后者不适用于后者,因为它使用的是 BSDgrep而不是grepGNU——需要替代模式。

于 2013-10-19T02:10:11.507 回答
2

您可以尝试使用groups myUserwhich 打印用户所在的组,然后查看列表是否包含您想要的组。

于 2013-10-19T02:11:04.657 回答