如何防止从指定的目录以外的任何其他目录执行工具(可执行文件)?可以编辑工具源代码并重新编译它。基于Linux的操作系统。
答案 0 :(得分:0)
调用getcwd()
并检查目录是否为指定目录。
#define ALLOWED_DIR "/foo/bar/baz"
char dir[BUFSIZ];
getcwd(dir, BUFSIZ);
if (strcmp(dir, ALLOWED_DIR) != 0) {
/* complain and exit */
}
修改
从您的评论中,您似乎没有查找用户正在执行的目录,而是查找包含可执行文件本身的目录。没有完全可靠的方法,请参阅http://www.linuxquestions.org/questions/programming-9/how-do-i-get-the-application-path-in-c-426517/
检查可执行位置不提供任何真正的安全性。如果有人制作了该程序的副本,他们可以简单地删除检查它所在位置的部分。
如果您想确保用户仅使用正式安装的程序版本,则需要依赖于访问普通用户无法访问的内容。然后使程序setuid或setgid,以便它可以访问它。然后,如果他们尝试运行他们的副本,它将无法工作,因为它不会以适当的权限运行。