我创建了 3 个用户“u1”、“u2”、“u3”。现在我想为用户 u2、u3 提供对 u1 的 /home/u1/share 目录的访问权限。
我不想创建一个名为“shared”的新公共组并在其中添加 3 个用户。是否可以使用“u1”组本身?
到目前为止我尝试过
#add u2,u3 to group of u1
usermod -a -G u1 u2
usermod -a -G u1 u3
#ensure u1 has group read access
chmod 750 /home/u1
#create new shared dirs
umask 027 && mkdir /home/u1/share
尽管
ls -ld /home/u1/share
drwxr-x---. 2 u1 u1 4096 Apr 23 10:11 /home/u1/share
显示对组的读取访问权限 - 用户 u2 无法访问此目录。
[u2@ ~]$ ls -l /home/u1/share
ls: cannot access /home/u1/share: Permission denied
对此有什么想法吗?我哪里做错了?
答案1
您所做的应该没有问题,但是u2
自从运行 usermod 以来,用户是否已经注销并再次登录? 仅在登录时才能获得群组成员资格。
执行id -a
foru2
还可以帮助确认该特定u2
shell 是否在组中u1
。
不管怎样,虽然我不同意 Hauke 关于 ACL 的观点(在这种情况下它们肯定不是必需的,因为正如您所展示的,它可以用组来完成;我发现 ACL 几乎从来没有真正需要过,而且即使在偶尔需要它们的情况下也非常痛苦,所以我通常建议人们改变他们的要求),但我同意这是一个适合新自定义组的完美情况。
答案2
您需要 ACL 来解决权限问题。您必须授予所有相应目录组写入权限,并为它们设置默认 ACL(以防用户能够创建子目录):
setfacl -d -m g:u1:rwx "$directory"
或者
setfacl -d -m g::rwx "$directory"
如果您通过 SGID 位确保新创建的子目录属于同一组。
我认为你不创建新组的决定不是一个好主意。