是否可以在不将目录设为只读的情况下保护目录不被删除?

是否可以在不将目录设为只读的情况下保护目录不被删除?

我希望对某些目录具有编辑权限,但我不想意外获得rm它。我rm -rf *之前不小心跑到了错误的目录中,并且想安全地证明这一点。

我知道我可以将其设置为只读,但我仍然需要能够编辑它,只是不能轻易删除整个目录。

答案1

最好的解决方案可能是设置粘滞位并确保该文件夹由其他用户拥有(root 可能是一个不错的选择),但可由您的用户编辑。

https://www.cbtnuggets.com/blog/technology/system-admin/linux-file-permissions-understanding-setuid-setgid-and-the-sticky-bit

答案2

您可以更改文件属性您想要防止rm(删除)的文件的 s(标志)。取一个名为testfile;的文件也许您想复制一个实际文件来创建testfile并进行试验;例如

$ cp realfile testfile 
$ ls -l testfile
-rw-r--r-- 1 pi pi 14 Oct 17 07:10 testfile
$

设置附加属性testfile。此模式允许您添加(附加)数据testfile(但不能删除(rm),并且不更改文件中的任何现有数据):

$ sudo chattr =a testfile 
$ ls -l testfile
-rw-r--r-- 1 pi pi 14 Oct 17 07:10 testfile 

#   note testfile permissions unchanged
#   try to delete (rm)...

$ rm testfile
rm: cannot remove 'testfile': Operation not permitted 
$ sudo rm testfile 
rm: cannot remove 'testfile': Operation not permitted 

如果你testfile在编辑器中打开,你会发现可以对其进行更改(添加、删除),但无法保存在testfile文件名下。但是,我们可以将编辑器放入附加模式,进行我们想要的任何添加,然后将其保存在该testfile名称下。

nano编辑器为例,打开testfile并添加几行文本:

  • 使用ctrl-X启动退出,然后使用“Y”确认应保存文件。

  • 当出现提示时,从键盘File Name to Write: testfile输入选项(可能是、 或,具体取决于您的键盘,但请参阅 man nano 以获得明确的指导)。M_actrl-aesc-a

  • 输入正确的键盘序列后,提示符将更改为 FROM: File Name to Write: testfileTO: File Name to Append to: testfile。按该enter键应该成功完成追加操作。

  • 确认成功附加 w/ cat testfile- 或其他

  • 删除追加属性

$ sudo chattr -a testfile 
$ rm testfile
$
# testfile is deleted as its immunity is gone :) 
#
# of course the file can also be "fully edited" upon removal of the append attribute;
# just make your edits & then restore the append attribute, or use the -i attribute

请参阅man chattr参考资料 选项和详细信息。

相关内容