上传文件的写入权限 - Linux、Apache、PHP

上传文件的写入权限 - Linux、Apache、PHP

我正在编写一个使用 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_modefile_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/uploadshomemike必须uploads具有允许其他用户执行的权限。

答案3

我似乎已经解决了这个问题。我仍然想知道这是否是一个可行的解决方案。

Apache 用户和组

我将其更改User ${APACHE_RUN_USER}User mike并将Group ${APACHE_RUN_GROUP}更改为Group www-data,然后使用 重新启动了 apache /etc/init.d/apache2 restart

PHP5 所有者

接下来,我将所有者从 更改rootmikeon /var/lib/php5,方法如下:

chown -R mike /var/lib/php5

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

下列的本文,我做了以下事情:

将所有者“mike”添加到 www-data 组:

sudo usermod -a -G www-data mike

将 的组更改/var/wwwwww-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 浏览器中查看它们。有什么想法吗?

相关内容