openat函数是POSIX.1最新版本中新增的一类函数之一,希望解决 两个问题。
第一,让线程可以使用相对路径名打开目录中的文件,而不 再只能打开当前工作目录。同一进程中的所有 线程共享相同的当前工作目录,因此很难让同一进程的多个不同线程在 同一时间工作在不同的目录中
第二,可以避免time-of-check-to-time-ofuse(TOCTTOU)错误。
TOCTTOU错误的基本思想是:如果有两个基于文件的函数调用, 其中第二个调用依赖于第一个调用的结果,那么程序是脆弱的。
因为两 个调用并不是原子操作,在两个函数调用之间文件可能改变了,这样也 就造成了第一个调用的结果就不再有效,使得程序最终的结果是错误 的。文件系统命名空间中的TOCTTOU错误通常处理的就是那些颠覆文件系统权限的小把戏,这些小把戏通过骗取特权程序降低特权文件的权限控制或者让特权文件打开一个安全漏洞等方式进行。Wei和Pu[2005]在 UNIX文件系统接口中讨论了TOCTTOU的缺陷。
网友评论