Selinux 在 Apche + PHP 服务中的安全权限修改

在 PHP 用使用 fopen 的写入功能实,常会遇到诸如:

PHP Warning: fopen(file): failed to open stream: Permission denied in (filepath) on line (num)的错误,特别是当在 php.conf 中建立了 virtualhost,并指定了其它的目录的情况下会有可能出现(本人使用 Fedora 20),附本人使用的 virtualhost 配置清单:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<VirtualHost 127.0.0.1:80>
    ServerAdmin xqbumu@jx
    DocumentRoot /opt/Workspace/PHP/jx
    ServerName jx
    ErrorLog logs/jx-error_log
    CustomLog logs/jx-access_log common
    <Directory "/opt/Workspace/PHP/jx/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        #Order allow,deny
        #Allow from all
        #Options None
        Require all granted
    </Directory>
</VirtualHost>

通过配置 Selinux 可以解决该问题。 本人所用 shell 命令如下:

1
2
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/Workspace/PHP/jx/application/controllers/temp(/.*)?'
restorecon -v '/opt/Workspace/PHP/jx/application/controllers/temp/*'

这样就可以解决在/opt/Workspace/PHP/jx/application/controllers/temp/目录下的读写问题了。