上周,我在计算机上安装了Fedora 20,创建了一个Web服务器(LAMP),并将文档根目录更改为我的Dropbox文件夹.
从
/var/www/html
至
/home/ivnbrv/Dropbox
一开始,我发现SELinux出现了一些问题,通过谷歌搜索发现这种方式已解决了问题.
$chcon-R-u system_u-t httpd_sys_content_t /home/ivnbrv/Dropbox
然后更改此目录的所有者,该目录设置为
/etc/httpd/conf/httpd.conf
User ivnbrv
Group apache
$chown-R ivnbrv.apache /home/ivnbrv/Dropbox
现在,当我尝试使用PHP上传文件时
move_uploaded_file ()
我看到这个错误
PHP Warning: move_uploaded_file (/
home/ivnbrv/Dropbox/Site/files/public/noticia/img/large/2010201.jpg):
failed to open stream: Permission denied in / home / ivnbrv / Dropbox
/ Site / upload.php on line 113
我该怎么做才能使这项工作正常???
解决方法:
由于您的情况与标准有所不同-即您的Document Root目录位于homedir中,除其他外-我想提醒您,以下建议仅用于您确定权限问题的主要原因.请记住,SELinux系统最重要的一点是提供所需的最小权限集.因此,这些步骤可能不是全部必需的,因为它们可能会进一步降低系统的安全性.
注意另外,也许是最重要的一点,您需要确保DAC策略允许对服务器具有必要的rwx权限,因为SELinux仅在允许DAC权限之后才生效;否则,可能会更改.也就是说,如果不允许在目录/文件上使用rwx,则DAC策略会阻止它,而SELinux甚至不会处理它.
>尝试将公共目录和子目录的文件上下文更改为public_content_rw_t.
# semanage fcontext -a -t public_content_rw_t "/home/ivnbrv/Dropbox/Site/files/public(/.*)?"
其次是
# restorecon -R -v /home/ivnbrv/Dropbox/Site/files/public/
>此外,您应检查并确保已使用以下命令启用了正确的seboolean:
# getsebool -a |grep -i http
AFAIK,httpd_builtin_scripting,httpd_can_network_connect和httpd_enable_homedirs应该设置为on.
# setsebool httpd_... on
对需要启用的所有布尔值执行上面的命令.但是,此更改是临时的,除非您还向setsebool添加-P选项以使其持久.
>检查并确保您的php-script具有必要的文件上下文
ls -alZ /path/to/dir/with/scripts
如果没有,您可以通过执行以下命令将它们更改为httpd_sys_script_exec_t
# semanage fcontext -a -t httpd_sys_script_exec_t '/home/ivnbrv/Dropbox/Site/.*\/php5?'
# semanage fcontext -a -t httpd_sys_script_rw_t '/home/ivnbrv/Dropbox/Site/files/public/noticia/img(/.*)?'
# restorecon -R -v /home/ivnbrv/Dropbox/
与往常一样,请查看SELinux’s wikipages以获取更多详细信息.在fedora wiki pages上,还有大量有用的信息,其中包含许多方案和工作流方法.以及官方的Fedora Docs – Security Guide.