2015-07-21 54 views
1

镜子问题:https://unix.stackexchange.com/questions/217300/where-how-is-user-group-information-stored-in-ubuntu。 (我会删除其中的一个后,我得到了答案)用户组信息存储在Ubuntu中的地点和方式?


两个地方可能:/etc/group/etc/passwd

如果我使用命令:adduser [username] [groupname],那么用户将被添加到组中,然后文件/etc/group将被更新。

但是,文件/etc/passwd未更新。如果通过groups命令检查我属于哪个组,我只能看到在passwd文件中声明的组。因此,用户不会被添加到组结果中。


我很困惑。

  1. 故事分组信息分别代入/etc/passwd/etc/group分别是什么意思?
  2. 为什么adduser只更新group文件?
  3. 如何通过命令将组添加到passwd文件中?
  4. 为什么groupspasswd文件返回组信息,但不是group文件?

谢谢。

+0

我觉得这个问题可能更适合[unix.stackexchange.com](http://unix.stackexchange.com) – NightShadeQueen

+0

哦谢谢指出。我会在那里相应地问一个。 – songyy

回答

1
  1. 在这些传统的文本文件(还有其他的方式,例如LDAP),您主要组去/etc/passwd(它例如用于创建文件的权限),所有其他组去/etc/group
  2. 看到1
  3. 那是不可能的,但你可以改变一个主要usermod -g
  4. 这是一个误解,groups显示所有组。但是当你开始一个新的会话时(新的登录),一个新的组只会被选中。您可以使用newgrp命令启动与给定组名称的会话作为主要组(您必须是该组的成员) - 作为副作用,它将查询用户数据库并更新组列表。
+0

谢谢,这真的是一个完整的答案。还有一个问题:“主要组”和“正常组”有什么区别? – songyy

+0

正在运行的进程具有*一个*组标识...当您启动一个进程时,它具有您的用户标识和主组的组标识。这就是为什么您创建的文件通常具有主组的组ID。 'newgrp'启动一个不同的主要组的子会话,我想通过调用'setsid(2)'和'setgid(2)'然后'execv(3)'你的shell –

+0

现在我明白了。谢谢! – songyy