我向 Linux 服务器添加了一个额外的磁盘。
我在 fstab 中添加了以下行:
UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1 ext4 defaults 0 0
然后我创建了一个挂载点 /disk1 并将其挂载
sudo mkdir /disk1
sudo mount /disk1
然后我以用户“hari”的身份创建了一个空文件touch1.txt,其权限如下
sudo touch test1.txt
-rw-rw-r-- 1 hari hari 0 Sep 12 18:23 test1.txt
现在,当我以其他用户身份登录并删除 test1.txt 文件时,它实际上会询问我,然后拒绝我,而不是说“权限被拒绝”。为什么会这样?我怎样才能让它表现得像“正常”一样
hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted
答案1
当谈到删除操作时,Unix 权限有点奇怪。
首先,删除文件实际上涉及从目录中删除指向该文件的链接。由于大多数 Unix 文件系统允许硬链接,因此该文件可能链接到多个目录,因此存在多个链接。当您删除链接时,除非不存在指向该文件的其他链接,否则不会删除该文件。
因此,用于“删除”文件的实际系统调用称为unlink
。但是,完成取消链接的 shell 命令实用程序称为rm
,这是“删除”的助记符。
由于取消链接操作会修改目录(通过删除目录条目)而不是文件,操作所需的权限是写权限在目录上。文件本身的权限无关紧要。
然而,事实证明,试图从您有写权限的目录中删除不属于您的文件是一个常见的错误。(更准确地说,这种情况并不常见,但在存在这种情况的情况下,错误地尝试删除文件是很常见的。)
为了防止系统管理员自找麻烦,该rm
实用程序首先验证调用它的人是否具有对文件,尽管取消链接文件不需要该权限。出于显而易见的原因,它会在尝试删除文件之前进行此检查。
该rm
实用程序确实不是检查是否允许使用取消链接文件,因为“操作前检查”通常被认为是不好的做法。相反,它会执行所需的操作,并在操作系统返回错误时报告失败。在这种情况下,操作系统将报告 EACCES,因为用户没有目录的写权限。
不幸的后果是,如果您尝试从您没有写权限的目录中删除您没有写权限的文件,它rm
会徒劳地询问您是否继续,然后报告失败。