该怎么办

该怎么办

我创建了 user small,将他添加到组中kek,并允许该组仅读取用户主目录中的文件。然后我将所有文件更改为root:kek.不过,small仍然可以删除其主目录中的文件。

我运行的命令:

useradd -ms /bin/bash small
groupadd kek
usermod -a -G kek small
chown -R root:kek /home/small/*
chmod -R g=r  /home/small/*

然后当我尝试删除文件时:

$ ls -l
total 16
-rw-r--r-- 1 root kek  240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek   39 Jun 21 09:17 flag.txt
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek   24 Jun 22 08:16 small.py

$ rm flag.txt

$ ls -l
total 12
-rw-r--r-- 1 root kek  240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek   24 Jun 22 08:16 small.py

$ whoami
small

为什么会出现这种情况?

答案1

文件是否可以删除不是文件的属性,而是文件所在目录的属性。用户不能删除位于他们无法写入的目录中的文件。

文件(和子目录)是目录节点中的条目。要删除文件,需要取消该文件与目录节点的链接,因此必须对该目录具有写权限才能删除其中的文件。

  • 文件的写权限决定了是否允许更改文件的内容。
  • 目录的写权限决定了是否允许更改目录的内容。

有关的:

答案2

在 Unix 上,您不会删除文件,而是将其从目录列表中删除。当一个文件不再有任何目录列表(可以有很多),并且不再由进程打开时,它将被删除。

如果您对目录具有写权限,则可以删除文件目录列表。

该怎么办

  • 选项 1 删除目录的写权限。
  • 选项 2 将粘滞位添加到目录 ( chmod +t «directory-name»)。使其只有所有者和根用户(实际上具有 CAP_FOWNER 能力)才能删除文件。当您需要写入权限时使用此选项,以便用户可以添加文件。

相关内容