在FEDORA 20,APACHE拒绝许可

时间:2014-03-29 18:09:46

标签: php linux permissions lamp selinux

上周我在我的电脑上安装了Fedora 20,创建了一个Web服务器(LAMP)并将Document Root更改为我的Dropbox文件夹。

来自

  

的/ var / www / html等

  

/家庭/ ivnbrv /收存箱

一开始我发现了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警告:move_uploaded_file(/   家用/ ivnbrv / Dropbox的/网站/文件/公/ noticia / IMG /大/ 2010201.jpg):   无法打开流:/ home / ivnbrv / Dropbox中的权限被拒绝   第113行的/ Site / upload.php

我该怎么做才能使这项工作?

3 个答案:

答案 0 :(得分:3)

由于你的情况有点远离标准 - 即。您的文档根目录位于homedir中,除其他外 - 我想提醒您,以下建议仅供您使用,以确定您的权限问题的主要原因。请记住,SELinux系统最重要的一点是提供所需的最小权限集;因此,这些步骤可能并非都是必要的,因为它们可能会进一步降低系统的安全性。

注意此外,也许最重要的是,您需要确保您的DAC策略允许对您的服务器拥有必要的rwx权限,因为SELinux仅在之后生效允许DAC权限;即如果目录/文件中不允许使用apache,则DAC策略会阻止它,而SELinux甚至不会处理它。


  • 尝试将public目录和子目录的文件上下文更改为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/
  • 此外,您应该检查以确保您使用了正确的sebooleans

    # getsebool -a |grep -i http
    

AFAIK,httpd_builtin_scriptinghttpd_can_network_connecthttpd_enable_homedirs应设置为

    # setsebool httpd_... on

对任何需要启用的布尔值执行上述命令。但是,此更改是暂时的,除非您还将-P选项添加到setsebool以使其保持持久性。

  • 检查以确保您的php脚本具有

    所需的文件上下文
    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

答案 1 :(得分:0)

在/ etc / http / conf / httpd中查找如下行:

<Directory />
    AllowOverride none
    Require all denied
</Directory>

并添加以下内容:

<Directory /home>
        AllowOverride None
        Require all granted
</Directory>

然后重启你的apache服务

答案 2 :(得分:0)

尝试将执行权限设置为:/home//home/ivnbrv//home/ivnbrv/Dropbox

chmod o+x /home/
chmod o+x /home/ivnbrv/
chmod o+x /home/ivnbrv/Dropbox

然后重启你的apache。

我建议,将您的用户添加到www-data组(在我的情况下)或apache:

adduser your-user www-data