我正在编写一个使用 FTP 函数传输文件的 PHP 脚本。它在我的生产服务器(托管服务)上一直有效。我刚刚设置的开发服务器(我是服务器新手)是 Debian Lenny,带有 Apache2、PHP5 和 MySQL5。
文件传输工作正常,但一旦文件写入服务器,它的权限为 600。这使我无法在 Web 浏览器中查看文件 (JPEG),因为权限被拒绝。我搜索了互联网,甚至破坏了我的服务器安装并重新安装它,试图弄清楚这一点(尽管如此,这很有趣!)。
我知道对公共可访问文件设置777
权限是不明智的,但即使这样也不能解决问题。唯一有效的方法是chmod 777 thefile.jpg
后它已被转移,这不是一个有效的解决方案。
我尝试将我的网站文件的所有者更改www-data
为这个帖子,但这也不起作用。
我的用户是mike
,但文件所有者是否是 仍然无法mike
工作root
。
有人能给我指点一下吗?谢谢!当然,如果我能澄清任何事情,请告诉我。
答案1
这与您的 ftp 服务器配置关系更大,与 apache 关系不大。您使用哪个服务器进行 ftp?我相信 vsftpd 是 Debian Lenny 的默认 ftp 服务器,您可能需要在文件中查看的选项vsftpd.conf
是:chown_upload_mode
和file_open_mode
默认值chown_upload_mode
是,0600
这让我认为这可能是您需要设置的,然后重新启动 FTPd 并重试。
答案2
听起来 Apache 没有配置为在文件保存到的目录中提供文件。您需要确保有一个目录Apache 配置中的指令允许访问文件所在的目录。例如:
<Directory "/home/mike/uploads">
Order allow,deny
Allow from all
</Directory>
此外,www-data 用户需要具有遍历通向目录的目录树的权限。例如,如果文件位于/home/mike/uploads
,home
则mike
必须uploads
具有允许其他用户执行的权限。
答案3
我似乎已经解决了这个问题。我仍然想知道这是否是一个可行的解决方案。
Apache 用户和组
我将其更改User ${APACHE_RUN_USER}
为User mike
并将Group ${APACHE_RUN_GROUP}
更改为Group www-data
,然后使用 重新启动了 apache /etc/init.d/apache2 restart
。
PHP5 所有者
接下来,我将所有者从 更改root
为mike
on /var/lib/php5
,方法如下:
chown -R mike /var/lib/php5
公用文件夹的所有者、组和权限
下列的本文,我做了以下事情:
将所有者“mike”添加到 www-data 组:
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
试过了...
我最初将@Wes 建议(如下)添加到apache2.conf
,但在执行上述操作后将其删除,这样就可以了。(添加或删除它似乎不会影响任何事情):
<Directory "/var/www">
Order allow,deny
Allow from all
</Directory>
但...
JPEG 图像文件通过 PHP 脚本传输到服务器后,仍然具有权限-rw-------
,但我能够从 Web 浏览器中查看它们。有什么想法吗?