我正在使用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_mode和file_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/uploads则home , mike和uploads必须具有允许其他用户执行的许可。
我似乎已经解决了这个问题。 我仍然想知道这是否是一个好的解决scheme。
Apache用户和组
我将User ${APACHE_RUN_USER}更改为User mike , Group ${APACHE_RUN_GROUP}更改为Group www-data ,然后使用/etc/init.d/apache2 restart启动apache。
PHP5的所有者
接下来,我通过以下方式将所有者从root更改为/var/lib/php5的mike :
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浏览器中查看它们。 有什么想法吗?