我在C ++和PHP之间共享一些内存
在PHP结束时我有:
$inputshm_id = shmop_open($shid, "w", 0777, 1024);
其中shid是我用ftok创建的标识符。
当我运行在服务器上以root用户身份登录的PHP脚本时,这一切都正常,但是当我尝试通过Web远程运行它时,我得到了:
警告:shmop_open()[function.shmop-open]:无法在第6行的/var/www/html/prof/phpsm.php中附加或创建共享内存段
...第6行是我上面显示的行。
因为当我以root身份从服务器运行它时它运行正常我假设某处某处阻止了Web用户请求连接到共享内存。
有谁知道造成这种情况的原因是什么?
由于
答案 0 :(得分:1)
问题是SELinux正在阻止shm访问(您可以通过运行setenforce 0
进行验证,测试并运行setenforce 1
之后),但我不知道解决其他问题的好方法而不是修改政策或切换到mmap。
答案 1 :(得分:0)
只是为了添加到接受的答案,我需要将SELinux保持在强制模式,所以我最终执行以下操作以允许在PHP中访问共享内存操作:
我最后经历了几次迭代以确保正确,但我对CentOS 6的最终政策是:
module audit.log 1.0;
require {
type unconfined_t;
type httpd_t;
type audisp_t;
type auditd_t;
type user_tmpfs_t;
class process { siginh noatsecure rlimitinh };
class shm { associate unix_read getattr read };
class file { read };
}
allow auditd_t audisp_t:process { siginh rlimitinh noatsecure };
allow httpd_t unconfined_t:shm { associate unix_read getattr read };
allow httpd_t user_tmpfs_t:file read;