能够使用非sudo用户覆盖只读文件的root权限

时间:2018-01-21 11:37:52

标签: linux bash docker vim

我在Docker进行了一些实验,发现了一种奇怪的行为。

我能够覆盖使用root创建的文件的所有权 Docker中的用户与另一个没有root权限的用户。

以下是重现它的步骤:

$> docker run -dit ubuntu:16.04 bash
$> docker exec -it cont_id bash
$> apt update && apt install -y vim
$> useradd cp -m
$> vim /home/cp/hello.txt
  #  Write some text and save it

$> su cp 
$> cd ~/ && ls -latr;
  #  Will list hello.txt with user and group as root

$> vim hello.txt
  #  Write some text and try saving it normally which will fail.
  #  Try saving it with `:wq!`

Voila,它已保存,文件所属的用户和组也会更改为新用户。

我为此做了一个终端录音,并发布here

2 个答案:

答案 0 :(得分:2)

这与docker无关,只与vim中的正常行为有关。由于该文件位于用户目录/home/cp下,因此cp用户将拥有所有权限。 wq!命令的作用是删除旧内容并将新内容放入/home/cp/hello.txt

您可以通过在cp没有完全权限的文件夹中再创建一个文件来快速测试它。

答案 1 :(得分:0)

之所以能够做到这一点,是因为您拥有/ cp目录的所有权限。 为此,只有两种选择:

  1. 如果您是文件的所有者。然后vim更改写(w)的权限并重写文件。保存后,恢复文件的旧权限。
  2. 如果您不是文件的所有者,但是如果您在当前目录中具有写许可权,则Vim将删除原始文件并将文档写入具有相同名称的新文件中。然后,将为新文件分配与原始文件相同的权限,但该文件归您所有。

只有两种情况可以覆盖只读文件。