gpt4 book ai didi

c - 如何确保正确的文件权限

转载 作者:太空狗 更新时间:2023-10-29 16:52:43 26 4
gpt4 key购买 nike

为了保护应用程序不被错误地使用,我正在尝试检查其配置文件是否具有正确的权限,以便应用程序可以信任文件的内容没有被其他人修改。

我相信以下规则是正确的:

  • 该文件不能被其他人写入
  • 该文件必须由受信任的用户/组拥有:root或
  • 该文件必须由运行应用程序的有效用户/组拥有(想想 setuid 程序)

举个例子:

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>

#include <string.h>
#include <errno.h>

static
int is_secure(const char *name)
{
struct stat st;

uid_t euid = geteuid();
gid_t egid = getegid();

if (stat(name, &st) != 0) {
int err = errno;
fprintf(stderr, "can't stat() '%s': %d (%s)\n", name, err, strerror(err));
return 0;
}

/* writable by other: unsecure */
if ((st.st_mode & S_IWOTH) != 0) {
return 0;
}

/* not owned by group root and not owned by effective group: unsecure */
if (st.st_gid != 0 && st.st_gid != egid) {
return 0;
}

/* not owned by user root and not owned by effective user: unsecure */
if (st.st_uid != 0 && st.st_uid != euid) {
return 0;
}

return 1;
}

int
main(int argc, char *argv[])
{
int i;

for(i = 1; i < argc; i++) {
printf("'%s' : %s\n", argv[i], is_secure(argv[i]) ? "sure" : "unsure");
}

return 0;
}

由于我不确定我的假设,有人可以检查我是否在文件权限检查中留下了一些漏洞。

更新

sudo有一个功能:sudo_secure_path ,它只检查一个 uid/gid,但它负责检查组写入位。

问候。

最佳答案

您的规则和代码在我看来是正确的,但您应该了解以下可能仍会影响您的实现的安全风险。

  1. 对机器具有物理访问权限或 NFS/SMB 访问权限的攻击者可以使用具有根权限的盒子安装文件系统,然后修改您的文件。
  2. 以可信用户或 root 身份运行的另一个程序中的漏洞可能允许该程序被利用来修改您的文件。
  3. 破坏您的安全检查的唯一方法就是粗心的用户或系统管理员弄乱文件的权限设置。我在备份和复制到拇指驱动器等过程中看到过这种情况。
  4. 还要确保该文件不可执行。我想不出可以在配置文件上利用它的实例,但安全的一般规则是不要授予工作不需要的任何特权。

如您所见,这些问题不受您的代码控制。因此,在向他们保证配置文件的不可篡改之前,您应该确保您的客户了解这些风险。

关于c - 如何确保正确的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com