使所有者成为新创建的文件和文件夹www-data的所有者,而不是superuser / admin


13

到目前为止,我一直在争取权限,并发布了另一个问题,但确定了问题所在,但尚未解决任何问题。

我的设置:

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

我的问题:

目前,当我/var/www/html使用网络上的任何计算机在(例如:创建文件夹/ var / www / html / testsite1)上创建新文件夹时,此文件夹自动归boris:www-dataubuntu桌面安装程序中的主要管理员用户(“ boris”所拥有),并且ls -l在新创建的文件夹上运行时确实显示boris:www-data ),这导致我当前的设置出现问题(主要是LifeInTheGrid使用Duplicator Plugin用于wordpress)。但是,我/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/

然后通过执行以下操作来设置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配置和envvars,它已经设置为:

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

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

这是我所做的:

将envvars更改为

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

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

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


将文件设置为由www-data用户或组拥有,对于安全性而言是个坏主意,尽管在极少数情况下,Web服务器需要对它们进行写访问的某些文件可能是必要的。您要达到的目标是什么?
thomasrutter

Answers:


11

问题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中的指示使用a (也就是说,在正确的设置中,您应该依赖组权限而非用户所有者权限来访问Web文件)。


PHP Wordpress复制器问题

权限问题是用户/组PHP根据需要进行读写操作,并且很可能+x在目录上编辑dir结构等。

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

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


我喜欢setuid方法:)
Rinzwind 2015年

这正是我想要的!!唯一的问题:它不起作用:-(我通过其本地IP访问服务器在Mac上创建了一个文件夹(即不使用ubuntu台式机)。当我运行ls -l时,它仍然是boris:www-拥有的数据:-/
Boris Chevreau

是否因为我在文件而不是文件夹上设置了用户所有权?仅仅是因为我创建的文件夹不能由www-data:www-data自动拥有吗?
鲍里斯·谢夫勒

Mac与Linux不同,如果您真的不走运,那么此方法将无法工作,最终您将不得不为设置默认文件而烦恼很多简单权限(例如ACL等) 。同样,“没有用”是模棱两可的。定义不起作用,并包含输出作为对问题的编辑。
托马斯·沃德

1
在Linux,iirc上始终忽略应用于目录的setuid
muru

6

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

首先安装它:

$ sudo apt-get install incron

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

$ 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,它将自动将onwership设置为www-data:www-data

incrontab中的行说明:

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

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

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


他们无需inotify和setgid就可以实现这样的目标-用户所有权可能不应该经常更改,他们可以自己重置用户所有权...或使用可能会很痛苦的ACL
Thomas Ward

该服务器的全部目的是让我们将其用作“主本地主机”,例如,创建localhost网站,并能够非常轻松地动态编辑/替换/移动和创建测试站点。如果我必须手动重设所有内容,那么这将扼杀整个目的:-/
Boris Chevreau

这是“ incron”方式的唯一方法吗?我不明白为什么它必须如此复杂。我正在寻找的是网络中所有计算机在此服务器上创建网站的简单方法。最终,由于我没有静态IP(因此安全性不是问题),您是否会想到另一种转变?
鲍里斯·谢夫罗

谢谢,作品就像一个魅力!
拖曳

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

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

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

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


www-data我相信Ubuntu默认运行PHP进程/工人,就像Debian一样。
托马斯·沃德

同样,问题/var/www/html还在于组所有权和读/写特权。另一个问题是他们希望用户创建的任何文件都具有www-data:www-data,而我的猜测是这些用户是网络用户,而不是Wordpress用户,因此您必须追求Linux文件权限。
托马斯·沃德

这些确实是网络用户,这是我使用sudo useradd -r -s / bin / false USERNAME在ubuntu服务器中创建的用户,这些用户用于访问本地网络共享文件夹
Boris Chevreau

如果我将所有文件夹和文件的所有权和写权限更改回boris:www-data,然后将apache的envvars更改为boris:www-data怎么办?既然我每次创建新文件时都将其设置为所有者boris:www-data,这是否可以解决问题?
鲍里斯·谢夫勒

2

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

将envvars更改为

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

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

到目前为止,它一直在工作。会进一步测试...

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.