使新创建的文件和文件夹的所有者成为 www-data 而不是超级用户/管理员

Bor*_*eau 15 permissions samba apache2 chown

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

我的设置:

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

我的问题:

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

因此,我想知道如何:

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

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

有没有办法做到这一点?

注意:我是 Linux 和命令行相关的超级新手,但我很快就赶上了。

注 2:umask 已经设置为 0002

编辑:

试过这个:

sudo chown -R www-data:www-data /var/www/
Run Code Online (Sandbox Code Playgroud)

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

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html
Run Code Online (Sandbox Code Playgroud)

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

我跑

ls -l on /var/www/html
Run Code Online (Sandbox Code Playgroud)

输出仍然是:

drwxr-sr-x 2 boris   www-data  testsite1
Run Code Online (Sandbox Code Playgroud)

笔记:

我之前已经检查过我的 apache 配置和 envvars,它已经设置为:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Run Code Online (Sandbox Code Playgroud)

编辑:我向后尝试,例如将所有内容都设置为 boris:www-data 并将我的 envvars apache 配置设置为 boris:www-data。有效!

这是我所做的:

将 envvars 更改为

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data
Run Code Online (Sandbox Code Playgroud)

sudo chown -R boris:www-data /var/www/
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*ard 12

问题 1 的答案:递归chown

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

sudo chown -R www-data:www-data /var/www/
Run Code Online (Sandbox Code Playgroud)

这样,每个文件和文件夹都将在其中设置为具有这些所有权权限。


问题#2 的一半答案:setgid

如果您想要文件的默认组所有权,请在文件夹setgid上设置位/var/www/html。然后应按照文件夹中的说明使用该组创建新文件。

sudo chmod g+s /var/www/html
Run Code Online (Sandbox Code Playgroud)

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

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


PHP Wordpress 复制器问题

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

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

理想情况下,您还应该检查 Duplicator Plugin 的文档,以验证它需要哪些权限才能运行和工作。


krt*_*krt 6

为了确保您在其中创建的任何文件或文件夹/var/www/html都自动归您可以使用的 www-data 所有inotify,它就像 cron 一样,但会监视文件夹/文件的属性更改、文件创建、修改等等。

首先安装它:

$ sudo apt-get install incron
Run Code Online (Sandbox Code Playgroud)

incron通过打开/etc/incron.allow以允许 root 使用:

$ sudo vim /etc/incron.allow
Run Code Online (Sandbox Code Playgroud)

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

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

$ sudo incrontab -u root -e
Run Code Online (Sandbox Code Playgroud)

并向其添加以下行:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/
Run Code Online (Sandbox Code Playgroud)

保存并退出。

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

incrontab 中的行说明:

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

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

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


Rin*_*ind 3

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

cd /var/www/
chown -R  www-data:www-data /var/www/
Run Code Online (Sandbox Code Playgroud)
  • ./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
Run Code Online (Sandbox Code Playgroud)

编辑此内容后需要重新启动 apache ( sudo service apache restart)。

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

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