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

JD *_*cks 8 php permissions ftp chmod

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

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

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

ftpuser 是我设置的用户,因此我可以从网络上的另一台机器 ftp 到 /var/www。www-data 是 php 使用的用户。我使用whoamiphp 进行了双重检查。

每当我 ftp 将新文件上传到机器时,该组对该文件没有权限。因此,当我尝试通过浏览器访问它时,我machine-name/new-file.php被告知权限被拒绝,我必须去访问chmod新文件。

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

小智 6

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

sudo vim /etc/fstab
Run Code Online (Sandbox Code Playgroud)

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

sudo mount -o remount,acl /
Run Code Online (Sandbox Code Playgroud)

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

sudo groupadd developers
sudo usermod -a -G developers $username
Run Code Online (Sandbox Code Playgroud)

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

当然,如果您在 /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
Run Code Online (Sandbox Code Playgroud)

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

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload
Run Code Online (Sandbox Code Playgroud)

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

sudo chmod +t /var/www/public
Run Code Online (Sandbox Code Playgroud)

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

Apache 可写日志目录:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs
Run Code Online (Sandbox Code Playgroud)

Apache 可读库目录:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib
Run Code Online (Sandbox Code Playgroud)


Lek*_*eyn 1

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

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