使文件夹不可被非 root 删除,但应可写

使文件夹不可被非 root 删除,但应可写

我的 Ubuntu 机器上的 ext4 文件系统上有一些文件夹,我不想在作为非 root 用户的正常操作过程中意外删除这些文件夹。我应该能够移动、创建或删除文件夹内的文件夹/文件

(root当然应该能够做他想做的任何事情,所以这仅适用于非root用户)

如果需要实现此目的,我可以以 root 身份执行操作。

答案1

您只需要确保您的常规用户对您不希望删除的目录的父目录没有写访问权限,并且您的用户对目录本身具有写访问权限。像这样:

$ tree -pu
.
└── [drwxr-xr-x root    ]  testDir
    └── [drwxrwxrwx user    ]  subDir

正如您在上面所看到的,该testDir目录属于该目录root并且仅root对其具有写访问权限。该testDir/subDir目录属于我的用户,每个人都可以完全访问它。这意味着我可以在那里自由创建和删除文件:

$ touch testDir/subDir/file
$ echo "hello World" > testDir/subDir/file2
$ ls -l testDir/subDir/
total 4
-rw-r--r-- 1 terdon terdon  0 May  1 17:56 file
-rw-r--r-- 1 terdon terdon 12 May  1 17:57 file2
$ rm testDir/subDir/file
$ ls -l testDir/subDir/
total 4
-rw-r--r-- 1 terdon terdon 12 May  1 17:57 file2

但是,我无法删除目录本身:

$ rm -r testDir/subDir
rm: cannot remove 'testDir/subDir': Permission denied

即使它是空的也不行:

$ rm testDir/subDir/*
$ rmdir testDir/subDir/
rmdir: failed to remove 'testDir/subDir/': Permission denied

答案2

您可以将目录标记为仅追加,chattr +a <dir>这意味着可以在其中创建新文件,但不能删除。

相关内容