锁定目录的 C++ 解决方案 - Linux

c++ solution to locking a directory - linux

本文关键字:解决方案 Linux C++ 锁定      更新时间:2023-10-16

一个简单的问题。是否可以在 linux 下锁定目录?实际上,我需要的是只有一个应用程序(我编写的(可以访问该应用程序创建的指定目录。所以基本上它是该应用程序的缓存目录,到目前为止,用户一直在搞砸它。因此,我希望将来防止这种情况发生。

有没有可能做到这一点??以及如何(语言:c ++(?

在标准C++中根本不可能。

在 linux 下,对可执行文件使用 setuid 权限,使其在其所有者的上下文中运行。 然后,您可以锁定目录的访问权限,以便只有可执行文件的所有者才能访问它。

当然,这并不能阻止使用您的程序的用户弄乱您的缓存。 您需要设计程序,以防止用户进行不当操作。 并确保所有者帐户(可以专门为您的应用程序设置(没有超出其需要的权限。

如果您信任对安装此文件的系统具有"root"权限的人,则可以依靠拥有特殊用户或组,并使用setuid和/或setgid来防止其他人篡改文件。但是,这确实意味着软件的安装程序需要具有root权限,因此"任何"用户都无法安装该软件,这在某些情况下可能不是一个好的解决方案。

更好的解决方案实际上是将文件的哈希存储在文件中[加上一些常量数据或类似的东西,这样用户就不能只是运行sha1 modified-file并获得"正确的哈希"],或者加密整个文件。

这两种方法的问题在于,您仍然不能 100% 依赖它 - 具有足够动力和资源的人会弄清楚常量数据是什么,并在修改文件中的数据后将其计算为新哈希。同样,假设您的应用程序知道如何解密文件,则可以对应用程序进行逆向工程以查找加密密钥和加密方法。

所以你正在与你的"用户"进行一场"代码战"(冷战双关语(。

有可用于许可证管理的商业解决方案(我一直是FlexLM的用户,但还有其他几个(。这是更多的工作,并且可能会花费一点许可费,但是如果您使用商业产品,您将为自己节省一大堆潜在的麻烦。