![如何在不可变目录中创建新文件](https://linux22.com/image/134608/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%8F%AF%E5%8F%98%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%88%9B%E5%BB%BA%E6%96%B0%E6%96%87%E4%BB%B6.png)
chattr +i /testdir
我已经通过;更改了目录属性不可变但我需要在该目录中创建文件。
或者有什么方法可以让任何人都无法删除该目录,但所有者仍然可以在该目录中写入内容?
答案1
获得你需要的东西的方法是:
chattr +a /testdir
设置目录本身的权限,以便只有所有者具有写入权限。
该a
开关使得文件可以在内部创建和修改,但不能删除。
该man
页面chattr
仅说明了a
对文件的作用,但当在目录上使用时,它确实执行了上述操作,正如我在寻找执行相同操作的方法时发现的那样。
答案2
命令
chattr -i /testdir
将删除该标志。然后你创建新文件并再次
chattr +i /testdir
您应该只为组和其他设置父目录的r
和x
,以防止删除目录
答案3
目录上设置的不可变属性仅影响该目录及其直接(例如,第一级)内容。不是子目录的内容。
因此,如果您只需要向此目录添加文件,而无需修改或删除其中的文件;那么使用a
纳西尔·莱利(Nasir Riley)展示的属性就是正确的方法。
另一方面,如果您希望能够完全控制目录,同时防止目录被重命名/删除,那么您可以使用子文件夹,并仅使上层文件夹不可变,例如:
$ mkdir d1
$ mkdir d1/d2
$ sudo chattr +i d1
然后您可以验证您是否具有完全控制权d1/d2
:
$ touch d1/d2/f1
$ mv d1/d2/f1 d1/d2/f2
$ rm d1/d2/f2
同时该d1
文件夹是不可变的:
$ sudo rm -rf d1/
rm: cannot remove 'd1/d2': Operation not permitted
$ sudo mv d1 d3
mv: cannot move 'd1' to 'd3': Operation not permitted