search

Home  >  Q&A  >  body text

apache - linux(ubuntu)下php开发,htdocs/wwwroot(目录及其子目录/文件)权限该如何设置

环境

本地php开发,lamp环境由ubuntu16.04+xampp搭建而成
个人用户nono:nono,umask022
apache运行用户daemon:daemon(这是xampp配置文件里指定的默认用户和用户组)
网站根目录路径/home/nono/Web/wwwroot

需求

假设wwwroot目录下有个文件index.php,其作用是在wwwroot目录下创建一个目录a,然后在a目录中创建文件index.html。同时用户nono要有权限直接编辑wwwroot下的所有目录/文件。

问题

该如何设置wwwroot及其子目录/文件的权限,既能保证apache即daemon用户对该目录/文件的访问/写入权限,又能保证个人用户nono对该目录/文件的访问/写入权限?
(不考虑将权限设置成777或者apache以nono用户运行)

尝试

  1. 将wwwroot及其子目录/文件所有者和用户组改成daemon:daemon,访问该站点时能够创建a/index.html,但是普通用户不具有写入的权限。

  2. 将wwwroot及其子目录/文件所有者和用户组改成nono:daemon(需要以root身份才能设置),病把wwwroot下的目录/文件给用户组添加上写入权限,访问该站点时能够创建a/index.html。但是用户nono先创建了a目录,此时a的所有者用户组为nono:nono,就不能创建index.html文件了。如何让wwwroot目录下所有新创建的文件所有者和用户组都是nono:daemon,但是其他用户目录(如/home/nono)下创建的目录文件所有者用户组还是nono:nono

参考

linux下对Laravel框架的目录如何修改文件权限
ubuntu下lnmp开发关于权限的问题

麻烦各位大神给个解答,谢谢。

黄舟黄舟2816 days ago1354

reply all(3)I'll reply

  • 天蓬老师

    天蓬老师2017-04-11 09:01:39

    保证apache即daemon用户对该目录/文件的访问/写入权限

    apache 用户不能对它所执行代码的目录拥有写入权限,否则网站等着被挂马吧。上传目录可写,所以一定要是不可执行的(HTTP 服务器不配置执行此目录中的任何脚本,不管它 PHP 还是别的什么)。

    apache 不应该使用 daemon 用户(实际上不应该使用 daemon 的用户,因为它的语义不明确,容易造成安全隐患)。apache 所使用的用户应当叫 apache 或者 www 或者 http 或者 www-data。

    你把 wwwroot 目录给 nono:apache,并且设置 4750 权限,这样新建的目录 apache 组就可读了。或者你也可以利用 POSIX ACL 的 default 规则来做。

    如果你的 PHP 程序需要写日志或者数据文件,请为其准备另外的目录(无法通过 Web 访问的)。

    其实为了安全,建议使用 FastCGI 模式运行 PHP 代码,这样 HTTP 服务就不需要与 PHP 共用权限了。

    reply
    0
  • 高洛峰

    高洛峰2017-04-11 09:01:39

    我是这样设置的,首先创建一个普通用户,也就是你所说的nono

    项目文件和目录都是nono:none

    个别目录,如存放缓存或者日志类的目录可以给777权限,但是要避免让web用户直接请求到。

    例如图片上传的目录uploads设置读写权限即可,不给执行权限。

    其他目录都是775权限

    然后apache 用户设置属于 none 组看看。

    不知可有帮助,我用的是nginx

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-11 09:01:39

    我的处理接近题主apache以nono用户运行这个套路,不知道题主为何不考虑这个方式,不过我做了进一步处理。
    首先,原生安装的xampp的Apache确实是以daemon:daemon运行,/opt/lampp/目录内部分目录以及文件也从属于daemon:daemon,需要调整两个点
    1.Apache运行用户组及用户,修改httpd.conf内的UserGroup为当前用户组和用户
    2.批量修改默认web目录内原从属daemon:daemon的目录及文件的从属,上命令sudo find /opt/lampp/ -user daemon -exec chown user:user {} ;,当然,不放心直接改的话可以先不执行-exec后面的,直接sudo find /opt/lampp/ -user daemon肉眼识别过一遍。
    其次,要当心sudo xampp security这个命令的坑,这个命令会将phpmyadmin的配置文件刷新,从属用户组又会改回daemon:daemon,手动再改回去就好了。

    这个套路用于开发调试,足矣~

    reply
    0
  • Cancelreply