fopen('/ dev / urandom')在linux上与mcrypt_create_iv

时间:2012-12-14 01:04:09

标签: php mcrypt

fopen(' / dev / urandom',' rb')可能由于多种原因而失败。也许" open_basedir限制[有效]"或者/ dev / *权限不允许fopen()读取它们。

事情是...... mcrypt_create_iv使用/ dev / urandom:

https://github.com/php/php-src/blob/master/ext/mcrypt/mcrypt.c#L1391

我的问题是......如果fopen()失败,mcrypt_create_iv()仍然可以工作吗?

对于open_basedir限制,我的假设是肯定的,但如果它的权限怎么办?是否存在fopen()可能没有打开/ dev / urandom所需的权限但mcrypt_create_iv可以在哪里的情况?

2 个答案:

答案 0 :(得分:1)

权限未分配给函数,它们根据其用户,组或世界成员身份分配给流程(如果您使用ACL,则可以使用更精细的控制权)。

因此,如果您的进程以特定身份运行,则尝试使用fopen()mcrypt_create_iv()(使用{{}打开文件之间没有区别1}}在较低级别。)

当然,如果调用open()的程序具有提升的权限(例如mcrypt_create_iv()程序),则可能能够执行其他程序可能不会执行的操作。

答案 1 :(得分:0)

我认为open_basedir限制不会影响PHP模块中的C代码,只影响PHP脚本本身。如果PHP脚本使用chroot(),或者PHP在chroot jail中作为Apache模块运行,那么会影响脚本和模块,就像这样;监狱必须有/dev/urandom

虽然/dev/urandom上的权限可能受到限制,但似乎极不可能(为什么有人会这样做?)。