无法访问PHP/C++共享内存在网上
我分享一些存储区域C++和PHP无法访问PHP/C++共享内存在网上
在PHP结束时,我有:
$inputshm_id = shmop_open($shid, "w", 0777, 1024);
哪里SHID是我ftok创建的标识符。
这一切工作正常,当我运行这个PHP脚本登录的服务器上的根,但是当我试图通过网络远程运行它,我得到:
警告:shmop_open()[function.shmop开]:无法在第6行的/var/www/html/prof/phpsm.php中附加或创建共享内存段
...其中第6行是我上面显示的行。
由于它运行良好,当我作为根从服务器运行它时,我假设某处阻止了Web用户请求连接到共享内存。
有谁知道可能是什么原因造成的?
感谢
问题是SELinux禁止的SHM访问(您可以通过运行setenforce 0
,测试和运行后setenforce 1
验证),但我不知道解决它比修改其他的好办法该策略或切换到mmap。
谢谢。 setenforce 0给了我'setenforce()失败的回应',但我会再看看它现在你给了我一些继续。 – Columbo 2010-11-15 17:48:21
它正在运行,如果我做sestatus它告诉我SELinux已启用,但尽管有root访问权限(通过SSH)它不会让我执行任何更改。我试过'newrole -r sysadmn_r'来查看是否有帮助,但我只是得到:'newrole command not found'。 – Columbo 2010-11-15 18:05:35
你说得对,这是SELinux,谢谢。 – Columbo 2010-11-18 09:30:22
只需添加到接受的答案,我需要保持的SELinux的强制模式,所以最后我做以下,以允许访问共享内存的操作在PHP中:在许可模式
- 放了SELinux
- 放了SELinux在“不阻止”模式:semodule-DB(这是很重要的,因为shmop业务没有默认登录)
- 清除出/var/log/audit/audit.log
- 执行了违规脚本具有共享存储器操作
- 产生selinux的模块:audit2allow -a -M audit.log
- 安装的模块:semodule -i audit.log.pp
我并最终通过去为了让它正确,但我在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;
平台是...? – 2010-11-15 17:05:31
这是Linux的红帽。 – Columbo 2010-11-15 17:08:24