到目前为止,我一直在努力解决权限问题,并发布了另一个问题,但确定了问题所在,但还没有任何办法解决它。
我的设置:
- 带有 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/
目前为止一切正常。将进一步测试...