这是一个我不明白的案例。
我有一个组bar
,这个组有两个用户;foo
和bar
。
我有一个test.txt
文件,foo
只有所有者和bar
用户可以读取它。
但是,如果bar
用户gzip
对此文件运行命令,所有权将从 更改foo
为bar
。
因此,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 的保护。
与安全性相关的完整流程如下:
- Gzip 使用原始文件的读权限来获取原始文件的只读文件句柄。
- 使用目录的写权限来创建新的空文件。
- 从原始文件读取数据并将压缩数据写入新文件
- 使用目录的写权限删除旧文件。
答案2
gzip
不会改变文件的所有权。它会创建一个新的文件(根据类 Unix 系统的工作方式,该文件由运行该gzip
命令的用户拥有)并删除原始文件。
如果您希望新创建的test.txt.gz
文件具有与test.txt
文件相同的用户和组所有权,则需要使用chown
- 在大多数系统上,这意味着您需要 root 访问权限。用户bar
通常不能创建一个由“foo”拥有的文件。
(gzip
可以并且确实将新创建文件的权限位设置.gz
为与输入文件上的权限位相同,并且如果您运行它,root
它也将用于chown
设置所有者。来源:我刚刚尝试过。)
答案3
这意味着您是其他组的成员。gzip
使用您的默认组创建一个新文件。原始文件将被删除。
高血压