我在专用服务器上运行了几个网站,很多网站都要求将某些目录的权限设置为 777。我知道这是一个重大的安全问题,我也知道可以进行配置,这样就不必在目录上使用 777,但我不知道该怎么做。有人能给我指出正确的方向,让我可以在没有 777 个目录的情况下完成功能吗?
谢谢!
答案1
几年前,当我发现 unix ACL 时,它们让我大吃一惊!同样让我吃惊的是,它们并不为人所知。
简而言之,它们允许您设置扩展文件权限,超出简单的用户+组+其他经典文档的权限。
您需要的两个命令是“设置“ 和 ”获取函数“。如果它抱怨,你可能需要重新安装具有 acl 支持的文件系统”安装-o重新安装,rw,acl /“。
我使用 setfacl 的两种常见方式是:
setfacl -R -m u:apache:rwx /var/www/mydirectory
setfacl -R -d -m u:apache:rwx /var/www/mydirectory
第一行递归地为给定路径中的所有内容添加了 rwx 权限(在已有的权限之上)。第二条命令使新文件和目录的默认策略自动为 apache 用户提供 rwx 权限。
这比弄乱 suPHP 或组权限等要快得多。
答案2
由于你控制着服务器,你可以考虑通过苏普。PHP 进程是为不同用户生成的。这样,您的目录就可以被 chmodded 为 0700,所有权归进程正在运行的用户所有。
附言:serverfault 上见。我投票赞成搬家。
答案3
如果您必须将所有内容设置为 777,则意味着您存在一些所有权问题。
一般来说,您只需担心三类用户:
- 正在设置 Web 应用程序的实际用户;
- Web 服务器 (也可能是 PHP) 运行时的 uid;以及
- 其他所有人。
通常,您应该能够将文件和目录的所有权设置为执行设置的实际用户,并将组成员身份设置为 Web 服务器的组成员身份。如果这样做,那么您可以将大多数内容的权限设置为所有者的 rwx 和 apache 组的 rx;您的应用程序说明应该非常具体地说明应用程序需要写入访问权限的目录。(如果不是,它可能也以其他方式松散地编写,并且可能存在安全漏洞。)
如果您操作正确,则“其他所有人”(即“服务器上不属于 Web 服务器组成员的所有用户”)可以将其权限设置为 0(即,无读、无写、无 ex)。
例如,我的 WordPress 安装由我安装,但由网络服务器运行,因此所有内容通常都是权限 750,所有权 dave:apache。WordPress 存储传入上传的目录设置为权限 770,所有权 dave:apache。