GID 是什么意思?

GID 是什么意思?

GID实际上是什么意思?

我用谷歌搜索了一下,这就是linux.about.com说:

进程的组标识号。有效的组号在/etc/group、 和文件的 GID 字段中给出/etc/passwd。当一个进程启动时,它的GID被设置为其父进程的GID。

  • 但是,这是什么意思?

我对文件夹的权限当前位于0755

我知道如果我为所有者设置 UID,它将是4755

如果我设置组的 GID 它将是2755

如果我为其他人设置粘滞位,它将是1755

  • 设置这些权限是否重要?

答案1

类 UNIX 系统中的每个进程,就像每个文件一样,都有一个所有者(用户,可以是真实用户,也可以是系统“伪用户”,例如daemonbinman等)和组所有者。用户文件的组所有者通常是该用户的主要组,并且以类似的方式,您启动的任何进程通常都由您的用户 ID 和您的主要组 ID 拥有。

但有时,需要具有提升的权限才能运行某些命令,但授予完全的管理权限是不可取的。例如,该passwd命令需要访问系统的影子密码文件,以便它可以更新您的密码。显然,您不想授予每个用户 root 权限,只是为了让他们可以重置密码 - 这无疑会导致混乱!相反,需要有另一种方法来临时向用户授予更高的权限以执行某些任务。这就是 SETUID 和 SETGID 位的用途。这是一种告诉内核在标记命令执行期间临时提升用户权限的方法。 SETUID 二进制文件将以可执行文件所有者的权限(通常root)执行,而 SETGID 二进制文件将以可执行文件组所有者的组权限执行。对于passwd属于rootSETUID 的命令,它允许普通用户通过以 root 权限执行,以受控和可预测的方式直接影响密码文件的内容。SETUID类 UNIX 系统上还有许多其他命令( chshscreenpingsu等),所有这些命令都需要提升权限才能正确操作。还有一些SETGID程序,内核临时更改进程的 GID,以允许访问日志文件等,sendmail就是这样的实用程序。

sticky bit用途略有不同。它最常见的用途是确保只有创建文件的用户帐户才能删除它。考虑一下/tmp目录。它具有非常自由的权限,允许任何人在那里创建文件。这很好,并允许用户进程创建临时文件(screenssh等,将状态信息保存在/tmp)。为了保护用户的临时文件,/tmp设置了粘性位,这样只有我可以删除我的文件,也只有你可以删除你的文件。当然,root 可以做任何事情,但我们必须希望系统管理员没有精神错乱!

对于普通文件(即非可执行文件),设置 SETUID/SETGID 位没有什么意义。某些系统上目录上的 SETGID 控制在该目录中创建的新文件的默认组所有者。

答案2

正如您所发现的,GID 是一个组的 ID 号。它只是操作系统表达与某些事物(进程、文件等)关联的(用户)组的一种便捷方式;它可以表示为固定大小的数字,而不是可能很长的字符串标识符。

在四个八进制数字的文件权限值(例如 0755)中,第三个数字指定组对文件的权限。如果省略第一位数字,则第二位数字指定组的权限。请注意,在这方面,文件和目录的处理方式相同,但对于目录而言,每个权限位的确切含义有些不直观。

这两个概念相关,但用途却截然不同。

至于你的问题“设置这些权限是否重要?”;他们总是被设置为某物,但由于在大多数情况下初始数字是 0(“没什么特别的”),因此为了简洁起见,它往往被省略。是否需要指定其他值完全取决于相关文件或目录的使用模式。

答案3

我认为你的意思是文件的“SGID”位,它与其 GID 不同。

这是我的计算机上的一个典型文件(ls -l 的输出):

-rw-r----- 1 bristol    users 16 2012-07-23 11:36 file.txt
abbbcccddd <-- See explanation below.

如果你看一下前 10 个符号,

(a) - :这只是一个普通的旧文件(与目录、符号链接、管道等相反......)

(b) rw- :所有者可以读写该文件,但不能执行该文件。店主是“布里斯托尔”,正如您稍后在队列中看到的那样。

(c) r-- :除所有者之外的该文件所属组的成员(示例中的“用户”)可以读取该文件,但不能写入或执行该文件。

(d) --- : 其他任何人都无法访问此文件(当然 root 除外)。

GID 字段告诉您该文件属于哪个组 - 在本例中为“users”。

根据您的描述,您可能指的字段是 SGID 位,这里有一个比我能想到的更好的解释:

http://www.codecoffee.com/tipsforlinux/articles/028.html

简短的版本是:如果一个可执行文件设置了 SGID 位,那么任何不在该组中但可以执行该文件的人都会在程序执行时暂时获得该组的权限。

例如,如果您有一个组“spool”可以在 print spooler 目录中读取和写入文件,您不希望任何人都乱搞这个目录,但您确实希望他们能够打印文件,您可以某些打印程序或脚本具有“spool”组并设置 SGID 位,当任何人启动该程序时,该程序现在可以写入 spooler 目录,而无需运行它的人获得完全访问权限。

相关内容