写上传文件的权限 – Linux,Apache,PHP

我正在使用FTPfunction传输文件的PHP脚本。 它一直在我的生产服务器(这是一个托pipe服务)工作。 我刚刚设置的开发服务器(我是服务器的新手)是带有Apache2,PHP5和MySQL5的Debian Lenny。

文件传输工作正常,但一旦文件被写入服务器,它的权限为600.这使我无法在Web浏览器中查看文件(JPEG),因为权限被拒绝。 我已经搜遍了互联网,甚至打破了我的服务器安装,并重新安装它试图找出(这已经很有趣,但!)。

我知道在公共可访问文件上设置777权限是不明智的,但即使这样也不能解决问题。 唯一的作品是,如果我chmod 777 thefile.jpg传递后,这不是一个工作的解决scheme。

我试图改变我的网站文件的所有者到www-data每个这个职位 ,但也没有工作。

我的用户是mike ,如果文件的所有者是mike或者是root ,它仍然不起作用。

有人指出我的方向是正确的吗? 谢谢! 而且,当然,让我知道我是否可以澄清任何事情。

这更关系到你的FTP服务器configuration,而不是那么多的Apache。 你使用哪个服务器的FTP? 我相信vsftpd是Debian Lenny的默认ftp服务器,你可能需要在vsftpd.conf文件中查看的选项是: chown_upload_modefile_open_mode

chown_upload_mode的默认值是0600 ,这让我觉得可能是你需要设置,然后重新启动你的FTPd,然后再试一次。

这听起来像Apache没有configuration为从文件保存到的目录中提供文件。 您需要确保在您的Apacheconfiguration中有一个Directory指令,允许访问该文件所在的目录。例如:

 <Directory "/home/mike/uploads"> Order allow,deny Allow from all </Directory> 

另外www-data用户需要具有遍历目录树的权限。 例如,如果文件处于/home/mike/uploadshomemikeuploads必须具有允许其他用户执行的许可。

我似乎已经解决了这个问题。 我仍然想知道这是否是一个好的解决scheme。

Apache用户和组

我将User ${APACHE_RUN_USER}更改为User mikeGroup ${APACHE_RUN_GROUP}更改为Group www-data ,然后使用/etc/init.d/apache2 restart启动apache。

PHP5的所有者

接下来,我通过以下方式将所有者从root更改为/var/lib/php5mike

 chown -R mike /var/lib/php5 

公用文件夹的所有者,组和权限

按照这篇文章 ,我做了以下工作:

在www数据组中添加了所有者“mike”:

 sudo usermod -a -G www-data mike 

/var/www组更改为www-data

 sudo chgrp -R www-data /var/www 

然后,我更改了/var/www权限:

 sudo chmod -R 2750 /var/www 

而且,我做了以下的上传目录

 sudo chmod -R 2770 /var/www/test/images 

试过这个…

我原来在apache2.conf添加@Wesbuild议(下面),但是在完成上述工作之后删除了它。 (添加或删除这似乎没有影响任何东西):

 <Directory "/var/www"> Order allow,deny Allow from all </Directory> 

但…

JPEG图像文件在通过PHP脚本传输到服务器之后,仍具有-rw-------权限,但是我可以从Web浏览器中查看它们。 有什么想法吗?