让新创建的文件和文件夹 www-data 的所有者代替超级用户/管理员

让新创建的文件和文件夹 www-data 的所有者代替超级用户/管理员

到目前为止,我一直在努力解决权限问题,并发布了另一个问题,但确定了问题所在,但还没有任何办法解决它。

我的设置:

  • 带有 LAMP 堆栈的 Ubuntu 桌面
  • 5 个“用户”我在 ubuntu 服务器中创建了这些用户sudo useradd -r -s /bin/false USERNAME,它们用于访问本地网络共享文件夹,即,我网络上的计算机可以连接到使用 Samba 共享的 /var/www 文件夹。
  • 编辑:目的是创建一种“主本地主机”,其中我本地网络中的所有计算机都可以在本地在同一个网站上工作(我没有静态 IP 地址,因此无法从其他地方访问服务器)。

我的问题:

/var/www/html目前,当我使用网络中的任何计算机创建新文件夹时(例如:创建文件夹 /var/www/html/testsite1),此文件夹自动归属于boris:www-data(“boris”是我 ubuntu 桌面安装的主要管理员用户,在新创建的文件夹上运行时确实显示 boris:www-data ls -l),这导致我当前的设置出现问题(主要使用 LifeInTheGrid 的 Duplicator Plugin for wordpress)。但是,我的/var/www和我的/var/www/html都归属于www-data:www-data

因此,我想知道如何才能:

  • 将 /var/www 和 /var/www/html 下的所有文件和目录的所有权更改为 www-data:www-data

  • 确保我与网络中的任何用户创建的任何文件或文件夹都将自动归 www-data:www-data 所有(如果我没记错的话,这包括由 php 脚本自动创建的文件,因为这就是 Duplicator 插件所做的)。

有没有办法做到这一点?

注意:对于 Linux 和命令行相关的东西,我是个超级新手,但我赶得很快。

注2:umask已经设置为0002

编辑:

尝试过这个:

sudo chown -R www-data:www-data /var/www/

然后通过执行以下操作设置 setuid 和 setgid 位:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

然后注销,重新启动 apache,并尝试使用通过网络 IP(本地 IP,非静态)连接到我的服务器的 Mac 创建一个新文件夹。

我跑了

ls -l on /var/www/html

输出依然是:

drwxr-sr-x 2 boris   www-data  testsite1

笔记:

我之前已经检查过我的 apache 配置和环境变量,它已经设置为:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

编辑:我尝试反向操作,例如将所有内容设置为由 boris:www-data 拥有,并将我的环境变量 apache 配置设置为 boris:www-data。成功了!

这是我所做的:

将环境变量更改为

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

sudo chown -R boris:www-data /var/www/

重新启动 Apachem,创建了一个新文件夹,添加了我的文件,运行了插件,现在说它很好 !!!

答案1

问题 1 的答案:递归chown

递归命令chown将允许您将所有权和组设置为您想要的/var/www/...。您应该使用以下命令:

sudo chown -R www-data:www-data /var/www/

这样,每个文件和文件夹都将具有相应的所有权权限。


问题 2 的半答案:setgid少量

如果您希望文件拥有默认组所有权,请设置文件setgid夹的位/var/www/html。然后应使用文件夹中指定的该组创建新文件。

sudo chmod g+s /var/www/html

www-data但是,如果除写入目录之外的任何用户,则需要设置写入权限,如果您不小心,这样做可能会给您带来一两个安全漏洞。

您最终获得的权限是$USER:www-data;要更改所有者,您可以使用chown方法#1中所示的权限(也就是说,在正确的设置中,您应该依靠组权限而不是用户所有者权限来访问网络文件)。


PHP Wordpress 复制器问题

权限问题是用户/组 PHP 运行时需要写入和读取,并且可能+x在目录中编辑目录结构等。

在使用默认配置的 Ubuntu 安装中, PHP 默认运行www-data。理想情况下,上述步骤可以解决问题,因为 Duplicator 插件是一个 PHP 插件。

理想情况下,您还应该检查 Duplicator 插件的文档以验证其运行和工作所需的权限。

答案2

为了确保您创建的任何文件或文件夹/var/www/html自动归 www-data 所有,您可以使用inotify,它类似于 cron,但监视文件夹/文件的属性变化、文件创建、修改等。

首先使用以下命令安装:

$ sudo apt-get install incron

incron通过以下方式打开以允许 root 使用/etc/incron.allow

$ sudo vim /etc/incron.allow

并添加root到文件中,然后保存并退出。

使用以下命令编辑你的 incrontab:

$ sudo incrontab -u root -e

并添加以下行:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

保存并退出。

现在,只要在/var/www/html目录中创建文件,它就会自动将所有权设置为www-data:www-data

incrontab 中该行的解释:

/var/www/html是将被监视的目录。

IN_CREATE将监视创建的文件。这是文件变更掩码

/bin/chown -R www-data:www-data /var/www/html/是需要执行的命令/动作。

答案3

将 /var/www 和 /var/www/html 下的所有文件和目录的所有权更改为 www-data:www-data

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html此处暗示(作为 /var/www/ 的一部分)
  • -R使其递归(因此它将遍历中的所有目录/var/www/)。

确保我与网络中的任何用户创建的任何文件或文件夹都将自动归 www-data:www-data 所有

  • 我假设是在 /var/www/html/ 里面?

将你的 apache 配置设置为 www-data。请参阅/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

编辑完此文件后需要重新启动 apache(sudo service apache restart)。

如果我没记错的话,这包括由 php 脚本自动创建的文件,因为这就是 Duplicator 插件所做的。

这里的问题可能不是插件而是 php。用户应该是 PHP 运行的同一进程。因此,如果这是您的用户和组 ( /etc/php5/apache2/php.ini),您可能也需要将其设置为 www-data。

答案4

我解决了!我仍然认为这是一个 Apache 环境问题,但不确定这是否是解决问题的特定方法...无论如何,这是我所做的:

将环境变量更改为

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

sudo chown -R boris:www-data /var/www/

目前为止一切正常。将进一步测试...

相关内容