我正在将硬盘安装到我的 Ubuntu 盒子下/media/newhdd
,前mount 有以下权限:
drwxr-xr-x 2 root team 4096 Jan 19 17:26 newhdd
drwxr-x---+ 2 root root 4096 May 14 2020 oem
我已经把群改成team
群了。后然而,安装时我看到的是:
drwx------ 4 29999 29999 4096 Jan 19 19:48 newhdd
drwxr-x---+ 2 root root 4096 May 14 2020 oem
这些数字是什么意思?权限为何发生变化?
信息: 我正在安装sudo mount /dev/sda /media/newhdd
。
答案1
不,权限没有改变。您的本地 UID/GID 分配与设置权限的系统的分配不匹配,只是您的系统显示不同。但磁盘上的权限仍然正确,如果您将存储移动到设置这些权限的系统,它将按预期显示它们。
每个系统都有自己的一组 ID。一般来说,它们是根据需要分配的。例如,当您创建一个组时,系统会为其分配一个 GID 并将分配存储在 中/etc/group
(默认情况下)。同样,当您创建一个用户时,系统会为其分配一个 UID 并将分配存储在 中/etc/passwd
。
系统帐户没有太大区别。发行版之间存在差异;例如,某些发行版可能会为某些应用程序“静态分配”一些 UID 和 GID;这些分配在系统安装时不会存储,但是当您安装需要自己帐户的软件时,安装程序会使用预定义的 UID/GID 为它们创建帐户。其他发行版(Gentoo)甚至不这样做;如果需要,UID 和 GID 会在第一次安装软件时重新分配。
有一些设置定义了池,从中获取这些 UID 和 GID 进行分配。 中的这些行/etc/adduser.conf
是其中之一,但还有其他;例如,我的系统没有 /etc/adduser.conf,但我有/etc/default/useradd
。您可以在创建帐户时通过提供具体的 ID 来覆盖它,如下所示:useradd -u 1100 -G users newuser
将创建具有 UID 1100 的用户,无论配置的任何范围如何。
因此,不同系统的名称对应不同的 UID/GID 几乎总是不同的。这在很大程度上取决于系统的历史:它是哪个发行版;软件的安装顺序;创建了哪些用户以及创建顺序等等。关于“任何”Linux 系统,我们唯一可以说的事实是,用户root
始终具有 UID 0
,而组root
始终具有 GID 0
。
例如,如果我安装了两个相同的 Ubuntu,然后在一个用户“alice”上首先创建,它的 UID 为 1000,然后是“bob”,它的 UID 可能是 1001;在另一个系统上,我首先创建“bob”,它的 UID 为 1000,其次是“alice”,她的 UID 为 1001。
另一方面,文件系统不存储用户名和组名;它们存储数字、UID 和 GID。扩展前面的示例,如果我在第一个系统上创建一个文件并将其所有者设为“alice”,则她的 UID 1000 将写入文件系统元数据。如果我将存储介质移动到第二台机器并访问该文件,“bob”将显示为其所有者,因为文件在元数据中的 UID 为 1000,而在第二台机器上,该 UID 对应于“bob”。
如果没有分配 UID 怎么办?不用担心,操作系统本身不关心名称,它只使用 ID,并且名称仅由用户空间翻译。当 和 中没有分配 UID 时,用户空间工具通常只显示“数字” /etc/passwd
ID /etc/group
。
Windows 系统没有太大不同。它有一个 ID 的“编号域”,称为 RID,用户和组安全标识符都取自该域(Linux 分别计算 UID 和 GID)。第一个本地用户的 RID 通常为 500。RID 与“编号域”结合产生 SID,SID 被写入文件系统元数据。分配存储在 SAM 数据库中。
这导致了一个非常重要的问题:如何集中管理一组计算机,以便存储可转移等等?对此有几种解决方案。其中一种,迄今为止最常用的是拥有一个管理分配的中央系统,所有加入的系统都从中查询分配。在本地系统上,这些分配的 ID 通常映射到某个“ID 域”。例如,MS Active Directory 始终具有具有活动 FSMO 角色的域控制器RID master
;这正是管理域中分配的系统。(如果你再想想,你会明白为什么此角色被设为 FSMO,即“单主操作”角色。)因此,即使媒体在计算机之间移动,域所拥有文件的权限也将在域中的所有系统上正确呈现。但如果媒体移出域,则会出现所有描述的映射中断的影响。Linux 系统也可以使用集中分配,有 NIS,甚至 MS AD 控制器也可以为加入 AD 域的 Linux 系统分配 UID/GID。
答案2
这似乎是一个动态生成的 UID,并且它从中选择此类 ID 的上限/etc/adduser.conf
:
# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999