我是 Linux 的新手,但想知道如何启用以下功能:
- 有三个用户A,乙和C
- 我想要 用户 用户A和乙拥有对主目录的读写删除权限C?
- 文件创建者C将继承权限
这将在 Ubuntu 服务器上运行。
任何有关 Linux 权限的教程都很棒!
答案1
ACL 是一种新颖而酷的方式:
编辑以添加基于组的 ACL。我不敢相信我居然忘记了这一点。
为文件系统启用 ACL。
mount -o remount,acl
挂载点在哪里挂载点可能是
/
或/home
取决于主目录是否位于单独的分区上。将
acl
选项添加到/etc/fstab
创建一个组
superusers
并填充用户。(当然,选择一个更合适的名称。)groupadd superusers gpasswd -M userA,userB superusers
或者,只需使用 的
userC
用户组。(在大多数 Linux 发行版中,用户userC
会自动处于其自己的组中,也称为userC
。)更新文件的 ACL:
setfacl -R -m group:superusers:rwX,default:group:superusers:rwX ~userC
其中
superusers
是之前创建的组,并且~userC
是用户 C 的主目录。user:*
和权限group:*
将应用于现有对象以及新创建的default:*
对象。-R
递归。
POSIX ACL 的缺点是每个文件都有一个复制其中 - 没有像 Windows 上的继承,因此,当您想要允许或禁止某人访问时,您必须编辑每一个受影响的文件,而 cmbrnt 的方法允许您简单地执行编辑:将组添加到 ACL 可以解决这个问题。groupmod
。
答案2
由于您说它是在 Ubuntu 服务器上,我假设您使用的是命令行界面(而不是图形桌面)。要更改单个目录的权限(但仅限于有限数量的用户),您需要更改该目录所属的组。每个文件(和目录)都属于一个用户和一个组。假设组名是“超级用户”(可以是任何名称)。
- 首先,使用命令创建一个新组
addgroup superusers
。您需要以 root 身份执行此操作,或者使用 sudo 命令运行。 - 然后,您将更改用户 C 的主目录 (/home/c) 所属的组。这可以通过命令完成
chown -R :superusers
。-R 标志确保目录中的每个文件都归超级用户组所有。 - 现在您需要将用户 A 和用户 B 添加为该组的成员。这可以通过为每个用户运行一个命令来完成。运行
sudo usermod -G superusers -a B
。自然,B 是您要添加到组中的用户的名称。-a 标志将组超级用户附加到用户 B 所属的组列表中。这是为了确保我们不会搞砸任何事情。对用户 A 再执行一次此操作。
如果您正确遵循了这些步骤,并且始终拥有 root 权限,那么您现在应该会获得想要的效果。用户 A 和 B 应该能够写入和读取用户 C 的主目录。
chmod
在某些情况下,文件可能只有所有者才能读取或写入。这里无法解释太多,但如果您想进一步研究,可以阅读“文件权限”和 -command 。有一个很好的指南这里。这意味着某些单个文件不能由组读取或写入 - 只有所有者可以。要更改此设置,您可以使用命令chmod g+rw <file>
,或chmod g+rw -R /home/C
更改用户 C 主目录中每个文件的权限。这会将读写权限添加到文件所属的组,在本例中为组“超级用户”,如指南中的第 2 步所述。
另外,我要说的是,这不是推荐的做法。通常,你会创建第三个目录,并授予所有三个用户对该目录的读写权限。
我不知道如何确保在该目录中创建的每个文件都具有相同的用户和组所有权。您可以使用 -command 添加默认权限umask
,但这不会更改默认所有权。我实际上怀疑这是否可行,并且实际上违反了 *nix 标准,但如果有人可以纠正我,那就太好了。