第二部分:符号链接

第二部分:符号链接

我有一个文件夹/mnt/disk/folder

  1. 我希望user1并且user2都拥有对任何当前和未来的目录和文件的完全递归读+写访问权限。

  2. 我想将该文件夹符号链接到/home/user1/data//home/user2/data/保留访问权限。

这是我所做的:

创建目录

mkdir /mnt/disk/folder

符号链接到目录

ln -s /mnt/disk/folder /home/user1/data
ln -s /mnt/disk/folder /home/user2/data

建立群组以进行分享

sudo groupadd sharing

将用户添加到该组

sudo usermod -a -G sharing user1
sudo usermod -a -G sharing user2

将所有现有文件(在本例中不是任何文件)更改为属于该组

sudo chgrp -R sharing /mnt/disk/folder

使所有现有文件(在本例中不是任何文件)均成为组读写文件

sudo chmod g+rw -R /mnt/disk/folder

确保所有新创建的文件和目录都属于该组

chgrp sharing /mnt/disk/folder
chmod g+s /mnt/disk/folder

如果以 身份登录,则可user1正常运行。和 也mkdir /home/user1/data/folder/123一样。cd 123>test.txt

如果以 身份登录user2并导航到/home/user1/data/folder/,则由 创建的内容user1就在那里,并且两个用户都可以创建、编辑和删除目录和文件。

但是,我运行的是 JupyterHub 服务器,其中用户 1 和用户 2 通过 jupyter 的浏览器界面访问其目录。在此处创建和编辑时,权限不起作用。

答案1

第二部分:符号链接

第二部分很简单:符号链接始终保持您所期望的权限。因此,只需通过以下方式创建它们ln -s

ln -s /mnt/disk/folder /home/user1/data
ln -s /mnt/disk/folder /home/user2/data

(如果您使用的应用程序无法正确使用符号链接,请考虑使用绑定挂载)。

第 1 部分:正确的访问权限

这是“更棘手”的部分,因为它至少部分取决于用户的合作。UNIX 解决此类问题的基本方法是让两个用户(user1user2)属于同一组(例如dataaccess)。然后,需要将所有现有数据更改为属于该组,例如通过以下命令:

chgrp -R dataaccess /mnt/disk/folder

最后,目录中的所有文件都需要进行组读写,例如可以通过chmod g+rw -R /mnt/disk/folder对现有文件进行组读写来实现。

建立对现有文件的访问权限后,用户合作就开始发挥作用:所有新创建的文件和目录都需要属于该组,并且需要设置位。可以通过为两个用户g+rw配置合适的权限来实现正确的权限设置。umask

最后一步是确保新创建的文件和目录属于正确的组。用户可以chgrp在创建文件后通过调用适当的命令手动完成此操作,也可以通过 setgid 位自动完成此操作,请参阅此问题:https://askubuntu.com/questions/51951/set-default-group-for-user-when-they-create-new-files

如果您不能依赖用户创建只有他们才有权访问的文件,则可以通过 cronjob 或 inotify 建立自动权限扩展机制。

另一种“强力方法”会带来很多麻烦的副作用,即使用不支持权限的文件系统,因此始终具有(安装时可配置的)访问权限。FAT32 浮现在脑海中,但强烈建议使用之前概述的更清洁的解决方案!

相关内容