Apache和Linux文件的权限

我最近把一个Symfony 1.3.2网站(一个PHP网页框架),从一台Windows机器迁移到Linux(Ubuntu 9.10)。

从那时起,我就有各种涉及文件许可的问题(即使应用程序在Windows上没有任何这些问题的情况下运行)。

我运行symfony fix-perms,在web目录(大概包括它的子文件夹)上应用了一个777掩码 – 我认为这是一个潜在的安全漏洞…我一直有意要来这里问如何正确设置权限。

目前,当试图从我的网站上保存一个文件,我收到以下错误:

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守护进程运行)可以将文件写入上面所需的目录?

对于ubuntu,apache和PHP用户是www-data。

运行sudo chown www-data:www-data web/uploads/ -R ,看看能否解决你的问题。

也不要使用777作为文件权限,因为Ignacio Vazquez-Abrams指出“文件为0444或0664,目录为0555或0775”

最重要的是,Web服务器以读取或写入的方式访问的文件应该通常由用户和组运行,Web服务器运行的是( apache:apachenobody:nobody ,不确定Ubuntu上的确切值) 。

从那里,除了需要写入权限的地方之外,用户应该在目录上有文件和rx文件。 该组通常应该匹配用户权限。 其他人应该只读。 这将转换为文件的04440444 ,和目录的05550775

当然,你可能有理由在特定的地点打破这个计划,但这是你应该拥有的基本价值。