我刚刚注意到gzip似乎可以用压缩的文件覆盖一个文件,尽管文件权限被设置为只读。我的印象是chmod 400可以防止文件被修改,但似乎不是这样。覆盖一个文件不算“写”吗?或者我误解了权限是如何工作的?
例如,如果我创建一个全为零的文件,删除写入权限,然后对其进行gzip压缩,则该文件将被一个较小的gzip压缩文件所替换。我不明白操作系统为什么允许这样做。SUSE Linux Enterprise Server 15 SP2和Linux Mint 20.2均适用:
'
ng@bonobo:~/sandbox$ dd if=/dev/zero of=zeros bs=1 count=100
100+0 records in
100+0 records out
100 bytes copied, 0.000693556 s, 144 kB/s
ng@bonobo:~/sandbox$ chmod 400 zeros
ng@bonobo:~/sandbox$ ls -l
total 4
-r-------- 1 ng ng 100 Feb 10 23:58 zeros
ng@bonobo:~/sandbox$ gzip zeros
ng@bonobo:~/sandbox$ ls -l
total 4
-r-------- 1 ng ng 30 Feb 10 23:58 zeros.gz
如果我尝试rm
该文件,我至少会得到一个警告,它是写保护的,但我可以在键入y后继续。类似地,我可以在vim
中编辑一个只读文件,并使用!保存它,以覆盖关于它是只读的警告。
这是否意味着像rm
和vim
这样的程序正在进行系统调用来更改文件权限(我的帐户有权这样做),然后更改文件,然后将权限重新设置为只读?也许gzip
也会这样做,但没有事先警告我?
这对我来说并不是一个大问题,但它让我担心我不了解权限,也许我认为对粗心操作有点安全的文件可能不那么安全。
1条答案
按热度按时间j5fpnvbx1#
您需要了解
gzip
做什么以及它是如何做的。它所做的是压缩文件 in place。它所做的是读取原始文件,然后将压缩版本写为一个后缀为“.gzip”的新文件。如果成功,它会删除原始文件。
文件系统操作包括:
好吧...为什么 *
gzip
在压缩文件之前 * 不显式地检查文件是否可写呢?我不 * 知道 *,但我可能也会像这样实现gzip
,考虑到: