我想为内存映射文件io写一个包装器,该包装器要么无法映射文件,要么返回有效的映射,直到未映射它为止。例如,使用普通mmap时,如果基础文件在映射时被截断或删除,则会出现问题。根据mmap的linux手册页,如果在截断后访问了文件新端之后的内存,则会收到SIGBUS。捕获该信号并以这种方式处理错误是没有选择的。
我的想法是创建文件的副本并映射该副本。在具备牛功能的文件系统上,这几乎不会增加开销。
但是问题是:如何保护副本免受其他进程的操纵?临时文件不是真正的选择,因为从理论上讲,恶意进程仍可能对其进行突变。我知道Linux上有文件锁,但据我了解,它们是可选的,或者不会阻止其他人删除文件。
我正在寻求两种答案:一种以坚如磐石的方式映射文件的方法,或者是一种保护tempfile不受其他进程完全破坏的机制。但是也许我解决问题的整个方法是错误的,所以请随时提出根本性的解决方案;)
答案 0 :(得分:1)
您不能阻止熟练且有决心的用户故意用脚射击自己。请采取合理的预防措施,以免发生意外。
chmod
足够保护。有权访问同一帐户(或root)的任何人都可以通过简单的kill -BUS
,chmod / truncate或任何更高级的步枪(例如复制和修补二进制文件,克隆其FD)来干扰程序。 ,或附加调试器。如果那是他们想要的,那不是您阻止他们的地方。