Linux 权限:粘性位行为

问题描述 投票:0回答:1

我正在做一个练习任务,我需要在Linux(Ubuntu)中设置适当的文件(和目录)权限,但我遇到了一些我不理解的奇怪行为。


我已经以 root 用户身份完成了这些操作:

对于/shared我已将目录权限设置为1755,

ls -l
显示drwxr-sr-t。该目录位于 root:root 下。

添加了一个文件:/shared/rnd/rnd-test

对于/shared/rnd及其内容,我已将目录权限设置为3770(使用

chmod -r
),并且
ls -l
显示了drwxrws--T。该目录以及 rnd-test 都位于 root:rnd。

trentrnd 组的用户(通过

id trent
确认)。
walterrnd 组的用户(通过
id walter
确认)。

作为 trent,创建了一个名为 trent-test 的文件。
作为 walter,创建了一个名为 walter-test 的文件。


现在

ls -l /shared/rnd
看起来像这样:
共12个
-rwxrwx--T 1 root rnd 60 Jan 29 20:17 rnd-test
-rw-rw-r-- 1 trent rnd 1月29日12日19:19 trent测试
-rw-rw-r-- 1 walter rnd 1月29日7日20:18 walter测试


trent一样,

cat rnd-test
没有错误。
由于 walter
cat rnd-test
没有错误。


问题

trent一样,

echo 'trent' >> rnd-test
没有错误。
由于 trent
echo 'trent' >> walter-test
的许可被拒绝。

walter一样,

echo 'walter' >> rnd-test
没有错误。
由于 walter
echo 'walter' >> trent-test
的许可被拒绝。

作为root

echo 'root' >> rnd-test
没有错误。
作为 root
echo 'root' >> trent-test
的权限被拒绝。
作为 root
echo 'root' >> walter-test
的权限被拒绝。


意图

  1. 任务要求一个用户创建的文件只能由该用户删除。 (粘位)
  2. 任务要求组文件应自动归该组所有。 (SGID)
  3. 组外的任何人都不应访问组文件。 (其他用户为 0)
  4. 群组成员应该能够访问他们的群组文件。 (7人为一组)

根据这些要求,我为

/shared
设置 0755,为
/shared/
* 设置 3770

事实上,要求并没有指定组成员是否应该能够修改组文件,但我不清楚为什么trent可以修改rnd-test(由root:rnd拥有)但不能修改walter-测试(由 walter:rnd 所有)。

粘性位行为

如果我将 /shared/rnd 权限设置为 1770 或 3770(带有粘性位),他们将无法修改(追加)。

如果我将 /shared/rnd 权限设置为 0770 或 2770(没有粘性位),trentwalter 能够分别修改(追加)walter-testtrent-test .

我知道某些工具(例如

vim
)在尝试“修改”时会首先删除文件,但是
echo >>
也这样做吗?

linux ubuntu permissions chmod
1个回答
0
投票

我做了更多研究,发现了这个回复。感谢@grifferz

@grifferz提到Linux最近的变化进一步阻止了用户写入其他用户的文件,即使他们位于同一组中。

此保护类似于 protected_fifos,但它 避免写入攻击者控制的常规文件,其中程序 预计会创建一个。

根据

fs.protected_regular
文档,当
protected_regular
设置为
2
(我的系统有)时,它也适用于组可写粘性目录。

我将其更改为

0
,粘性位的行为就像它“应该”那样。

至于“可写”/shared/rnd/rnd-test(由root拥有),那是因为/shared目录设置了

1755
权限。我不知道为什么,但它神奇地让我能够编写rnd-test。当我将其权限更改为 protected_regular 时,它就变得不可写(
0755
更改之前)。

© www.soinside.com 2019 - 2024. All rights reserved.