在Linux上,是命令行程序mktemp的比C函数mkstemp更不安全?
-
20-08-2019 - |
题
这两个操作创建一个空文件,并返回文件名,但mkstemp叶文件以独占方式打开,让你的手柄。是否有一个安全效益的C函数?这是否意味着存在在命令行版本安全孔?
顺便说一句,有趣的是,有在Linux上的C API几个相关的功能,其中大部分的说:“不要使用这个功能”(或类似)在他们的手册页。
解决方案
你可以很容易地从mktemp(1)
源代码看,它本质上是做什么,但调用mkstemp(3)
。
在Linux的独占模式意味着函数将失败,如果该文件已经存在,它不能保证锁定。其他进程可以删除这个文件,然后再重新创建并用数据填充它,尽管文件句柄您的过程中被open(3)
。
有在C功能没有额外的安全性相比,命令行实用程序。
其他提示
在类Unix操作系统(包括Linux和Mac OS)的临时文件的一个技巧是,只要你打开文件,将其删除。您仍然可以访问该文件,但没有人能看到它或对它做任何事情,并会尽快关闭该文件消失,即使你的程序死掉一个可怕的死亡。
系统调用和命令行功能之间最明显的区别是,命令行功能是由人或他们的shell脚本使用,而系统调用总是由程序来完成。
这将是十分困难的手一人的文件句柄。
关于“安全”,你应该想想比赛条件:在同一时间一个程序调用mkstemp的几个实例,但每一个都保证有一个唯一的临时文件。如果程序掏出并称为命令行版本,它会是几乎不可能保证这一点。
不隶属于 StackOverflow