Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
锁定目录的C++解决方案_C++_Linux - Fatal编程技术网

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

锁定目录的C++解决方案,c++,linux,C++,Linux,一个简单的问题。可以在linux下锁定目录吗?实际上,我需要的是,我编写的只有一个应用程序可以访问该应用程序创建的指定目录。因此,基本上它是该应用程序的缓存目录,到目前为止,用户一直在搞乱它。因此,我希望今后能防止这种情况发生 有可能做到这一点吗??语言如何:C++ + 完全不可能在标准C++中。 在linux下,对可执行文件使用setuid权限,使其在其所有者的上下文中运行。然后您可以锁定目录的访问权限,因此只有可执行文件的所有者才能访问该目录 当然,这并不能阻止使用你的程序的用户扰乱你的缓存

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


有可能做到这一点吗??语言如何:C++ +

完全不可能在标准C++中。

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


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

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

更好的解决方案是将文件的散列存储在文件中[加上一些常量数据或类似数据,这样用户就不能运行sha1修改后的文件并获得正确的散列],或者加密整个文件

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

所以,你是在和你的用户打冷战的代码战双关语


有一些商业解决方案可用于许可证管理,我一直使用的是FlexLM,但也有一些其他解决方案。这需要更多的工作,可能会花费一点许可费,但是如果你使用商业产品,你会为自己省下一大堆潜在的麻烦。

你是说缓存,对吗?简单的回答是不,你不能阻止一个目录被一个普通的应用程序使用,而不让用户看到/知道它在那里。根据您想要阻止用户做什么,可能会有一些不同的解决方案对内容进行哈希,以特权运行[注意,不会阻止具有root访问权限的人干扰缓存],等等。他们可以看到,没问题,但只要他们不干扰它:编辑文件,写入和锁定文件,更改它们的名称和目录名称您能描述一下用户为什么以及如何处理应用程序文件吗?这听起来很不寻常,因为在某种程度上,几乎每个程序都使用用户不希望弄乱的文件。使目录仅可由应用程序的所有者/组写入。然后,应用程序在需要修改缓存文件时使用set-uid或set-gid切换到该所有者或组。如果你不能信任系统上的特权用户,你可能也不能信任非特权用户,而且你也不希望任何用户安装该软件。许可证管理只是这个问题的一种形式——强制用户遵守许可证限制。另一个方面与许可几乎没有关系,那就是减少用户意外或故意弄乱数据并影响程序运行的机会。后者不是一场代码战——它只是限制程序的使用,以实现服务质量。我只是指出,系统允许root用户通过sudo访问本地机器并不罕见,因此普通用户无论如何都可以访问任何文件。我现在和以前的工作地点,我和我所有的同事都有根访问权限,可以轻松安装新版本的软件,而无需等待IT部门的人员参与。