环境
本地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开发关于权限的问题
麻烦各位大神给个解答,谢谢。
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 共用权限了。