使用 Rocky Linux 服务器,我使用以下命令创建了一个用户,
sudo adduser foobar
并且用户foobar
现在是组的成员foobar
。我们可以通过以下内容进行确认。
foobar$ id
uid=1111(foobar) gid=1111(foobar) groups=1111(foobar)
请注意,theuid
和 thegid
是相同的。
现在,对于 拥有的文件和目录foobar
,所有者权限与组权限相同吗?
例子
对于以下目录,
drwxrwx--- 1 foobar foobar my_dir
奇怪的是,baz
不属于组的用户foobar
在my_dir
.
baz$ id
uid=2222(baz) gid=10000(group1),10001(group2)
baz$ touch my_dir/test # (?)
baz$ ls my_dir
test
上面的(?)行:当“其他”位关闭时如何baz
能够写入?my_dir
答案1
Linux 支持基本文件模式 (rwxrwxrwx),但也支持 ACL 列表。我怀疑您已经设置了一些允许 baz 写入的 ACL 列表。
getfacl my_dir
可以显示情况。
答案2
unix 中的用户和组权限是分开的,即使巧合地命名为相同和/或具有相同的数字 ID。
adduser 命令不是 100% 标准化的,有些版本会与用户创建一个组,有些则不会,甚至可以告诉那些不这样做的版本,而通常不创建的版本可以指定一个组名来创建与用户。某些版本的 adduser 如果未指定组名,则会将用户分配到“users”组或某些类似的默认组。
此外,groupid 和 userid 只是巧合相同(可能分配给下一个可用的连续 ID),并且这些很容易变得不同步。 (我觉得这很烦人,有时会费心去修复它。)
另一个答案给出了触摸为何有效的合理解释。另一种可能性是“测试”文件在触摸之前已经存在,并且 baz 可能具有对该文件的写访问权限,但没有对该目录的写访问权限,或者由于某种原因,由于该文件已经存在,因此在更新时间时没有打印错误。