本地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
用户运行)
将wwwroot及其子目录/文件所有者和用户组改成daemon:daemon
,访问该站点时能够创建a/index.html
,但是普通用户不具有写入的权限。
将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开发关于权限的问题
麻烦各位大神给个解答,谢谢。
天蓬老师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 共用权限了。
高洛峰2017-04-11 09:01:39
我是这样设置的,首先创建一个普通用户,也就是你所说的nono
项目文件和目录都是nono:none
个别目录,如存放缓存或者日志类的目录可以给777权限,但是要避免让web用户直接请求到。
例如图片上传的目录uploads设置读写权限即可,不给执行权限。
其他目录都是775权限
然后apache 用户设置属于 none 组看看。
不知可有帮助,我用的是nginx
大家讲道理2017-04-11 09:01:39
我的处理接近题主apache以nono用户运行
这个套路,不知道题主为何不考虑这个方式,不过我做了进一步处理。
首先,原生安装的xampp的Apache确实是以daemon:daemon运行,/opt/lampp/目录内部分目录以及文件也从属于daemon:daemon,需要调整两个点
1.Apache运行用户组及用户,修改httpd.conf内的User
和Group
为当前用户组和用户
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,手动再改回去就好了。
这个套路用于开发调试,足矣~