了解“工作人员”用户组


23

众所周知,所有用户都是“ staff”组的成员。如果设置标准用户并创建任何文件,则终端中带有“ ls -la”的文件列表将显示用户组为“ staff”。

使用dscacheutil命令,我们可以查看有关组的信息。例如: -

dscacheutil -q group -a name admin

这将返回有关admin组的信息,包括所有成员。

但是,当我用来查看“工作人员”组时,我希望将标准用户视为该组的成员,但事实并非如此:-

dscacheutil -q group -a name staff

name: staff
password: *
gid: 20
users: root

因此,如果所有标准用户都是人员组的成员,为什么他们不出现在此处?

是否有另一个命令可以显示职员组的真实成员?


3
好问题。如果没有引起足够的重视,我可能想悬赏这个。我本以为以某种方式将其编码为仅显示主要组成员,但是我所有的已命名用户(隐藏500以上)都以主要组作为工作人员,并且仍未被缓存util列为该组中的对象(奇怪的是,root的GID为列出...)的确是奇怪的调味料...
bmike

谢谢@bmike,有趣的是,在/ System / Library / CoreServices中的Directory Utility应用程序中也可以看到相同的内容。
TheDarkKnight

哦,我认为只有root是职员。像/ etc / group所示:staff:*:20:root
Scott Walter

@ScottWalter,管理员用户是“ staff”和“ admin”的成员,而非管理员是“ staff”组的成员。请参阅此处的“所有者,组,其他”部分:support.apple.com/kb/HT2963
TheDarkKnight,2014年

Answers:


11

在OS X中只有一种可靠的方法来获取组中的所有成员,而2DD8847的答复涵盖了这一点。至于“为什么”,我无法提供合理的解释。我只能告诉您的是与众不同的结果。

这些方法无法通过PrimaryGroupID包含仅是组成员的用户。可以考虑的一种方法是,这些未列出的用户没有被正式添加到人员组中。他们只是被赋予了与员工身份匹配的PrimaryGroupID。因此,它们并未在某些命令中正式列出。我知道,这很荒谬。

结果不正确:

dscl . -read /Groups/[groupname]
dscl . -read /Groups/[groupname] GroupMembership
dscacheutil -q group -a name [groupname]

完整的结果:

dscl . -list /Users PrimaryGroupID | grep [gid]

我真正能告诉您的是,如果不按组的PrimaryGroupID查找组成员(而不是列出组的成员),将无法获得完整的结果。总结一下Unix的特殊之处。有许多。

希望有帮助!

资源


“这些未列出的用户没有被正式添加到人员组中。他们只是获得了与人员组匹配的PrimaryGroupID”-现在有意义。我想知道是否有一个有效的安全攻击媒介;如果可以在没有实际将用户添加到管理员组的情况下设置用户的PrimaryGroupId,这会给他们管理员权限吗?我会调查。
TheDarkKnight

我并不是要暗示任何错误。不用担心,工作人员在您的计算机上没有管理员权限。在OS X中,几乎所有内容的所有者都设置为职员,但请记住,其他权限会覆盖对这一现实的滥用。每个其他用户都可以“读取”每个用户文件夹,但是在每个用户文件夹中,您将看到单个项目被设置为撤消了读取权限。因此,/ Users / username / Desktop已将每个用户设置为“ 禁止访问” -这不是干净的权限管理,但它可以正常工作并且您很安全。
sgelliott 2014年

4
也许您的意思是Chalk it up to the oddities of OS X. There are many.
user3019105

我正在查看另一台计算机上的光盘,是的,用户名被重命名,我成为用户“ 502”或“ 501”的“史蒂夫”。我的理论是“职员”可能应该被称为“ macosx”,Finder会用它来代表普通用户进行“有根”的工作。只是一个随机的理论。
Tomachi

2
@Tomachi员工不能是macosx,它是在OSX于NeXT成立之前的任何一年
user151019 18-11-19

4

您到底想实现/做什么?

此命令列出人员组中的所有用户:

dscl . -list /Users PrimaryGroupID | grep ' 20$'

资源

说明:人员组的PrimaryGroupID为20。


我想了解为什么人员组不通过dscacheutil和目录实用程序显示其成员列表。我的主要目标是使用C ++从组中检索成员列表,而无需调用单独的过程。在此过程中,我遇到了小组不显示成员的问题,我想知道为什么会这样。
TheDarkKnight

为什么dscacheutil不列出人员组...我不知道。developer.apple.com/library/mac/documentation/Darwin/Reference/…这是一个实现,因此他们决定不显示它们。
巴斯蒂安格鲁伯

2
抱歉,但是说“这是一个实现”并链接到dscacheutil的手册页并不能回答问题。
TheDarkKnight

对于C ++,可以调用shell函数。我发现此站点非常有用:blog.earth-works.com/2012/09/13/…我认为没有任何理由不显示该站点。他们建立了一个功能,而您却缺少了一些..我应该说些什么。他们阻止您向成员显示成员,因为他们喜欢吗?
巴斯蒂安格鲁伯

2
调用shell函数会产生一个单独的进程。由于各种原因,这对于我正在从事的项目不可行。现在我看身份认证服务:developer.apple.com/library/mac/documentation/networking/...
TheDarkKnight
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.