背景:
我正在尝试在同一台计算机上的两个用户之间共享文件夹。正常的方法是让同一组中的两个用户将父文件夹设置为该组,并设置 rw 和 s 位。
效果很好。 除了....我尝试共享的文件夹是 Chromium 使用的文件夹。 当 Chromium 启动时,它会写入一些仅具有所有者 rw(即 600)权限的会话文件,而忽略 s 位。我想一些行为不当的程序可以做到这一点。 这意味着当其他用户稍后尝试打开相同的 chromimum 配置文件时,他们无法设置这些会话文件,因为它们已经存在,且所有者仅是其他用户的 rw。 :(
我尝试了bindfs,但需要在登录时使用sudo,因此如果我想在登录时设置非交互式,我必须使用sudoers.d 文件。
不管怎样,我尝试了 ACL,但没有摸索某些方面,因为它没有像我想象的那样工作。
# user1: syadmin
# user2: david
# directory: /opt/stest
# user1 sysadmin is logged in.
# sysadmin owns /opt/stest
$ llag stest
drwxrwsr-x+ 2 sysadmin users 4096 Feb 3 13:45 stest/
$getfacl stest
# file: stest
# owner: sysadmin
# group: sysadmin
user::rwx
group::rwx
other::r-x
# now run
setfacl -R -m u:david:rwX /opt/stest
setfacl -dR -m u:david:rwX /opt/stest
# gives
user:david:rwx
default:user:david:rwx
#now create a file as other user
$ su david -c "touch /opt/stest/test"
-rw-rw-r--+ 1 david users 0 Feb 3 13:51 test
#set with owner only rw like how chromium does
-rw-------+ 1 david users 0 Feb 3 13:51 test
$ getfacl test
# file: test
# owner: david
# group: users
user::rw-
user:david:rwx #effective:---
group::rwx #effective:---
mask::---
other::---
所以这是我没有得到的部分。为什么文件的“非 acl”所有者是test
david
# file: test
# owner: david
而不是sysadmin
给定sysadmin
拥有该目录。基本上我认为 setfacl 总是会授予目录所有者访问权限。似乎即使 acl 条目是sysadmin
sysdamin
由其他允许的用户创建的,也必须手动添加到任何文件中,否则它可能会被锁定在自己的文件之外。这对我来说并不直观。
这是我需要做的吗?如果另一个用户创建文件,我是否需要在目录上运行 inotify wait ,然后将 sysamdin 添加到 acl 列表中。针对我的情况 ACL 或其他情况的最佳解决方案是什么?
我正在运行 ubuntu 20.04,内核为 5.4.0-65-
- 两天后
我尝试了另一种方法。我使用 sudo 将两个用户添加到文件和默认 acl 列表中。然后我注销并进入另一个用户。然后对其中一个有问题的文件执行 getfacl。您会看到列出了两个用户,但在 effective 下除了 rw 之外什么也没有。啊啊。当前用户仍然sysadmin
无法访问 . 创建的文件david
。 为什么有效不显示rw???
-rw--------+ 1 大卫 大卫 125146 二月 6 09:12 首选项
getfacl Preferences
# file: Preferences
# owner: david
# group: david
user::rw-
user:sysadmin:rwx #effective:---
user:david:rwx #effective:---
group::rwx #effective:---
group:users:rwx #effective:---
mask::---
other::---
答案1
好吧,看来我解决了这个问题。我可以使用完全相同的用户目录/配置文件从任一用户打开 chromium。
技巧是将所有用户添加到现有文件和默认的 acl 所有者列表中。然后,要获取掩码集,请运行一些 chmod 命令并递归执行所有操作。
为了方便起见,我编写了脚本,它就在这里。
https://gist.github.com/dkebler/23c8651bd06769770773f07854e161fc
我会不断更新并修复错误,但到目前为止它对我有用。如果你想尝试一下,我强烈建议你在测试目录上进行实验,因为你很容易把事情搞砸。 我确实写了一堆确认信息来避免这种情况,但仍然阅读脚本并使用,风险自负。
这就是脚本的输出,显示了所执行的命令。
david@giskard:[common/applications] $ share_dir -o root . sysadmin david
share directory /mnt/AllData/users/common/applications/ with users: sysadmin david ? confirm y
adding acl user sysadmin
these are the acl commands that you will run
******************
sudo setfacl -R -m u:sysadmin:rwX /mnt/AllData/users/common/applications/
sudo setfacl -dR -m u:sysadmin:rwX /mnt/AllData/users/common/applications/
******************
Double Check. Do you want to continue? y
*** new acl entries ***
user:sysadmin:rwx
default:user:sysadmin:rwx
adding acl user david
these are the acl commands that you will run
******************
sudo setfacl -R -m u:david:rwX /mnt/AllData/users/common/applications/
sudo setfacl -dR -m u:david:rwX /mnt/AllData/users/common/applications/
******************
Double Check. Do you want to continue? y
*** new acl entries ***
user:david:rwx
default:user:david:rwx
done adding acl users sysadmin david
these are the chown/chmod commands that you will run
******************
sudo chown -R root:users /mnt/AllData/users/common/applications/
sudo chmod -R u+rwX /mnt/AllData/users/common/applications/
sudo chmod -R g+rwX /mnt/AllData/users/common/applications/
sudo find /mnt/AllData/users/common/applications/ -type d -exec chmod g+s {} +
******************
Double Check. Do you want to continue? y
all done!
total 24
drwxrwsr-x+ 2 root users 4096 Feb 6 13:05 ./
drwxrwsr-x+ 5 root users 4096 Feb 6 11:39 ../
-rwxrwxr-x+ 1 root users 169 Jan 30 11:01 'Hacking Chromium.desktop'*
-rwxrwxr-x+ 1 root users 161 Jan 30 16:03 'Incognito Chromium.desktop'*
# file: /mnt/AllData/users/common/applications/
# owner: root
# group: users
# flags: -s-
user::rwx
user:sysadmin:rwx
user:david:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:sysadmin:rwx
default:user:david:rwx
default:group::rwx
default:mask::rwx
default:other::r-x