如何仅在一个特定目录中执行可执行文件(可执行源代码可用)

时间:2013-04-16 07:19:07

标签: gcc compiler-construction executable main

如何防止从指定的目录以外的任何其他目录执行工具(可执行文件)?可以编辑工具源代码并重新编译它。基于Linux的操作系统。

1 个答案:

答案 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,以便它可以访问它。然后,如果他们尝试运行他们的副本,它将无法工作,因为它不会以适当的权限运行。