gzip 更改文件所有权

all*_*len 2 unix permissions 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
Run Code Online (Sandbox Code Playgroud)

登录为foo

$ whoami
foo
$ touch test.txt.gz 
touch: cannot touch `test.txt.gz': Permission denied
Run Code Online (Sandbox Code Playgroud)

bot*_*403 8

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

关于安全性的完整过程如下所示:

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