gzip 更改文件所有权

gzip 更改文件所有权

这是一个我不明白的案例。

我有一个组bar,这个组有两个用户;foobar

我有一个test.txt文件,foo只有所有者和bar用户可以读取它。

但是,如果bar用户gzip对此文件运行命令,所有权将从 更改foobar

因此,foo不能再触碰此文件。

这是一个安全漏洞吗?

登录为bar

$ whoami
bar
$ cd /home/foo/test
$ ls -al
total 8
drwxrwxr-x 2 foo bar  4096 Jan  6 15:48 . 
drwxrwxr-- 5 foo bar  4096 Jan  6 15:48 ..
-rwxr-xr-x 1 foo foo    0 Jan  6 15:48 test.txt
$ gzip test.txt    
$ ls -al
total 12
drwxrwxr-x 2 foo bar 4096 Jan  6 15:50 . 
drwxrwxr-- 5 foo bar 4096 Jan  6 15:48 ..
-rwxr-xr-x 1 bar  bar   29 Jan  6 15:48 test.txt.gz
$ uname -a
Linux 2.6.18-xenU-ec2-v1.2 #2 SMP x86_64 x86_64 x86_64 GNU/Linux

以 身份登录foo

$ whoami
foo
$ touch test.txt.gz 
touch: cannot touch `test.txt.gz': Permission denied

答案1

这不是安全漏洞。Gzip 会创建一个新文件并删除旧文件。这由目录权限而不是文件权限控制。如果您从目录中删除写入权限,您的 test.txt 将不会受到用户 bar 的保护。

与安全性相关的完整流程如下:

  1. Gzip 使用原始文件的读权限来获取原始文件的只读文件句柄。
  2. 使用目录的写权限来创建新的空文件。
  3. 从原始文件读取数据并将压缩数据写入新文件
  4. 使用目录的写权限删除旧文件。

答案2

gzip不会改变文件的所有权。它会创建一个新的文件(根据类 Unix 系统的工作方式,该文件由运行该gzip命令的用户拥有)并删除原始文件。

如果您希望新创建的test.txt.gz文件具有与test.txt文件相同的用户和组所有权,则需要使用chown- 在大多数系统上,这意味着您需要 root 访问权限。用户bar通常不能创建一个由“foo”拥有的文件。

gzip可以并且确实将新创建文件的权限位设置.gz为与输入文件上的权限位相同,并且如果您运行它,root它也将用于chown设置所有者。来源:我刚刚尝试过。)

答案3

这意味着您是其他组的成员。gzip使用您的默认组创建一个新文件。原始文件将被删除。

高血压

相关内容