gpt4 book ai didi

c - 在符号链接(symbolic link)的情况下安全地更新文件 - C

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:08 28 4
gpt4 key购买 nike

我想知道是否有人可以帮助我解决这个问题,我正在尝试弄清楚如何处理检查时间、使用时间问题以及在不需要时删除权限,以防例如它是象征性的链接到可以更改为影子文件的文件。假设在调用进程以提升的权限运行时调用了下面的函数。

int
updatefile(char *file)
{
int fd;

if (access(file, R_OK|W_OK)) {
perror("access()");
return (-1);
}

fd = open(file, O_RDWR);

/*
* file is written to here.
*/

printf("Updated %s on...\n", file);
system("date");

/*
* elevated privileges are required here...
*/

return (0);
}

最佳答案

假设您的 access 函数检查文件类型并确定用户是否具有操作文件的适当权限,您担心调用 access< 之间可能出现 TOCTTOU 错误 和对 open 的调用。

避免这种情况的典型方法是:

int updatefile(char *file)
{
int fd = -1;

if(-1 != (fd = open(file, R_OK | W_OK)))
{
struct stat buf;

if(0 == fstat(fd, &buf))
{
/* perform any necessary check on the here */
/* do what ever else you need to do */

/* write to the file here */

/* gain elevated permissions here */
/* do privileged task */
/* drop back to normal permissions here */

close(fd);
}
else
{
/* handle error stating the file */
}
}
else
{
/* handle error for not opening file */
}
}

之所以可行,是因为我们推迟对文件进行任何检查,直到我们获得文件的“句柄”。我们可以通过外层else block 中errno的值判断用户是否没有打开文件的权限;

如果我们能够获得文件的“句柄”,那么我们就可以进行我们想要的任何检查。因为我们从打开文件开始一直维护“句柄”,一直到执行检查,最后使用文件;恶意软件无法在检查和使用之间修改文件系统。

希望对你有帮助

关于c - 在符号链接(symbolic link)的情况下安全地更新文件 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055100/

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