在O'Reilly 的《Classic Shell Scripting》中,Arnold Robbins 和 Nelson HF Beebe 写了以下内容:
如果将用户附加到用户 ID 100 的文件系统
smith
安装到或导入到已分配给用户 的用户 ID 为 100 的文件系统jones
,则jones
可以完全访问的文件。即使目标系统上存在smith
另一个名为 的用户,情况也是如此。smith
说实话,我不确定我是否真的理解了这件事的含义。
这是否意味着如果我有一个闪存驱动器,mount
并且我在其上有一个在我的系统上创建的cp
文件,那么可以使用用户名(可能为此目的专门创建)在另一个系统上访问该闪存驱动器,然后该用户可以访问我在我的系统上对该文件的访问权限?myself
umount
mount
myself
现在我写了它,我开始认为它没有什么奇怪的,从某种意义上说,文件没有被加密或任何东西,并且myself
cp
在闪存驱动器上读取文件确实意味着我正在尝试共享它,所以它在其他地方可读并没有什么问题/不安全。
我是否遗漏了什么?
文本表明,如果 UID 100(
smith
)拥有一个文件,并且磁盘被移动到 UID 100 也存在的另一个系统,那么无论 UID 100 是什么用户(例如jones
),该用户都将拥有该文件。在您的示例中,如果
myself
(可能是具有 UID 1000 的用户)创建了一个文件,并且该磁盘被移动到用户具有 UID 5000 的系统myself
,那么该文件将不再归属于myself
UID 1000 的用户,而是归属于该用户。重点是用户名并不重要。重要的是 UID,即标识用户的数字。如果将磁盘移动到不存在一个或多个所有者的系统,则该
ls -l
命令将以纯数字而不是用户名的形式列出所有者。root 用户可以使用该chown
命令重新分配文件所有权。您引用的文本并未提及文件的内容。如果文件已加密,而您又丢失了密钥,即使您从未移动过它,您也无法访问解密后的内容。这与文本的重点无关。
这假设底层文件系统完全支持 UID。
例如,如果您的 USB 上有一个文件系统,它很可能是 exfat 或 vfat 格式,这两种格式都不支持 UID,并且在安装它们时,文件所有权通常会映射到安装该驱动器的用户,以绕过这些问题。
但是,如果你将 USB 格式化为 ext4fs,那么当你在非对齐的系统之间移动它时很可能会遇到 UID 映射问题。
这也是企业系统使用 SSO 的一个很好的理由——单点登录系统也意味着统一的用户 ID 使文件系统共享变得更加容易。
文件系统部分已经回答过了。此外:
如果您有不同的系统并且想要避免这个问题,那么您可以使用存档。可能取决于存档的类型,但
tar
会存储 ID 和名称。如果提取系统中不存在该名称,则使用 ID。