Unix权限:无论用户是谁,都可以访问文件?


3

我已经使用Linux很长一段时间了,我仍然完全不知道文件权限是如何工作的。考虑到这一点,是否有人有任何书籍或全面的指南,我可以阅读,以完全理解事情?我已经完成了我的公平分享系统管理,所以我知道简单的东西,比如让目录可读和写入,使文件可执行,以及更改文件的所有者,但是在跨用户共享文件时,我迷路了。

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

到目前为止,我一直在使用2TB外置硬盘来同步计算机。(计算机1与HD连接,计算机2与HD连接,等等)这是最乏味的,特别是因为我对驱动器进行了加密,使得将它连接到我的所有机器并同步它是一个巨大的麻烦。无论如何,驱动器运行ext4(在TrueCrypt中),因此它维护所有Unix文件系统信息,如所有者和组。我刚刚设置了一台新机器,只是Unison'd它就可以获得音乐,我意识到现在,我的所有权限都是fubar。我必须以root身份运行Unison,因为这是我可以让文件脱离外部驱动器的唯一方法。显然,由于我在这台机器上使用的是不同于所有机器上通常的“rfkrocktk”的用户名,这实际上会给齿轮带来巨大的影响。

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


编辑

我能够让事情变得有效,但还不完全。我将音乐目录的组ID设置为我的组media-users,并将我的主用户rfkrocktk和共享用户添加mt-daapd到组中。现在,rfkrocktk可以完美地访问文件,但mt-daapd无法在目录中看到任何内容。这是我的ids:

$ 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产量没有。我怎样才能解决这个问题?

Answers:


5

我将文件所有者设置为root,将组设置为“music”,然后使其成为“music”组的成员。然后,将音乐目录设为setgid (这意味着在目录中创建的项目将继承目录本身的组所有权)。然后,使文件权限0660,你已经设置好了。

文件权限是用户,组,世界,并且通常显示为八进制数字(例如,0660),其中:

1 - exec 2 - 写4 - 读

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


好的,所以我刚刚创建了一个名为的组media-users,将我的两个用户添加到该组,然后chgrp d my music directory to be grouped to the media-users`组如下:sudo chgrp -R media-users /home/$USER/Music。然后我chmodded该目录有以下perms:sudo chmod -R 0744 /home/$USER/Music所以我可以rxw,但组中的用户可以r。这应该足够好吗?如何setgid保持新创建的dirs在组中?
Naftuli Kay 2011年

这确实应该足够好,是的。要在目录上启用setgid,一个简单的chmod g+s dirname(或者chmod g+s .如果您已经在该目录中)将在目录的权限上启用setgid位。(你可以使用r,w,x,s或t作为权限部分,分别是read,write,execute,set(uid | gid)或sticky。)
Michael Trausch

嗯,似乎我遇到了麻烦。如果我尝试ls将音乐目录作为我的其他用户,我什么都看不到。:(这是我跑来测试它的命令:sudo -i -u mt-daapd ls /home/$USER/Music。如果我以普通用户的身份运行它,它运行得很好。我编辑了上面的帖子,其中包含有关我的用户和组的新信息。你能看一下吗?
Naftuli Kay 2011年

实际上,在这里解决了这个问题:superuser.com/questions/232949
Naftuli Kay 2011年

3

名字无所谓。Unix文件和组所有权存储在文件系统中并以数字方式存储,而不是按名称存储。从您的原始机器打开一个终端作为您的普通用户,并说:

id -u

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

在您的新机器上执行与上面相同的步骤。ID不同吗?如果它不同,则新计算机上的“您”不是文件的所有者。如果你说,在两台机器上,同样如此

id -G

您将获得用户所属的组ID列表。每个文件的组必须与其中一个ID匹配,或者您不是由组拥有的。您可以使用ls -nd file或获取文件的实际数字用户和组stat file

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

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


1

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.