2

access(2) 手册页说,

CAVEAT Access() 是一个潜在的安全漏洞,不应使用。

但是什么是安全漏洞,为什么我不应该使用它?

4

3 回答 3

5

从我系统的手册页:

警告:使用 access() 来检查用户是否被授权,例如,在使用 open(2) 实际打开文件之前打开文件会造成安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。因此,应避免使用此系统调用。(在刚刚描述的示例中,更安全的替代方法是暂时将进程的有效用户 ID 切换为真实 ID,然后调用 open(2)。)

因此,问题在于它创建了一个竞争条件,用户可以利用它来访问其他文件。

想象以下示例场景。我创建了一个/tmp/file允许我编写的文件。然后,您的 uid-0 程序调用access()检查是否允许我打开此文件进行写入,然后再向我提供对它的写入权限。

access()在对and的调用之间的短暂空间中open(),我可以将其删除/tmp/file并用符号链接替换为/etc/crontab. 我现在可以让系统运行我喜欢的任何程序,因为应用程序很乐意为我提供对/etc/crontab.

于 2013-01-15T07:47:55.053 回答
4

Linux 手册页清楚地描述了它

警告access()用于检查用户是否被授权,例如,在实际使用 open(2) 打开文件之前打开文件会造成安全漏洞,因为 用户可能会利用检查和打开文件之间的短时间间隔来操作它. 因此,应避免使用此系统调用。

还要注意。出于安全原因,公众不容易接触到安全漏洞。

于 2013-01-15T07:45:42.247 回答
0

查看:http ://www.kernel.org/doc/man-pages/online/pages/man2/access.2.html

警告:使用 access() 来检查用户是否被授权,例如,在使用 open(2) 实际打开文件之前打开文件会造成安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。因此,应避免使用此系统调用。(在刚刚描述的示例中,更安全的替代方法是暂时将进程的有效用户 ID 切换为真实 ID,然后调用 open(2)。)

也可以看看:

http://www.csl.sri.com/~ddean/papers/usenix04.pdf

访问()有什么问题?

于 2013-01-15T07:46:12.717 回答