我有一个文件夹/mnt/disk/folder
。
我希望
user1
并且user2
都拥有对任何当前和未来的目录和文件的完全递归读+写访问权限。我想将该文件夹符号链接到
/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 解决此类问题的基本方法是让两个用户(user1
和user2
)属于同一组(例如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 浮现在脑海中,但强烈建议使用之前概述的更清洁的解决方案!