CGI脚本创建子目录时,为何所有者需将父目录设为777权限?
问题解答
核心原因是CGI脚本的运行身份不是你本人:
- 当通过Web请求触发CGI脚本时,脚本是由Web服务器(如Apache、nginx)以服务器专属用户身份执行的,常见用户为
www-data或apache,而非你登录GCP实例时使用的所有者账号。 - 父目录权限设为755时,权限分解为:所有者(你)拥有读/写/执行权限,同组用户拥有读/执行权限,其他用户仅拥有读/执行权限。而CGI进程的用户属于“其他用户”范畴,无写入权限,因此无法在父目录下创建子目录。
- 当将父目录改为777时,“其他用户”获得了写入权限,CGI进程的用户才能成功执行
mkdir $dir命令。
- 当通过Web请求触发CGI脚本时,脚本是由Web服务器(如Apache、nginx)以服务器专属用户身份执行的,常见用户为
更安全的替代方案(不建议使用777权限):
- 将父目录的所属组改为Web服务器的用户组,例如
chgrp www-data /path/to/parent-dir,再给组添加写入权限:chmod 775 /path/to/parent-dir。这样既保证CGI能创建目录,又避免给所有用户开放写入权限的安全风险。 - 或者直接将父目录的所有者改为Web服务器用户:
chown www-data /path/to/parent-dir,保持755权限即可。
- 将父目录的所属组改为Web服务器的用户组,例如
内容的提问来源于stack exchange,提问作者Marcos Camargo
相关产品推荐
相关产品推荐

