基于MySQL的PHP网站文件与目录权限设置及匿名用户权限疑问
先帮你理清几个核心概念,再一步步讲符合需求的权限配置方案:
一、Owner、Group、Others 到底指什么?匿名用户属于哪一类?
在Linux/Unix文件系统的权限体系里,这三个是权限管控的核心主体:
- Owner:文件或目录的拥有者,一般是创建文件的用户(比如你本地开发时的登录账号,或者服务器上部署代码的用户),可以用
chown命令修改。 - Group:文件或目录所属的用户组,一个组可以包含多个系统用户。通常会把web服务器的运行用户(比如Apache的
www-data、Nginx的nginx)加入这个组,方便统一控制访问权限。 - Others:所有既不是文件owner,也不在文件所属group里的系统用户。
重点说匿名用户:匿名用户本身不是服务器上的系统用户,他们访问网站时,请求是由web服务器进程代为处理的,这个进程会以某个系统用户的身份运行(比如www-data)。所以匿名用户的访问权限,本质上是web服务器运行用户的权限——如果web服务器用户属于文件的group,就用group权限;如果不属于,就用others权限。
二、权限配置方案(匹配你的需求)
你的核心需求是:主目录的.php文件可正常访问,views、pictures、includes目录不能通过URL直接访问,但能被主目录的PHP文件加载。需要结合文件系统权限和web服务器配置实现:
1. 主目录下的.php文件权限
主目录的PHP文件需要让web服务器能够读取(web服务器会把PHP文件交给解释器执行,不需要执行权限,只要可读)。推荐设置:
chmod 644 /path/to/your/site/*.php
6:owner拥有读、写权限(方便你修改代码)4:group拥有读权限4:others拥有读权限
这样不管web服务器用户属于group还是others,都能读取这些PHP文件,正常处理用户请求。
2. 限制views、pictures、includes的直接访问
第一步:文件系统权限设置
确保这些目录和内部文件,只有owner和web服务器用户能读取,others无权限:
# 修改目录权限(owner可读写执行,group可读执行,others无权限) chmod 750 /path/to/your/site/views chmod 750 /path/to/your/site/pictures chmod 750 /path/to/your/site/includes # 修改目录内文件权限(owner读写,group读,others无权限) chmod 640 /path/to/your/site/views/* chmod 640 /path/to/your/site/pictures/* chmod 640 /path/to/your/site/includes/*
然后把web服务器运行用户加入文件的group(假设你的文件group是your-group,web服务器用户是www-data):
usermod -aG your-group www-data
这样web服务器用户就能通过group权限读取文件,而其他系统用户无法访问。
第二步:web服务器配置(阻止URL直接访问)
仅靠文件权限还不够,因为如果web服务器允许直接访问这些目录的文件,用户还是能通过URL打开。需要配置web服务器拒绝这些目录的直接请求:
- 如果你用Apache:在每个需要限制的目录(views、pictures、includes)里创建
.htaccess文件,内容如下:
# 拒绝所有直接访问请求 Deny from all
- 如果你用Nginx:在站点配置文件里添加以下规则:
location /views/ { deny all; } location /pictures/ { deny all; } location /includes/ { deny all; }
配置完成后重启web服务器,用户直接输入URL访问这些目录的文件时会得到403禁止响应,但你的PHP代码(比如index.php)仍能通过文件系统读取这些文件并正常使用。
额外提醒
- 绝对不要给PHP文件设置
777权限,这会让任何用户都能修改你的代码,风险极高。 - 如果pictures目录不需要支持用户上传,就不要给web服务器写权限,最小化权限范围能提升安全性。
内容的提问来源于stack exchange,提问作者Margherita Bonaldi

