当仅使用所有者 rw (600) 权限创建某些文件时,在用户之间共享目录(使用 ACL)

当仅使用所有者 rw (600) 权限创建某些文件时,在用户之间共享目录(使用 ACL)

背景:

我正在尝试在同一台计算机上的两个用户之间共享文件夹。正常的方法是让同一组中的两个用户将父文件夹设置为该组,并设置 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”所有者是testdavid

# 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

相关内容