我想拒绝所有应用程序对 /home/don/testdir 或其子目录中所有内容的删除权限,但不阻止创建或写入。据我所知,这在传统 ACL 中是不可能的,因为写入权限要么是全部(创建+写入+删除),要么什么都没有,我不能只拒绝删除而允许创建和写入。
我已经尝试过chattr +a
该目录,但是如果运行此命令后添加了子目录并且在该子目录中添加了文件,则它不会阻止删除该文件,例如 testdir/subdir/file.txt。
我是 AppArmor 新手。我尝试创建以下规则并将其保存为,/etc/apparmor.d/home.don.testdir
但没有成功
# Profile to prevent any process from deleting files in /home/don/testdir
profile prevent-delete {
# Allow read, write, and execute within the directory
/home/don/testdir/ rix,
/home/don/testdir/** rwlix,
# Explicitly deny delete operations
deny /home/don/testdir/** D,
}
我在配置文件 /etc/apparmor.d/home.don.testdir 的第 9 行收到 /etc/apparmor.d/home.don.testdir 的 AppArmor 解析器错误:语法错误,意外的 TOK_ID,预期的 TOK_MODE。
D
不是已知的访问模式,因此无效。这就是您的规则无法正确解析的原因。此外,从我阅读其策略系统手册来看,AppArmor 没有“拒绝删除”的概念。
您可能需要参考 AppArmor 中有关策略结构的手册页(请参阅https://manpages.ubuntu.com/manpages/noble/man5/apparmor.d.5.html,这是关于如何设置 AppArmor 配置文件的 24.04 手册页)以了解 AppArmor 策略中的工作原理。
这些是 AppArmor 所知的访问模式(我已经删除了与您的问题无关的大部分数据),以及
deny
可以接受的访问模式:最接近“不删除”模式的方法是允许附加模式并不允许写入模式,因为写入模式包括删除功能。
但是,这可能会破坏使用这些文件的应用程序,
open
因为并非所有应用程序都会在启用了 APPEND 选项的情况下调用或类似的系统调用。