在符号链接的情况下安全地更新文件-C

金博·琼斯

我想知道是否有人可以协助我,我试图找出如何处理检查时间,使用时间问题以及在不需要它们时的放弃特权,例如,如果它是到服务器的符号链接可以更改为影子文件的文件。假定在调用过程以提升的特权运行时调用了以下功能。

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 */
    }
}

之所以起作用,是因为我们将对文件进行的所有检查推迟到获得文件的“句柄”之后。我们可以通过errno外部else块中的值来判断用户是否没有打开文件的权限

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

希望这对T有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新文件中的记录(C ++)

来自分类Dev

如果要更新文件,使用rsync安全地获取源文件吗?

来自分类Dev

如何安全地在写入模式下创建新文件?

来自分类Dev

如何安全地在写入模式下创建新文件?

来自分类Dev

如何安全地从git repo删除新文件

来自分类Dev

如何从C#更新文件的更改时间?

来自分类Dev

如何安全地实现文件树遍历(C语言)

来自分类Dev

如何在不使用过多内存的情况下链接许多C ++目标文件?

来自分类Dev

使类型安全地抛出C ++

来自分类Dev

qt c ++ QDialog打开新文件

来自分类Dev

复制,创建和更新文件,将原始文件保留在C#中

来自分类Dev

复制,创建和更新文件,将原始文件保留在C#中

来自分类Dev

如何使用不同的线程通过openmp安全地更新C结构

来自分类Dev

如何安全地将API凭据存储在GitHub上共享的C#文件中?

来自分类Dev

C#使用线程堆安全地写入文本文件

来自分类Dev

C#使用线程堆安全地写入文本文件

来自分类Dev

如何在WPF C#应用程序中安全地部署PPK文件?

来自分类Dev

安全地以模块化方式将无符号整数相乘的最佳C ++方法是什么?

来自分类Dev

在不编写新文件的情况下修改Python文件对象

来自分类Dev

默认情况下,在新文件和文件夹上设置的权限

来自分类Dev

如何在不锁定C ++的情况下写入文件?

来自分类Dev

在这种情况下,将密码安全地存储在计算机上吗?

来自分类Dev

如何在不重启的情况下安全地在systemd上卸载/ var / usr

来自分类Dev

如何在没有身份验证的情况下安全地检测用户

来自分类Dev

如何在服务器中使用C#更新文件的文本框中添加更新行?

来自分类Dev

如何在不创建新文件的情况下使用texteditor打开终端输出?

来自分类Dev

如何在Windows中安全地存储临时文件,尤其是在安全入侵防护应用程序阻止TEMP目录的情况下

来自分类Dev

C ++-修改文件而不创建新文件

来自分类Dev

C ++-修改文件而不创建新文件

Related 相关文章

  1. 1

    更新文件中的记录(C ++)

  2. 2

    如果要更新文件,使用rsync安全地获取源文件吗?

  3. 3

    如何安全地在写入模式下创建新文件?

  4. 4

    如何安全地在写入模式下创建新文件?

  5. 5

    如何安全地从git repo删除新文件

  6. 6

    如何从C#更新文件的更改时间?

  7. 7

    如何安全地实现文件树遍历(C语言)

  8. 8

    如何在不使用过多内存的情况下链接许多C ++目标文件?

  9. 9

    使类型安全地抛出C ++

  10. 10

    qt c ++ QDialog打开新文件

  11. 11

    复制,创建和更新文件,将原始文件保留在C#中

  12. 12

    复制,创建和更新文件,将原始文件保留在C#中

  13. 13

    如何使用不同的线程通过openmp安全地更新C结构

  14. 14

    如何安全地将API凭据存储在GitHub上共享的C#文件中?

  15. 15

    C#使用线程堆安全地写入文本文件

  16. 16

    C#使用线程堆安全地写入文本文件

  17. 17

    如何在WPF C#应用程序中安全地部署PPK文件?

  18. 18

    安全地以模块化方式将无符号整数相乘的最佳C ++方法是什么?

  19. 19

    在不编写新文件的情况下修改Python文件对象

  20. 20

    默认情况下,在新文件和文件夹上设置的权限

  21. 21

    如何在不锁定C ++的情况下写入文件?

  22. 22

    在这种情况下,将密码安全地存储在计算机上吗?

  23. 23

    如何在不重启的情况下安全地在systemd上卸载/ var / usr

  24. 24

    如何在没有身份验证的情况下安全地检测用户

  25. 25

    如何在服务器中使用C#更新文件的文本框中添加更新行?

  26. 26

    如何在不创建新文件的情况下使用texteditor打开终端输出?

  27. 27

    如何在Windows中安全地存储临时文件,尤其是在安全入侵防护应用程序阻止TEMP目录的情况下

  28. 28

    C ++-修改文件而不创建新文件

  29. 29

    C ++-修改文件而不创建新文件

热门标签

归档