我最近将 Symfony 1.3.2 网站(一个 PHP 网络框架)从 Windows 机器迁移到了 Linux(Ubuntu 9.10)。
从那时起,我遇到了各种涉及文件权限的问题(即使该应用程序在 Windows 上运行时没有任何这些问题)。
我运行 symfony fix-perms,它将 777 掩码应用于 Web 目录(大概包括其子文件夹) -(顺便说一句)我认为这是一个潜在的安全漏洞...我一直想来这里询问如何正确设置权限。
目前,当我尝试从我的网站保存文件时,出现以下错误:
PHP 警告:imagejpeg() [0function.imagejpeg0]:无法打开‘/home/morpheous/work/webdev/frameworks/symfony/sites/project1/web/uploads/../images/thumbnail/959cd604cf6115014a3703bef5a50486a5520642.jpg’进行写入:/home/morpheous/work/webdev/frameworks/symfony/sites/project1/apps/frontend/lib 中的权限被拒绝
以下是文件夹的权限:
web
drwxr-xr-x 16 morpheous morpheous 4096 2010-02-24 21:01 web
web/uploads/../images
drwxr-xr-x 13 morpheous morpheous 12288 2010-04-09 15:25 images
web/uploads/../images/thumbnail
drwxr-xr-x 3 morpheous morpheous 4096 2010-02-24 20:44 thumbnail
有人能告诉我如何设置权限,以便我的网站(大概作为 Apache 守护程序运行)可以将文件写入上面所需的目录吗?
答案1
对于 ubuntu,apache 和 PHP 用户是 www-data。
运行sudo chown www-data:www-data web/uploads/ -R
并查看是否能解决您的问题。
另外,不要使用 777 作为文件权限,正如 Ignacio Vazquez-Abrams 所述,“文件权限为 0444 或 0664,目录权限为 0555 或 0775”
答案2
最重要的是,Web 服务器以读取或写入方式访问的文件通常应由运行 Web 服务器的用户和组拥有(apache:apache
或者nobody:nobody
,不确定 Ubuntu 上的确切值)。
从那里开始,用户应该r
对文件和rx
目录具有权限,除非需要写入权限。组通常应与用户权限相匹配。其他所有人都应具有只读权限。这转化为文件的0444
或0664
,以及目录的0555
或。0775
当然,你可能有在特定位置打破这种方案的理由,但这些是你应该具备的基本价值观。