PHP用户www-data的默认文件权限


8

我在ubuntu机器上安装了php。网络根是/var/www

我为此文件夹设置了权限,如下所示:

须藤chown -R ftpuser:www-data / var / www

ftpuser是我设置的用户,因此我可以从网络上的另一台计算机ftp到/ var / www。www-data是php使用的用户。我whoami从php 仔细检查过。

每当我通过ftp将新文件上传到计算机时,该组就没有对该文件的权限。因此,当我尝试通过浏览器访问该文件machine-name/new-file.php时,系统会通知我权限被拒绝,我必须继续chmod使用新文件。

我想知道是否有一种方法可以使www-data用户/组默认为具有对新文件的访问权限,因此我不必让chmod保留每个新文件吗?

Answers:


6

您可以使用ACL。要为Ubuntu 10.10设置ACL,请首先在/ etc / fstab中使用acl选项挂载文件系统。

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4默认值,acl 0 1

sudo mount -o remount,acl /

然后建立一个用户可以为此目的所属的组。

sudo groupadd developers
sudo usermod -a -G developers $username

用户需要注销然后再次登录才能成为开发人员组的成员。

当然,如果您要在/ var / www目录中包含内容,则不要这样做,而只是为了说明将其设置为开始:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

然后在配置文件中将对“ / var / www”的引用替换为“ / var / www / public”,然后重新加载。

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

如果我们想限制创建文件的用户以外的所有用户的删除和重命名:

sudo chmod +t /var/www/public

这样,如果我们想为Apache文档根目录之外的框架创建目录,或者创建服务器可写目录,这仍然很容易。

Apache可写的日志目录:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Apache可读的库目录:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

这对我来说非常理想,但是如果您能解释一下chmod g+sand setfacl命令(及其参数)的工作,我将很感兴趣。
格雷格,

4

我确定您已经解决了这个问题,所以这适用于有类似要求的任何人

在您的webroot文件夹上运行“更改所有权”命令:

sudo chown manny -R www

这将使您的所有者用您的用户名替换“ manny”,从而使您能够在www文件夹中进行写入/读取


1

如果您的网络服务器甚至无法读取文件,则很有可能是的权限new-file.php约为600(所有者拥有读写权限)。在您的FTP应用程序中搜索umask设置,并确保它类似于007。

如果您的Web应用程序需要chmod文件(或仅文件所有者可以执行的其他操作),则需要其他方法。如果您使用的是Apache,则应考虑使用itk MPM。使用该模块,您可以使Apache使用与“ ftpuser”相同的用户来运行/打开文件。如果您需要有关此主题的更多信息,请添加评论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.