编辑

编辑

我已经使用 Linux 很长时间了,而且我仍然我完全不知道文件权限到底是如何工作的。考虑到这一点,有没有人有我可以阅读的书籍或详尽的指南,以便真正完全理解这些内容?我已经完成了相当多的系统管理工作,所以我知道一些简单的事情,比如使目录可读可写、使文件可执行以及更改文件的所有者,但在用户之间共享文件方面,我却一无所知。

这是我的主要问题。我打算在多台机器上同步我的音乐库。我已经使用 Unison 有一段时间了,它是一个很好的选择,因为我可以在我刚刚设置的本地网络上通过 SSH 轻松运行它。双赢。

到目前为止,我一直在使用 2TB 外置硬盘同步计算机。(计算机 1 同步到 HD,计算机 2 同步到 HD,等等)这充其量是乏味的,特别是因为我加密了驱动器,将它连接到我的所有机器并同步它非常麻烦。无论如何,驱动器运行的是 ext4(在 TrueCrypt 中),因此它保留了所有 Unix 文件系统信息,如所有者和组。我刚刚设置了一台新机器,只是将它与 Unison 配合使用以将音乐放在上面,然后我意识到现在,我的所有权限都乱套了。我不得不以 root 身份运行 Unison,因为这是我可以从外置驱动器中获取文件的唯一方法。显然,由于我在这台机器上使用的用户名与我在所有机器上使用的常用用户名“rfkrocktk”不同,这实际上给系统带来了巨大的麻烦。

以下是我的用例。这台笔记本电脑有两个有效用户,“leandra”和“rfkrocktk”。我想在这两个用户之间共享音乐,所以我将 /home/rfkrocktk/Music 符号链接到 /home/leandra/Music。我如何 (a) 允许两个用户访问此文件夹中的读取/写入/删除文件,以及 (b) 保持所有内容同步,而不会弄乱文件所有权?


编辑

我能够让一切正常工作,但还不是完全正常。我将音乐目录的组 ID 设置为我的组,media-users并将我的主要用户rfkrocktk和共享用户都添加mt-daapd到该组中。现在,rfkrocktk可以完美访问文件,但mt-daapd无法在目录中看到任何内容。以下是我的 ID:

$ id rfkrocktk
> uid=1000(rfkrocktk) gid=1000(rfkrocktk) groups=1000(rfkrocktk),4(adm),20(dialout),24(cdrom),29(audio),46(plugdev),104(lpadmin),115(admin),120(sambashare),124(vboxusers),1001(jupiter),2002(media-users)

$ id mt-daapd
> uid=123(mt-daapd) gid=65534(nogroup) groups=65534(nogroup),2002(media-users)

我已尝试将mt-daap的主组 ID 设置为该media-users组,但没有任何改变。

以下是我对该/home/rfkrocktk/Music目录的权限:

drwxr-Sr-- 201 rfkrocktk media-users 12288 2011-01-13 12:26 Music

运行sudo -i -u mt-daapd ls -l /home/rfkrocktk/Music没有任何结果。我该如何修复此问题?

答案1

我将文件所有者设置为 root,将组设置为“music”,然后使它们都成为“music”组的成员。然后,将音乐目录设置为 setgid(这意味着在目录中创建的项目将继承目录本身的组所有权)。然后,将文件权限设为 0660,一切就绪。

文件权限包括用户、组、世界,通常显示为八进制数(例如 0660),其中:

1 - 执行 2 - 写入 4 - 读取

这些都可以添加,例如,0751 表示文件所有者可以读取、写入和执行;组可以读取和执行;其他人只能执行。

答案2

名字并不重要。Unix 文件和组所有权存储在文件系统中,并以数字形式存储,而不是按名称存储。从您的原始机器上以普通用户身份打开终端并输入:

id -u

这将为您提供您用户的数字 ID。检查文件所有权时,将对您的登录用户 ID 和文件系统中的 ID 进行比较。显示用户名时,通过查询 passwd 将 ID 转换为文本,从而得到您的本地名称。

在新机器上执行与上述相同的步骤。ID 是否不同?如果不同,则新机器上的“您”不是文件的所有者。在两台机器上,同样,如果您说

id -G

您将获得用户所属的组 ID 列表。每个文件的组必须与其中一个 ID 匹配,否则该文件不属于您的组。您可以使用 或 来获取文件的实际数字用户和ls -nd filestat file

在大多数情况下,两个不同的系统不会有相同的用户 ID。您可以通过编辑 passwd 手动同步它们,但随后您必须仔细更新系统上的所有文件,以将任何旧 ID 转换为等效的新 ID。在系统之间同步 ID 是一项复杂的任务,大多数家庭用户不会费心去做;这是 LDAP、NIS 和其他类似解决方案的领域。

为了解决您的问题,您需要让所有文件都归两个系统上都存在的组 ID 所有,然后确保两个系统上的用户都是该组的成员,然后授予chmod g+rw该组读/写访问权限 ()。

答案3

您可以将 Music 目录(及其所有文件和子目录)设置为具有 775 个权限,以便文件的所有者和同一组中的任何人都可以对文件执行任何操作。然后下一个技巧是创建一个新组,使用您想要的任何名称(例如 share),并将 Music 目录(及其所有文件和子目录) chgrp 到新组。现在您只需确保您授予对共享文件的读/写访问权限的用户位于“share”组中。如果您需要在其他计算机上使用此方法,只需注意共享组在所有计算机上具有相同的数字 ID 即可。

答案4

这里这是我认为有用的权限解释。 这个, 也。

相关内容