考虑在一台 Linux 机器上user1
有两个用户帐户。user2
我希望user2
能够对user1
主目录中的文件夹进行读写访问。
到目前为止,为两个用户创建了一个组并添加了两个用户
groupadd twousers
usermod -a -G twousers user1
usermod -a -G twousers user2
然后更改组和路径并更改权限
chgrp twousers /home/user1/folder
chmod g+rwx /home/user1/folder
不幸的user2
是仍然无法访问该文件夹/home/user1/folder
。这似乎很简单,但不知何故我迷失了。我缺少什么?
答案1
您遇到的问题是预期的。事实上,您正在尝试共享另一个用户home
文件夹内的文件夹,出于明显的安全原因,该文件夹(并且应该)只能由所有者访问(并且root
,但这是另一个故事)。
为了解决您的问题,您应该创建另一个文件夹,其中潜在的父文件夹将对两个用户具有相同的权限,例如/data/shared_folder
.
这是一个简短的分步示例:
创建一个父文件夹(不是必需的,但这是为了示例):
# cd / # mkdir data
创建共享子文件夹:
# cd data # mkdir shared_folder
可选:在此阶段您可以将未来共享文件夹的内容复制到
shared_folder
.# cp -p /path/to/folder/* /data/shared_folder/
创建一个组
shared
和两个用户bob
并向alice
其添加:# groupadd shared # usermod -aG shared bob # usermod -aG shared alice
递归更改组文件夹所有权:
# chgrp -R shared /data
为组添加读、写和执行(仅适用于已经可执行的文件)权限
shared
:# chmod -R g+rwX /data
Bob
现在Alice
可以在文件夹内做任何他们想做的事情shared
,但也可以在data
.
根据您的使用案例,您可能只有一个级别,但此示例显示了父文件夹权限如何影响文件系统更深处的文件夹,并允许更高的可扩展性和粒度。
答案2
悖论的答案确实是最好的答案。但是我觉得它没有完全解释为什么应该创建根文件夹。
如果您有共享文件夹,/home/user1/sharedfolder
那么您还需要访问该文件夹/home/user1
(已对此进行了解释)。但您应该注意到这/home/user1
是 user1 拥有的用户/组。 user2 需要是 user1 组的一部分(或者权限/home/user1
需要为 751 或更具体地说,给予“其他用户”可执行权限,这不是一个好主意)才能访问/home/user1
./home/user1
为了访问共享文件夹,需要可执行访问权限。就像有时我忘记即使命令"cd"
也是一个程序,如果你不能以 user2 身份cd
进入/home/user1
,那么你如何访问/home/user1/sharedFolder
?
因此,除非您希望 user2 能够访问 user1 在其主文件夹中有权访问的所有内容,否则您肯定需要使用更“公共会议”的地点,而不是在家里。我的意思是,这样想一下,如果不首先授予对您家的访问权限,您就无法共享家中的某些内容。
假设您有一个辅助硬盘驱动器/已安装的文件夹。如果您希望多个用户访问它,我建议将其放入“/mnt/mountedFolder”中,然后使用上面最佳答案中的说明让一个共享组拥有该 MountedFolder。
使用容器时,可以映射/mnt/mountedFolder
到容器内的根文件夹,例如/data
或/config
,基本上容器的用户需要属于该共享组。您的容器可能会创建具有不同用户 ID 的新用户...如果容器中的该用户使用自己的权限创建文件夹/文件,则有权访问该文件夹/文件的用户/mnt/mountedFolder
将无法访问这些文件夹/文件,除非这些用户位于容器化用户组的组以及该容器化用户正在创建组权限为 的文件/文件夹g+rwx
。
希望这能为那些在最佳答案后不明白的人添加更好的解释。处理权限可能会令人沮丧,因为它看起来应该很简单,但实际上有很多需要考虑。当您对权限感到沮丧时,请尽量不要做一些愚蠢的事情,并尝试使所有内容都具有比必要的更高的权限......您可能错过了一些东西。
答案3
您必须将 user2 添加到 user1 组,然后授予该特定文件夹的组部分的读写权限